diff --git a/.DS_Store b/.DS_Store
index d45bcb1..f7d53bb 100644
--- a/.DS_Store
+++ b/.DS_Store
diff --git a/netcore/netcore/.DS_Store b/netcore/netcore/.DS_Store
index 8349213..428a747 100644
--- a/netcore/netcore/.DS_Store
+++ b/netcore/netcore/.DS_Store
diff --git a/netcore/src/.DS_Store b/netcore/src/.DS_Store
index 3353ee1..eb1f690 100644
--- a/netcore/src/.DS_Store
+++ b/netcore/src/.DS_Store
diff --git a/netcore/src/Application/.DS_Store b/netcore/src/Application/.DS_Store
index 1f866c2..fc78486 100644
--- a/netcore/src/Application/.DS_Store
+++ b/netcore/src/Application/.DS_Store
diff --git a/netcore/src/Application/NCC.API/.DS_Store b/netcore/src/Application/NCC.API/.DS_Store
index 76012f3..fe916be 100644
--- a/netcore/src/Application/NCC.API/.DS_Store
+++ b/netcore/src/Application/NCC.API/.DS_Store
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs
new file mode 100644
index 0000000..ddddedc
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using NCC.Extend.Entitys.Dto.LqEventUser;
+
+namespace NCC.Extend.Entitys.Dto.LqEvent
+{
+ ///
+ /// 拓客活动创建输入参数
+ ///
+ ///
+ /// 用于创建新拓客活动的参数类,包含活动基础信息和参与成员列表。
+ /// 系统会自动生成活动ID,无需手动指定。
+ ///
+ public class LqEventCrInput
+ {
+ ///
+ /// 活动名称
+ ///
+ ///
+ /// 拓客活动的名称,必填字段
+ /// 最大长度:255个字符
+ /// 示例:春节拓客活动、夏季促销活动
+ ///
+ [Required(ErrorMessage = "活动名称不能为空")]
+ [StringLength(255, ErrorMessage = "活动名称长度不能超过255个字符")]
+ public string EventName { get; set; }
+
+ ///
+ /// 开始时间
+ ///
+ ///
+ /// 拓客活动的开始时间,可选字段
+ /// 格式:yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd
+ /// 示例:2024-01-15 09:00:00
+ ///
+ public DateTime? StartTime { get; set; }
+
+ ///
+ /// 结束时间
+ ///
+ ///
+ /// 拓客活动的结束时间,可选字段
+ /// 格式:yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd
+ /// 示例:2024-01-20 18:00:00
+ /// 建议:结束时间应晚于开始时间
+ ///
+ public DateTime? EndTime { get; set; }
+
+ ///
+ /// 活动负责人
+ ///
+ ///
+ /// 拓客活动的负责人id
+ /// 最大长度:255个字符
+ ///
+ [StringLength(255, ErrorMessage = "活动负责人长度不能超过255个字符")]
+ public string EventCoordinator { get; set; }
+
+ ///
+ /// 活动编号
+ ///
+ ///
+ /// 拓客活动的编号,可选字段
+ /// 最大长度:255个字符
+ /// 建议格式:TK + 年份 + 序号,如:TK2024001
+ ///
+ [StringLength(255, ErrorMessage = "活动编号长度不能超过255个字符")]
+ public string EventNumber { get; set; }
+
+ ///
+ /// 拓客活动成员列表
+ ///
+ ///
+ /// 参与拓客活动的成员列表,可选字段
+ /// 可以为空,表示暂时不添加成员
+ /// 每个成员包含:用户ID、部门ID、战队名称等信息
+ ///
+ public List Members { get; set; } = new List();
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs
new file mode 100644
index 0000000..649452d
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using NCC.Extend.Entitys.Dto.LqEventUser;
+
+namespace NCC.Extend.Entitys.Dto.LqEvent
+{
+ ///
+ /// 拓客活动详情输出
+ ///
+ public class LqEventInfoOutput
+ {
+ ///
+ /// 主键ID
+ ///
+ public string id { get; set; }
+
+ ///
+ /// 活动名称
+ ///
+ public string eventName { get; set; }
+
+ ///
+ /// 开始时间
+ ///
+ public DateTime? startTime { get; set; }
+
+ ///
+ /// 结束时间
+ ///
+ public DateTime? endTime { get; set; }
+
+ ///
+ /// 活动负责人
+ ///
+ public string eventCoordinator { get; set; }
+
+ ///
+ /// 活动编号
+ ///
+ public string eventNumber { get; set; }
+
+ ///
+ /// 拓客活动成员列表
+ ///
+ public List Members { get; set; } = new List();
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventListOutput.cs
new file mode 100644
index 0000000..845b628
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventListOutput.cs
@@ -0,0 +1,45 @@
+using System;
+
+namespace NCC.Extend.Entitys.Dto.LqEvent
+{
+ ///
+ /// 拓客活动列表输出
+ ///
+ public class LqEventListOutput
+ {
+ ///
+ /// 主键ID
+ ///
+ public string id { get; set; }
+
+ ///
+ /// 活动名称
+ ///
+ public string eventName { get; set; }
+
+ ///
+ /// 开始时间
+ ///
+ public DateTime? startTime { get; set; }
+
+ ///
+ /// 结束时间
+ ///
+ public DateTime? endTime { get; set; }
+
+ ///
+ /// 活动负责人
+ ///
+ public string eventCoordinator { get; set; }
+
+ ///
+ /// 活动编号
+ ///
+ public string eventNumber { get; set; }
+
+ ///
+ /// 成员数量
+ ///
+ public int memberCount { get; set; }
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventListQueryInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventListQueryInput.cs
new file mode 100644
index 0000000..a77b588
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventListQueryInput.cs
@@ -0,0 +1,93 @@
+using System;
+
+namespace NCC.Extend.Entitys.Dto.LqEvent
+{
+ ///
+ /// 拓客活动列表查询输入参数
+ ///
+ ///
+ /// 用于拓客活动列表查询的参数类,支持分页、排序和多条件筛选。
+ /// 所有筛选条件都是可选的,支持模糊查询和时间范围查询。
+ ///
+ public class LqEventListQueryInput
+ {
+ ///
+ /// 拓客活动ID
+ ///
+ ///
+ /// 精确匹配查询,用于根据特定ID查询活动
+ ///
+ public string Id { get; set; }
+
+ ///
+ /// 活动名称
+ ///
+ ///
+ /// 模糊查询,支持部分匹配活动名称
+ /// 示例:输入"春节"可以匹配"春节拓客活动"
+ ///
+ public string EventName { get; set; }
+
+ ///
+ /// 活动编号
+ ///
+ ///
+ /// 模糊查询,支持部分匹配活动编号
+ /// 示例:输入"TK2024"可以匹配"TK2024001"
+ ///
+ public string EventNumber { get; set; }
+
+ ///
+ /// 活动负责人
+ ///
+ ///
+ /// 模糊查询,支持部分匹配负责人姓名
+ /// 示例:输入"张"可以匹配"张三"
+ ///
+ public string EventCoordinator { get; set; }
+
+ ///
+ /// 排序字段
+ ///
+ ///
+ /// 指定按哪个字段排序,支持以下字段:
+ /// - Id: 活动ID
+ /// - EventName: 活动名称
+ /// - EventNumber: 活动编号
+ /// - EventCoordinator: 活动负责人
+ /// - StartTime: 开始时间
+ /// - EndTime: 结束时间
+ /// 默认为"Id"
+ ///
+ public string sidx { get; set; }
+
+ ///
+ /// 排序方式
+ ///
+ ///
+ /// 指定排序方向:
+ /// - asc: 升序(从小到大)
+ /// - desc: 降序(从大到小)
+ /// 默认为"desc"
+ ///
+ public string sord { get; set; }
+
+ ///
+ /// 页码
+ ///
+ ///
+ /// 分页查询的页码,从1开始
+ /// 默认为1
+ ///
+ public int page { get; set; } = 1;
+
+ ///
+ /// 每页记录数
+ ///
+ ///
+ /// 每页返回的记录数量
+ /// 默认为10,建议范围:1-100
+ ///
+ public int rows { get; set; } = 10;
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUpInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUpInput.cs
new file mode 100644
index 0000000..9db7cf4
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUpInput.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using NCC.Extend.Entitys.Dto.LqEventUser;
+
+namespace NCC.Extend.Entitys.Dto.LqEvent
+{
+ ///
+ /// 拓客活动更新输入参数
+ ///
+ public class LqEventUpInput : LqEventCrInput
+ {
+ ///
+ /// 主键ID
+ ///
+ [Required(ErrorMessage = "活动ID不能为空")]
+ public new int? Id { get; set; }
+
+ ///
+ /// 活动名称
+ ///
+ [Required(ErrorMessage = "活动名称不能为空")]
+ [StringLength(255, ErrorMessage = "活动名称长度不能超过255个字符")]
+ public new string EventName { get; set; }
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUserEventOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUserEventOutput.cs
new file mode 100644
index 0000000..d9c5af5
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUserEventOutput.cs
@@ -0,0 +1,70 @@
+using System;
+
+namespace NCC.Extend.Entitys.Dto.LqEvent
+{
+ ///
+ /// 用户参与的拓客活动输出
+ ///
+ public class LqEventUserEventOutput
+ {
+ ///
+ /// 活动ID
+ ///
+ public string EventId { get; set; }
+
+ ///
+ /// 活动名称
+ ///
+ public string EventName { get; set; }
+
+ ///
+ /// 活动编号
+ ///
+ public string EventNumber { get; set; }
+
+ ///
+ /// 活动负责人
+ ///
+ public string EventCoordinator { get; set; }
+
+ ///
+ /// 开始时间
+ ///
+ public DateTime? StartTime { get; set; }
+
+ ///
+ /// 结束时间
+ ///
+ public DateTime? EndTime { get; set; }
+
+ ///
+ /// 用户ID
+ ///
+ public string UserId { get; set; }
+
+ ///
+ /// 部门ID
+ ///
+ public string DepId { get; set; }
+
+ ///
+ /// 战队名称
+ ///
+ public string TeamName { get; set; }
+
+ ///
+ /// 拓客目标数量
+ ///
+ public int EventTarget { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreationTime { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string CreationUser { get; set; }
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserCrInput.cs
new file mode 100644
index 0000000..00e2fb4
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserCrInput.cs
@@ -0,0 +1,37 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace NCC.Extend.Entitys.Dto.LqEventUser
+{
+ ///
+ /// 拓客活动用户创建输入参数
+ ///
+ public class LqEventUserCrInput
+ {
+ ///
+ /// 主键
+ ///
+ public string Id { get; set; }
+
+ ///
+ /// 拓客活动ID
+ ///
+ public string EventId { get; set; }
+
+ ///
+ /// 用户ID
+ ///
+ [Required(ErrorMessage = "用户ID不能为空")]
+ public string UserId { get; set; }
+
+ ///
+ /// 部门ID
+ ///
+ public string DepId { get; set; }
+
+ ///
+ /// 战队名称
+ ///
+ public string TeamName { get; set; }
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserInfoOutput.cs
new file mode 100644
index 0000000..1bb2e35
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserInfoOutput.cs
@@ -0,0 +1,45 @@
+using System;
+
+namespace NCC.Extend.Entitys.Dto.LqEventUser
+{
+ ///
+ /// 拓客活动用户详情输出
+ ///
+ public class LqEventUserInfoOutput
+ {
+ ///
+ /// 主键
+ ///
+ public string id { get; set; }
+
+ ///
+ /// 拓客活动ID
+ ///
+ public string eventId { get; set; }
+
+ ///
+ /// 用户ID
+ ///
+ public string userId { get; set; }
+
+ ///
+ /// 部门ID
+ ///
+ public string depId { get; set; }
+
+ ///
+ /// 战队名称
+ ///
+ public string teamName { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? creationTime { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string creationUser { get; set; }
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserListOutput.cs
new file mode 100644
index 0000000..941fd1d
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserListOutput.cs
@@ -0,0 +1,45 @@
+using System;
+
+namespace NCC.Extend.Entitys.Dto.LqEventUser
+{
+ ///
+ /// 拓客活动用户列表输出
+ ///
+ public class LqEventUserListOutput
+ {
+ ///
+ /// 主键
+ ///
+ public string Id { get; set; }
+
+ ///
+ /// 拓客活动ID
+ ///
+ public string EventId { get; set; }
+
+ ///
+ /// 用户ID
+ ///
+ public string UserId { get; set; }
+
+ ///
+ /// 部门ID
+ ///
+ public string DepId { get; set; }
+
+ ///
+ /// 战队名称
+ ///
+ public string TeamName { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreationTime { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string CreationUser { get; set; }
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserListQueryInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserListQueryInput.cs
new file mode 100644
index 0000000..f136092
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserListQueryInput.cs
@@ -0,0 +1,65 @@
+using System;
+
+namespace NCC.Extend.Entitys.Dto.LqEventUser
+{
+ ///
+ /// 拓客活动用户列表查询输入
+ ///
+ public class LqEventUserListQueryInput
+ {
+ ///
+ /// 主键
+ ///
+ public string Id { get; set; }
+
+ ///
+ /// 拓客活动ID
+ ///
+ public string EventId { get; set; }
+
+ ///
+ /// 用户ID
+ ///
+ public string UserId { get; set; }
+
+ ///
+ /// 部门ID
+ ///
+ public string DepId { get; set; }
+
+ ///
+ /// 战队名称
+ ///
+ public string TeamName { get; set; }
+
+ ///
+ /// 创建时间(开始)
+ ///
+ public DateTime? CreationTimeBegin { get; set; }
+
+ ///
+ /// 创建时间(结束)
+ ///
+ public DateTime? CreationTimeEnd { get; set; }
+
+ ///
+ /// 排序字段
+ ///
+ public string sidx { get; set; }
+
+ ///
+ /// 排序方式
+ ///
+ public string sord { get; set; }
+
+ ///
+ /// 页码
+ ///
+ public int page { get; set; } = 1;
+
+ ///
+ /// 每页数量
+ ///
+ public int rows { get; set; } = 10;
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserUpInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserUpInput.cs
new file mode 100644
index 0000000..4c8023e
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserUpInput.cs
@@ -0,0 +1,29 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace NCC.Extend.Entitys.Dto.LqEventUser
+{
+ ///
+ /// 拓客活动用户更新输入参数
+ ///
+ public class LqEventUserUpInput : LqEventUserCrInput
+ {
+ ///
+ /// 主键
+ ///
+ [Required(ErrorMessage = "主键不能为空")]
+ public new string Id { get; set; }
+
+ ///
+ /// 拓客活动ID
+ ///
+ [Required(ErrorMessage = "拓客活动ID不能为空")]
+ public new string EventId { get; set; }
+
+ ///
+ /// 用户ID
+ ///
+ [Required(ErrorMessage = "用户ID不能为空")]
+ public new string UserId { get; set; }
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkCrInput.cs
index 9e59613..ddc69d9 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkCrInput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkCrInput.cs
@@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
-using NCC.Extend.Entitys.Dto.LqHytkMx;
using NCC.Extend.Entitys.Dto.LqHytkJksyj;
using NCC.Extend.Entitys.Dto.LqHytkKjbsyj;
+using NCC.Extend.Entitys.Dto.LqHytkMx;
namespace NCC.Extend.Entitys.Dto.LqHytkHytk
{
@@ -15,72 +15,72 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
/// 退卡编号
///
public string id { get; set; }
-
+
///
/// 门店
///
public string md { get; set; }
-
+
///
/// 门店编号
///
public string mdbh { get; set; }
-
+
///
/// 门店名称
///
public string mdmc { get; set; }
-
+
///
/// 会员
///
public string hy { get; set; }
-
+
///
/// 会员姓名
///
public string hymc { get; set; }
-
+
///
/// 会员账号
///
public string hyzh { get; set; }
-
+
///
/// 顾客类型
///
public string gklx { get; set; }
-
+
///
/// 退卡总金额
///
public decimal? tkje { get; set; }
-
+
///
/// 手工费用
///
public decimal? sgfy { get; set; }
-
+
///
/// 备注
///
public string bz { get; set; }
-
+
///
/// 退卡时间
///
public DateTime? tksj { get; set; }
-
+
///
/// 操作人员
///
public string czry { get; set; }
-
+
///
/// 退卡状态
///
public string tkzt { get; set; }
-
+
///
/// 退卡原因
///
@@ -90,21 +90,20 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
/// 退卡附件
///
public string fileUrl { get; set; }
-
+
///
/// 退卡品项明细列表
///
public List lqHytkMxList { get; set; }
-
+
///
/// 退卡健康师业绩列表
///
public List lqHytkJksyjList { get; set; }
-
+
///
/// 退卡科技部老师业绩列表
///
public List lqHytkKjbsyjList { get; set; }
-
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkJksyj/LqHytkJksyjCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkJksyj/LqHytkJksyjCrInput.cs
index 57dd462..c3320be 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkJksyj/LqHytkJksyjCrInput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkJksyj/LqHytkJksyjCrInput.cs
@@ -11,56 +11,55 @@ namespace NCC.Extend.Entitys.Dto.LqHytkJksyj
/// 业绩编号
///
public string id { get; set; }
-
+
///
/// 关联退卡编号
///
public string gltkbh { get; set; }
-
+
///
/// 健康师
///
public string jks { get; set; }
-
+
///
/// 健康师姓名
///
public string jksxm { get; set; }
-
+
///
/// 健康师账号
///
public string jkszh { get; set; }
-
+
///
/// 健康师业绩
///
public decimal? jksyj { get; set; }
-
+
///
/// 退卡时间
///
public DateTime? tksj { get; set; }
-
+
///
/// 金三角id
///
public string F_jsjid { get; set; }
-
+
///
/// 关联项目资料表ID
///
public string F_tkpxid { get; set; }
-
+
///
/// 手工费
///
public decimal? F_LaborCost { get; set; }
-
+
///
/// 退卡品项次数
///
public decimal? F_tkpxNumber { get; set; }
-
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxCrInput.cs
index cfba5e9..7f73fc3 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxCrInput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxCrInput.cs
@@ -14,61 +14,60 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx
/// 明细编号
///
public string id { get; set; }
-
+
///
/// 关联退卡编号
///
public string gltkbh { get; set; }
-
+
///
/// 品项
///
public string px { get; set; }
-
+
///
/// 品项名称
///
public string pxmc { get; set; }
-
+
///
/// 品项价格
///
public decimal? pxjg { get; set; }
-
+
///
/// 退款金额
///
public decimal? tkje { get; set; }
-
+
///
/// 项目次数
///
public int? F_ProjectNumber { get; set; }
-
+
///
/// 是否有效
///
public int? F_IsEnabled { get; set; }
-
+
///
/// 来源类型
///
public string F_SourceType { get; set; }
-
+
///
/// 合计金额
///
public decimal? F_TotalPrice { get; set; }
-
+
///
/// 退卡健康师业绩列表
///
public List lqHytkJksyjList { get; set; }
-
+
///
/// 退卡科技部老师业绩列表
///
public List lqHytkKjbsyjList { get; set; }
-
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxInfoOutput.cs
index 57550f1..c462028 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxInfoOutput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxInfoOutput.cs
@@ -14,47 +14,47 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx
/// 明细编号
///
public string id { get; set; }
-
+
///
/// 关联退卡编号
///
public string gltkbh { get; set; }
-
+
///
/// 品项编号
///
public string px { get; set; }
-
+
///
/// 品项名称
///
public string pxmc { get; set; }
-
+
///
/// 品项价格
///
public decimal? pxjg { get; set; }
-
+
///
/// 退款金额
///
public decimal? tkje { get; set; }
-
+
///
/// 项目次数
///
public int? F_ProjectNumber { get; set; }
-
+
///
/// 是否有效
///
public int? F_IsEnabled { get; set; }
-
+
///
/// 来源类型(开卡/赠送/其他)
///
public string F_SourceType { get; set; }
-
+
///
/// 合计金额(品项价格 × 项目次数)
///
@@ -69,6 +69,5 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx
/// 科技部老师业绩列表
///
public List lqHytkKjbsyjList { get; set; }
-
}
-}
\ No newline at end of file
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaCrInput.cs
index be327a3..344aa92 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaCrInput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaCrInput.cs
@@ -1,10 +1,10 @@
using System;
-using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
namespace NCC.Extend.Entitys.Dto.LqYxhdfa
{
///
- /// 营销活动方案修改输入参数
+ /// 营销活动方案创建输入参数
///
public class LqYxhdfaCrInput
{
@@ -12,26 +12,28 @@ namespace NCC.Extend.Entitys.Dto.LqYxhdfa
/// 方案编号
///
public string id { get; set; }
-
+
///
/// 营销活动编号
///
+ [Required(ErrorMessage = "营销活动编号不能为空")]
public string yxhdbh { get; set; }
-
+
///
/// 活动名称
///
+ [Required(ErrorMessage = "活动名称不能为空")]
+ [StringLength(200, ErrorMessage = "活动名称长度不能超过200个字符")]
public string hdmc { get; set; }
-
+
///
/// 张数奖
///
public string zsj { get; set; }
-
+
///
/// 金额奖
///
public string jej { get; set; }
-
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaInfoOutput.cs
index 79e96e4..200c105 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaInfoOutput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaInfoOutput.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
namespace NCC.Extend.Entitys.Dto.LqYxhdfa
{
@@ -12,26 +11,25 @@ namespace NCC.Extend.Entitys.Dto.LqYxhdfa
/// 方案编号
///
public string id { get; set; }
-
+
///
/// 营销活动编号
///
public string yxhdbh { get; set; }
-
+
///
/// 活动名称
///
public string hdmc { get; set; }
-
+
///
/// 张数奖
///
public string zsj { get; set; }
-
+
///
/// 金额奖
///
public string jej { get; set; }
-
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs
new file mode 100644
index 0000000..ae79ca9
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs
@@ -0,0 +1,48 @@
+using System;
+using SqlSugar;
+
+namespace NCC.Extend.Entitys.lq_event
+{
+ ///
+ /// 活动事件表
+ ///
+ [SugarTable("lq_Event")]
+ public class LqEventEntity
+ {
+ ///
+ /// 主键ID
+ ///
+ [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+ ///
+ /// 活动名称
+ ///
+ [SugarColumn(ColumnName = "F_EventName")]
+ public string EventName { get; set; }
+
+ ///
+ /// 开始时间
+ ///
+ [SugarColumn(ColumnName = "F_StartTime")]
+ public DateTime? StartTime { get; set; }
+
+ ///
+ /// 结束时间
+ ///
+ [SugarColumn(ColumnName = "F_EndTime")]
+ public DateTime? EndTime { get; set; }
+
+ ///
+ /// 活动负责人
+ ///
+ [SugarColumn(ColumnName = "F_EventCoordinator")]
+ public string EventCoordinator { get; set; }
+
+ ///
+ /// 活动编号
+ ///
+ [SugarColumn(ColumnName = "F_EventNumber")]
+ public string EventNumber { get; set; }
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_eventuser/LqEventUserEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_eventuser/LqEventUserEntity.cs
new file mode 100644
index 0000000..8ce9f42
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_eventuser/LqEventUserEntity.cs
@@ -0,0 +1,60 @@
+using System;
+using SqlSugar;
+
+namespace NCC.Extend.Entitys.lq_eventuser
+{
+ ///
+ /// 拓客活动用户表
+ ///
+ [SugarTable("lq_eventuser")]
+ public class LqEventUserEntity
+ {
+ ///
+ /// 主键
+ ///
+ [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
+ public string Id { get; set; }
+
+ ///
+ /// 拓客活动ID
+ ///
+ [SugarColumn(ColumnName = "F_EventId")]
+ public string EventId { get; set; }
+
+ ///
+ /// 用户ID
+ ///
+ [SugarColumn(ColumnName = "F_UserId")]
+ public string UserId { get; set; }
+
+ ///
+ /// 部门ID
+ ///
+ [SugarColumn(ColumnName = "F_DepId")]
+ public string DepId { get; set; }
+
+ ///
+ /// 战队名称
+ ///
+ [SugarColumn(ColumnName = "F_TeamName")]
+ public string TeamName { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ [SugarColumn(ColumnName = "F_CreationTime")]
+ public DateTime? CreationTime { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ [SugarColumn(ColumnName = "F_CreationUser")]
+ public string CreationUser { get; set; }
+
+ ///
+ /// 拓客目标数量
+ ///
+ [SugarColumn(ColumnName = "F_EventTarget")]
+ public int EventTarget { get; set; }
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs
index ae9436e..4fd006b 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs
@@ -1,6 +1,6 @@
+using System;
using NCC.Common.Const;
using SqlSugar;
-using System;
namespace NCC.Extend.Entitys.lq_hytk_jksyj
{
@@ -16,96 +16,101 @@ namespace NCC.Extend.Entitys.lq_hytk_jksyj
///
[SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
public string Id { get; set; }
-
+
///
/// 关联退卡编号
///
- [SugarColumn(ColumnName = "gltkbh")]
+ [SugarColumn(ColumnName = "gltkbh")]
public string Gltkbh { get; set; }
-
+
///
/// 健康师
///
- [SugarColumn(ColumnName = "jks")]
+ [SugarColumn(ColumnName = "jks")]
public string Jks { get; set; }
-
+
///
/// 健康师姓名
///
- [SugarColumn(ColumnName = "jksxm")]
+ [SugarColumn(ColumnName = "jksxm")]
public string Jksxm { get; set; }
-
+
///
/// 健康师账号
///
- [SugarColumn(ColumnName = "jkszh")]
+ [SugarColumn(ColumnName = "jkszh")]
public string Jkszh { get; set; }
-
+
///
/// 健康师业绩
///
- [SugarColumn(ColumnName = "jksyj")]
+ [SugarColumn(ColumnName = "jksyj")]
public decimal? Jksyj { get; set; }
-
+
///
/// 退卡时间
///
- [SugarColumn(ColumnName = "tksj")]
+ [SugarColumn(ColumnName = "tksj")]
public DateTime? Tksj { get; set; }
-
+
///
/// 金三角id
///
- [SugarColumn(ColumnName = "F_jsjid")]
+ [SugarColumn(ColumnName = "F_jsjid")]
public string F_jsjid { get; set; }
-
+
///
/// 关联项目资料表ID
///
- [SugarColumn(ColumnName = "F_tkpxid")]
+ [SugarColumn(ColumnName = "F_tkpxid")]
public string F_tkpxid { get; set; }
-
+
///
/// 手工费
///
- [SugarColumn(ColumnName = "F_LaborCost")]
+ [SugarColumn(ColumnName = "F_LaborCost")]
public decimal? F_LaborCost { get; set; }
-
+
///
/// 退卡品项次数
///
- [SugarColumn(ColumnName = "F_tkpxNumber")]
+ [SugarColumn(ColumnName = "F_tkpxNumber")]
public decimal? F_tkpxNumber { get; set; }
-
+
///
/// 创建时间
///
- [SugarColumn(ColumnName = "F_CreateTime")]
+ [SugarColumn(ColumnName = "F_CreateTime")]
public DateTime? F_CreateTime { get; set; }
-
+
///
/// 创建用户
///
- [SugarColumn(ColumnName = "F_CreateUser")]
+ [SugarColumn(ColumnName = "F_CreateUser")]
public string F_CreateUser { get; set; }
-
+
///
/// 修改时间
///
- [SugarColumn(ColumnName = "F_ModifyTime")]
+ [SugarColumn(ColumnName = "F_ModifyTime")]
public DateTime? F_ModifyTime { get; set; }
-
+
///
/// 修改用户
///
- [SugarColumn(ColumnName = "F_ModifyUser")]
+ [SugarColumn(ColumnName = "F_ModifyUser")]
public string F_ModifyUser { get; set; }
-
+
///
/// 删除标记
///
- [SugarColumn(ColumnName = "F_DeleteMark")]
+ [SugarColumn(ColumnName = "F_DeleteMark")]
public int? F_DeleteMark { get; set; }
-
+
+ ///
+ /// 退卡品项明细id
+ ///
+ [SugarColumn(ColumnName = "F_CardReturn")]
+ public string CardReturn { get; set; }
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs
index 86c12cd..fe4d17c 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs
@@ -1,6 +1,6 @@
+using System;
using NCC.Common.Const;
using SqlSugar;
-using System;
namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
{
@@ -16,90 +16,95 @@ namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
///
[SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
public string Id { get; set; }
-
+
///
/// 关联退卡编号
///
- [SugarColumn(ColumnName = "gltkbh")]
+ [SugarColumn(ColumnName = "gltkbh")]
public string Gltkbh { get; set; }
-
+
///
/// 科技部老师
///
- [SugarColumn(ColumnName = "kjbls")]
+ [SugarColumn(ColumnName = "kjbls")]
public string Kjbls { get; set; }
-
+
///
/// 科技部老师姓名
///
- [SugarColumn(ColumnName = "kjblsxm")]
+ [SugarColumn(ColumnName = "kjblsxm")]
public string Kjblsxm { get; set; }
-
+
///
/// 科技部老师账号
///
- [SugarColumn(ColumnName = "kjblszh")]
+ [SugarColumn(ColumnName = "kjblszh")]
public string Kjblszh { get; set; }
-
+
///
/// 科技部老师业绩
///
- [SugarColumn(ColumnName = "kjblsyj")]
+ [SugarColumn(ColumnName = "kjblsyj")]
public decimal? Kjblsyj { get; set; }
-
+
///
/// 退卡时间
///
- [SugarColumn(ColumnName = "tksj")]
+ [SugarColumn(ColumnName = "tksj")]
public DateTime? Tksj { get; set; }
-
+
///
/// 关联项目资料表ID
///
- [SugarColumn(ColumnName = "F_tkpxid")]
+ [SugarColumn(ColumnName = "F_tkpxid")]
public string F_tkpxid { get; set; }
-
+
///
/// 手工费
///
- [SugarColumn(ColumnName = "F_LaborCost")]
+ [SugarColumn(ColumnName = "F_LaborCost")]
public decimal? F_LaborCost { get; set; }
-
+
///
/// 退卡品项次数
///
- [SugarColumn(ColumnName = "F_tkpxNumber")]
+ [SugarColumn(ColumnName = "F_tkpxNumber")]
public decimal? F_tkpxNumber { get; set; }
-
+
///
/// 创建时间
///
- [SugarColumn(ColumnName = "F_CreateTime")]
+ [SugarColumn(ColumnName = "F_CreateTime")]
public DateTime? F_CreateTime { get; set; }
-
+
///
/// 创建用户
///
- [SugarColumn(ColumnName = "F_CreateUser")]
+ [SugarColumn(ColumnName = "F_CreateUser")]
public string F_CreateUser { get; set; }
-
+
///
/// 修改时间
///
- [SugarColumn(ColumnName = "F_ModifyTime")]
+ [SugarColumn(ColumnName = "F_ModifyTime")]
public DateTime? F_ModifyTime { get; set; }
-
+
///
/// 修改用户
///
- [SugarColumn(ColumnName = "F_ModifyUser")]
+ [SugarColumn(ColumnName = "F_ModifyUser")]
public string F_ModifyUser { get; set; }
-
+
///
/// 删除标记
///
- [SugarColumn(ColumnName = "F_DeleteMark")]
+ [SugarColumn(ColumnName = "F_DeleteMark")]
public int? F_DeleteMark { get; set; }
-
+
+ ///
+ /// 退卡品项明细id
+ ///
+ [SugarColumn(ColumnName = "F_CardReturn")]
+ public string CardReturn { get; set; }
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_tkjlb/LqTkjlbEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_tkjlb/LqTkjlbEntity.cs
index f7d2f81..68a2683 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_tkjlb/LqTkjlbEntity.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_tkjlb/LqTkjlbEntity.cs
@@ -1,14 +1,12 @@
-using NCC.Common.Const;
+using System;
using SqlSugar;
-using System;
namespace NCC.Extend.Entitys.lq_tkjlb
{
///
- /// 拓客管理
+ /// 拓客基础信息表
///
[SugarTable("lq_tkjlb")]
- [Tenant(ClaimConst.TENANT_ID)]
public class LqTkjlbEntity
{
///
@@ -16,66 +14,65 @@ namespace NCC.Extend.Entitys.lq_tkjlb
///
[SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
public string Id { get; set; }
-
+
///
/// 拓客时间
///
- [SugarColumn(ColumnName = "tksj")]
+ [SugarColumn(ColumnName = "tksj")]
public DateTime? Tksj { get; set; }
-
+
///
/// 拓客人员
///
- [SugarColumn(ColumnName = "tkry")]
+ [SugarColumn(ColumnName = "tkry")]
public string Tkry { get; set; }
-
+
///
/// 顾客姓名
///
- [SugarColumn(ColumnName = "gkxm")]
+ [SugarColumn(ColumnName = "gkxm")]
public string Gkxm { get; set; }
-
+
///
/// 电话号码
///
- [SugarColumn(ColumnName = "dhhm")]
+ [SugarColumn(ColumnName = "dhhm")]
public string Dhhm { get; set; }
-
+
///
/// 购买张数
///
- [SugarColumn(ColumnName = "gmzs")]
+ [SugarColumn(ColumnName = "gmzs")]
public int? Gmzs { get; set; }
-
+
///
/// 支付方式
///
- [SugarColumn(ColumnName = "zffs")]
+ [SugarColumn(ColumnName = "zffs")]
public string Zffs { get; set; }
-
+
///
/// 是否加微信
///
- [SugarColumn(ColumnName = "sfjwx")]
+ [SugarColumn(ColumnName = "sfjwx")]
public string Sfjwx { get; set; }
-
+
///
/// 备注
///
- [SugarColumn(ColumnName = "bz")]
+ [SugarColumn(ColumnName = "bz")]
public string Bz { get; set; }
-
+
///
/// 所属门店
///
- [SugarColumn(ColumnName = "ssmd")]
+ [SugarColumn(ColumnName = "ssmd")]
public string Ssmd { get; set; }
-
+
///
/// 所属战队
///
- [SugarColumn(ColumnName = "sszd")]
+ [SugarColumn(ColumnName = "sszd")]
public string Sszd { get; set; }
-
}
-}
\ No newline at end of file
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Interfaces/LqEvent/ILqEventService.cs b/netcore/src/Modularity/Extend/NCC.Extend.Interfaces/LqEvent/ILqEventService.cs
new file mode 100644
index 0000000..bf8701b
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Interfaces/LqEvent/ILqEventService.cs
@@ -0,0 +1,220 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using NCC.Common.Filter;
+using NCC.Extend.Entitys.Dto.LqEvent;
+
+namespace NCC.Extend.Interfaces.LqEvent
+{
+ ///
+ /// 拓客活动服务接口
+ ///
+ ///
+ /// 提供拓客活动的完整管理功能,包括活动基础信息和成员管理。
+ /// 支持创建、查询、更新、删除拓客活动,以及管理每个活动的参与成员。
+ ///
+ public interface ILqEventService
+ {
+ ///
+ /// 获取拓客活动列表
+ ///
+ ///
+ /// 分页查询拓客活动列表,支持多条件筛选和排序。
+ /// 返回结果包含每个活动的成员数量统计。
+ ///
+ /// 示例请求:
+ /// ```json
+ /// {
+ /// "page": 1,
+ /// "rows": 10,
+ /// "sidx": "Id",
+ /// "sord": "desc",
+ /// "eventName": "春节拓客活动",
+ /// "eventNumber": "TK2024001",
+ /// "eventCoordinator": "张三",
+ /// "startTimeBegin": "2024-01-01",
+ /// "startTimeEnd": "2024-12-31"
+ /// }
+ /// ```
+ ///
+ /// 参数说明:
+ /// - page: 页码,从1开始
+ /// - rows: 每页记录数
+ /// - sidx: 排序字段(Id、EventName、EventNumber、EventCoordinator、StartTime、EndTime)
+ /// - sord: 排序方向(asc、desc)
+ /// - eventName: 活动名称(模糊查询)
+ /// - eventNumber: 活动编号(模糊查询)
+ /// - eventCoordinator: 活动负责人(模糊查询)
+ /// - startTimeBegin: 开始时间范围-开始
+ /// - startTimeEnd: 开始时间范围-结束
+ /// - endTimeBegin: 结束时间范围-开始
+ /// - endTimeEnd: 结束时间范围-结束
+ ///
+ /// 查询参数
+ /// 分页的拓客活动列表,包含成员数量统计
+ /// 成功返回拓客活动列表
+ /// 请求参数错误
+ /// 服务器内部错误
+ Task GetList(LqEventListQueryInput input);
+
+ ///
+ /// 获取拓客活动详情
+ ///
+ ///
+ /// 根据活动ID获取拓客活动的详细信息,包括基础信息和所有参与成员列表。
+ ///
+ /// 示例请求:
+ /// GET /api/Extend/LqEvent/1234567890123456789
+ ///
+ /// 返回数据包含:
+ /// - 活动基础信息(名称、编号、负责人、时间等)
+ /// - 成员列表(用户ID、部门ID、战队名称等)
+ ///
+ /// 拓客活动ID
+ /// 拓客活动详情,包含成员信息
+ /// 成功返回拓客活动详情
+ /// 拓客活动不存在
+ /// 服务器内部错误
+ Task GetInfo(string id);
+
+ ///
+ /// 创建拓客活动
+ ///
+ ///
+ /// 创建新的拓客活动,可以同时添加参与成员。
+ /// 系统会自动生成活动ID,并记录创建用户信息。
+ ///
+ /// 示例请求:
+ /// ```json
+ /// {
+ /// "eventName": "春节拓客活动",
+ /// "eventNumber": "TK2024001",
+ /// "eventCoordinator": "张三",
+ /// "startTime": "2024-01-15T09:00:00",
+ /// "endTime": "2024-01-20T18:00:00",
+ /// "members": [
+ /// {
+ /// "userId": "user001",
+ /// "depId": "dept001",
+ /// "teamName": "第一战队"
+ /// },
+ /// {
+ /// "userId": "user002",
+ /// "depId": "dept001",
+ /// "teamName": "第二战队"
+ /// }
+ /// ]
+ /// }
+ /// ```
+ ///
+ /// 参数说明:
+ /// - eventName: 活动名称(必填)
+ /// - eventNumber: 活动编号(可选)
+ /// - eventCoordinator: 活动负责人(可选)
+ /// - startTime: 开始时间(可选)
+ /// - endTime: 结束时间(可选)
+ /// - members: 参与成员列表(可选)
+ /// - userId: 用户ID(必填)
+ /// - depId: 部门ID(可选)
+ /// - teamName: 战队名称(可选)
+ ///
+ /// 创建参数
+ /// 无返回值
+ /// 拓客活动创建成功
+ /// 请求参数错误或验证失败
+ /// 服务器内部错误
+ Task Create(LqEventCrInput input);
+
+ ///
+ /// 更新拓客活动
+ ///
+ ///
+ /// 更新拓客活动信息,包括基础信息和成员列表。
+ /// 更新时会先删除原有成员,再添加新成员。
+ ///
+ /// 示例请求:
+ /// ```json
+ /// {
+ /// "id": "1234567890123456789",
+ /// "eventName": "春节拓客活动(更新)",
+ /// "eventNumber": "TK2024001",
+ /// "eventCoordinator": "李四",
+ /// "startTime": "2024-01-15T09:00:00",
+ /// "endTime": "2024-01-25T18:00:00",
+ /// "members": [
+ /// {
+ /// "userId": "user003",
+ /// "depId": "dept002",
+ /// "teamName": "精英战队"
+ /// }
+ /// ]
+ /// }
+ /// ```
+ ///
+ /// 参数说明:
+ /// - id: 拓客活动ID(必填)
+ /// - eventName: 活动名称(必填)
+ /// - eventNumber: 活动编号(可选)
+ /// - eventCoordinator: 活动负责人(可选)
+ /// - startTime: 开始时间(可选)
+ /// - endTime: 结束时间(可选)
+ /// - members: 参与成员列表(可选,为空则清空所有成员)
+ ///
+ /// 更新参数
+ /// 无返回值
+ /// 拓客活动更新成功
+ /// 请求参数错误或验证失败
+ /// 拓客活动不存在
+ /// 服务器内部错误
+ Task Update(LqEventUpInput input);
+
+ ///
+ /// 删除拓客活动
+ ///
+ ///
+ /// 删除指定的拓客活动,会同时删除该活动的所有成员记录。
+ /// 删除操作不可恢复,请谨慎使用。
+ ///
+ /// 示例请求:
+ /// DELETE /api/Extend/LqEvent/1234567890123456789
+ ///
+ /// 删除顺序:
+ /// 1. 先删除所有相关成员记录
+ /// 2. 再删除拓客活动记录
+ ///
+ /// 拓客活动ID
+ /// 无返回值
+ /// 拓客活动删除成功
+ /// 拓客活动不存在
+ /// 服务器内部错误
+ Task Delete(string id);
+
+ ///
+ /// 根据用户ID获取参与的拓客活动
+ ///
+ ///
+ /// 根据用户ID查询该用户参与的所有拓客活动,支持时间范围筛选。
+ /// 返回结果包含活动基础信息和用户在该活动中的详细信息。
+ ///
+ /// 示例请求:
+ /// GET /api/Extend/LqEvent/user/user001?startTime=2024-01-01&endTime=2024-12-31
+ ///
+ /// 参数说明:
+ /// - userId: 用户ID(必填)
+ /// - startTime: 开始时间(可选),查询在此时间之后开始的活动
+ /// - endTime: 结束时间(可选),查询在此时间之前结束的活动
+ ///
+ /// 返回数据包含:
+ /// - 活动基础信息(ID、名称、编号、负责人、开始时间、结束时间)
+ /// - 用户参与信息(部门ID、战队名称、目标数量等)
+ ///
+ /// 用户ID
+ /// 开始时间(可选)
+ /// 结束时间(可选)
+ /// 用户参与的拓客活动列表
+ /// 成功返回用户参与的拓客活动列表
+ /// 请求参数错误
+ /// 服务器内部错误
+ Task> GetUserEvents(string userId, DateTime? startTime = null, DateTime? endTime = null);
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs
new file mode 100644
index 0000000..97def2c
--- /dev/null
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs
@@ -0,0 +1,484 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Mapster;
+using Microsoft.AspNetCore.Mvc;
+using NCC.Common.Core.Manager;
+using NCC.Common.Filter;
+using NCC.Dependency;
+using NCC.DynamicApiController;
+using NCC.Extend.Entitys.Dto.LqEvent;
+using NCC.Extend.Entitys.Dto.LqEventUser;
+using NCC.Extend.Entitys.lq_event;
+using NCC.Extend.Entitys.lq_eventuser;
+using NCC.Extend.Interfaces.LqEvent;
+using NCC.FriendlyException;
+using SqlSugar;
+using Yitter.IdGenerator;
+
+namespace NCC.Extend.LqEvent
+{
+ ///
+ /// 拓客活动服务
+ ///
+ [ApiDescriptionSettings(Tag = "绿纤拓客活动服务", Name = "LqEvent", Order = 200)]
+ [Route("api/Extend/[controller]")]
+ [ApiController]
+ public class LqEventService : ILqEventService, IDynamicApiController, ITransient
+ {
+ private readonly ISqlSugarClient _db;
+ private readonly IUserManager _userManager;
+
+ public LqEventService(ISqlSugarClient db, IUserManager userManager)
+ {
+ _db = db;
+ _userManager = userManager;
+ }
+
+ #region 获取拓客活动列表
+ ///
+ /// 获取拓客活动列表
+ ///
+ ///
+ /// 分页查询拓客活动列表,支持多条件筛选和排序。
+ /// 返回结果包含每个活动的成员数量统计。
+ ///
+ /// 示例请求:
+ /// GET /api/Extend/LqEvent?page=1&rows=10&sidx=Id&sord=desc&eventName=春节拓客活动
+ ///
+ /// 支持的条件筛选:
+ /// - 活动名称模糊查询
+ /// - 活动编号模糊查询
+ /// - 活动负责人模糊查询
+ /// - 开始时间范围查询
+ /// - 结束时间范围查询
+ ///
+ /// 支持的排序字段:
+ /// - Id: 活动ID
+ /// - EventName: 活动名称
+ /// - EventNumber: 活动编号
+ /// - EventCoordinator: 活动负责人
+ /// - StartTime: 开始时间
+ /// - EndTime: 结束时间
+ ///
+ /// 查询参数
+ /// 分页的拓客活动列表,包含成员数量统计
+ [HttpGet("")]
+ public async Task GetList([FromQuery] LqEventListQueryInput input)
+ {
+ var sidx = input.sidx == null ? "id" : input.sidx;
+ var sord = input.sord == null ? "desc" : input.sord;
+ // 先查询活动列表
+ var Data = await _db.Queryable()
+ .WhereIF(!string.IsNullOrEmpty(input.EventName), e => e.EventName.Contains(input.EventName))
+ .WhereIF(!string.IsNullOrEmpty(input.EventNumber), e => e.EventNumber.Contains(input.EventNumber))
+ .Select(e => new LqEventListOutput
+ {
+ id = e.Id,
+ eventName = e.EventName,
+ startTime = e.StartTime,
+ endTime = e.EndTime,
+ eventCoordinator = e.EventCoordinator,
+ eventNumber = e.EventNumber,
+ memberCount = SqlFunc.Subqueryable().Where(u => u.EventId == e.Id).Count(),
+ })
+ .MergeTable()
+ .OrderBy(sidx + " " + sord)
+ .ToPagedListAsync(input.page, input.rows);
+ return PageResult.SqlSugarPageResult(Data);
+ }
+ #endregion
+
+ #region 获取拓客活动详情
+
+ ///
+ /// 获取拓客活动详情
+ ///
+ ///
+ /// 根据活动ID获取拓客活动的详细信息,包括基础信息和所有参与成员列表。
+ ///
+ /// 示例请求:
+ /// GET /api/Extend/LqEvent/1234567890123456789
+ ///
+ /// 返回数据包含:
+ /// - 活动基础信息(ID、名称、编号、负责人、开始时间、结束时间)
+ /// - 成员列表(用户ID、部门ID、战队名称、创建时间、创建用户)
+ ///
+ /// 如果活动不存在,将返回404错误。
+ ///
+ /// 拓客活动ID
+ /// 拓客活动详情,包含成员信息
+ /// 成功返回拓客活动详情
+ /// 拓客活动不存在
+ /// 服务器内部错误
+ [HttpGet("{id}")]
+ public async Task GetInfo(string id)
+ {
+ // 1. 获取拓客活动基本信息
+ var entity = await _db.Queryable().FirstAsync(p => p.Id == id);
+ if (entity == null)
+ {
+ throw NCCException.Oh("拓客活动不存在");
+ }
+
+ var output = entity.Adapt();
+
+ // 2. 获取拓客活动成员信息
+ var members = await _db.Queryable().Where(u => u.EventId == id.ToString()).ToListAsync();
+
+ // 3. 转换为输出格式
+ output.Members = members.Adapt>();
+
+ return output;
+ }
+ #endregion
+
+ #region 创建拓客活动
+ ///
+ /// 创建拓客活动
+ ///
+ ///
+ /// 创建新的拓客活动,可以同时添加参与成员。
+ /// 系统会自动生成活动ID,并记录创建用户信息。
+ ///
+ /// 示例请求:
+ /// POST /api/Extend/LqEvent
+ /// Content-Type: application/json
+ ///
+ /// ```json
+ /// {
+ /// "eventName": "春节拓客活动",
+ /// "eventNumber": "TK2024001",
+ /// "eventCoordinator": "张三",
+ /// "startTime": "2024-01-15T09:00:00",
+ /// "endTime": "2024-01-20T18:00:00",
+ /// "members": [
+ /// {
+ /// "userId": "user001",
+ /// "depId": "dept001",
+ /// "teamName": "第一战队"
+ /// },
+ /// {
+ /// "userId": "user002",
+ /// "depId": "dept001",
+ /// "teamName": "第二战队"
+ /// }
+ /// ]
+ /// }
+ /// ```
+ ///
+ /// 参数验证:
+ /// - eventName: 必填,最大长度255字符
+ /// - eventNumber: 可选,最大长度255字符
+ /// - eventCoordinator: 可选,最大长度255字符
+ /// - members: 可选,成员列表
+ /// - userId: 必填
+ /// - depId: 可选
+ /// - teamName: 可选
+ ///
+ /// 创建流程:
+ /// 1. 生成新的活动ID
+ /// 2. 插入拓客活动记录
+ /// 3. 插入成员记录(如果有)
+ ///
+ /// 创建参数
+ /// 无返回值
+ /// 拓客活动创建成功
+ /// 请求参数错误或验证失败
+ /// 服务器内部错误
+ [HttpPost("")]
+ public async Task Create([FromBody] LqEventCrInput input)
+ {
+ var userInfo = await _userManager.GetUserInfo();
+ var entity = input.Adapt();
+
+ // 生成新的ID
+ entity.Id = YitIdHelper.NextId().ToString();
+
+ // 插入拓客活动
+ var isOk = await _db.Insertable(entity).ExecuteCommandAsync();
+ if (!(isOk > 0))
+ throw NCCException.Oh("创建拓客活动失败");
+
+ // 插入拓客活动成员
+ if (input.Members != null && input.Members.Count > 0)
+ {
+ var memberEntities = new List();
+ foreach (var member in input.Members)
+ {
+ memberEntities.Add(
+ new LqEventUserEntity
+ {
+ Id = YitIdHelper.NextId().ToString(),
+ EventId = entity.Id.ToString(),
+ UserId = member.UserId,
+ DepId = member.DepId,
+ TeamName = member.TeamName,
+ CreationTime = DateTime.Now,
+ CreationUser = userInfo?.userName,
+ }
+ );
+ }
+
+ await _db.Insertable(memberEntities).ExecuteCommandAsync();
+ }
+ }
+ #endregion
+
+ #region 更新拓客活动
+ ///
+ /// 更新拓客活动
+ ///
+ ///
+ /// 更新拓客活动信息,包括基础信息和成员列表。
+ /// 更新时会先删除原有成员,再添加新成员。
+ ///
+ /// 示例请求:
+ /// PUT /api/Extend/LqEvent
+ /// Content-Type: application/json
+ ///
+ /// ```json
+ /// {
+ /// "id": "1234567890123456789",
+ /// "eventName": "春节拓客活动(更新)",
+ /// "eventNumber": "TK2024001",
+ /// "eventCoordinator": "李四",
+ /// "startTime": "2024-01-15T09:00:00",
+ /// "endTime": "2024-01-25T18:00:00",
+ /// "members": [
+ /// {
+ /// "userId": "user003",
+ /// "depId": "dept002",
+ /// "teamName": "精英战队"
+ /// }
+ /// ]
+ /// }
+ /// ```
+ ///
+ /// 参数验证:
+ /// - id: 必填,拓客活动ID
+ /// - eventName: 必填,最大长度255字符
+ /// - eventNumber: 可选,最大长度255字符
+ /// - eventCoordinator: 可选,最大长度255字符
+ /// - members: 可选,成员列表(为空则清空所有成员)
+ ///
+ /// 更新流程:
+ /// 1. 更新拓客活动记录
+ /// 2. 删除原有成员记录
+ /// 3. 插入新成员记录(如果有)
+ ///
+ /// 更新参数
+ /// 无返回值
+ /// 拓客活动更新成功
+ /// 请求参数错误或验证失败
+ /// 拓客活动不存在
+ /// 服务器内部错误
+ [HttpPut("")]
+ public async Task Update([FromBody] LqEventUpInput input)
+ {
+ var userInfo = await _userManager.GetUserInfo();
+ var entity = input.Adapt();
+
+ // 更新拓客活动
+ var isOk = await _db.Updateable(entity).ExecuteCommandAsync();
+ if (!(isOk > 0))
+ throw NCCException.Oh("更新拓客活动失败");
+
+ // 删除原有成员
+ await _db.Deleteable().Where(u => u.EventId == entity.Id.ToString()).ExecuteCommandAsync();
+
+ // 插入新成员
+ if (input.Members != null && input.Members.Count > 0)
+ {
+ var memberEntities = new List();
+ foreach (var member in input.Members)
+ {
+ memberEntities.Add(
+ new LqEventUserEntity
+ {
+ Id = YitIdHelper.NextId().ToString(),
+ EventId = entity.Id.ToString(),
+ UserId = member.UserId,
+ DepId = member.DepId,
+ TeamName = member.TeamName,
+ CreationTime = DateTime.Now,
+ CreationUser = userInfo?.userName,
+ }
+ );
+ }
+
+ await _db.Insertable(memberEntities).ExecuteCommandAsync();
+ }
+ }
+ #endregion
+
+ #region 删除拓客活动
+ ///
+ /// 删除拓客活动
+ ///
+ ///
+ /// 删除指定的拓客活动,会同时删除该活动的所有成员记录。
+ /// 删除操作不可恢复,请谨慎使用。
+ ///
+ /// 示例请求:
+ /// DELETE /api/Extend/LqEvent/1234567890123456789
+ ///
+ /// 删除顺序:
+ /// 1. 先删除所有相关成员记录
+ /// 2. 再删除拓客活动记录
+ ///
+ /// 注意事项:
+ /// - 删除操作不可恢复
+ /// - 会级联删除所有相关成员记录
+ /// - 如果活动不存在,将返回404错误
+ /// - 建议在删除前先查询确认活动信息
+ ///
+ /// 拓客活动ID
+ /// 无返回值
+ /// 拓客活动删除成功
+ /// 拓客活动不存在
+ /// 服务器内部错误
+ [HttpDelete("{id}")]
+ public async Task Delete(string id)
+ {
+ // 删除拓客活动成员
+ await _db.Deleteable().Where(u => u.EventId == id.ToString()).ExecuteCommandAsync();
+
+ // 删除拓客活动
+ var isOk = await _db.Deleteable().Where(p => p.Id == id).ExecuteCommandAsync();
+
+ if (!(isOk > 0))
+ throw NCCException.Oh("删除拓客活动失败");
+ }
+ #endregion
+
+ #region 更新拓客目标数量
+ ///
+ /// 更新拓客目标数量
+ ///
+ /// 拓客活动ID
+ /// 拓客目标数量
+ ///
+ [HttpPut("{id}/target")]
+ public async Task UpdateTarget(string id, int target)
+ {
+ var isOk = await _db.Updateable().SetColumns(it => new LqEventUserEntity { EventTarget = target }).Where(x => x.EventId == id).ExecuteCommandAsync();
+ if (!(isOk > 0))
+ throw NCCException.Oh("更新拓客目标数量失败");
+ }
+ #endregion
+
+ #region 获取拓客目标数量
+ ///
+ /// 获取拓客目标数量
+ ///
+ /// 拓客活动ID
+ ///
+ [HttpGet("{id}/target")]
+ public async Task GetTarget(string id)
+ {
+ return await _db.Queryable().Where(x => x.EventId == id).Select(x => x.EventTarget).FirstAsync();
+ }
+ #endregion
+
+ #region 根据用户ID获取参与的拓客活动
+
+ ///
+ /// 根据用户ID获取参与的拓客活动
+ ///
+ ///
+ /// 根据用户ID查询该用户参与的所有拓客活动,支持时间范围筛选。
+ /// 返回结果包含活动基础信息和用户在该活动中的详细信息。
+ ///
+ /// 示例请求:
+ /// GET /api/Extend/LqEvent/user/user001?startTime=2024-01-01&endTime=2024-12-31
+ ///
+ /// 参数说明:
+ /// - userId: 用户ID(必填)
+ /// - startTime: 开始时间(可选),查询在此时间之后开始的活动
+ /// - endTime: 结束时间(可选),查询在此时间之前结束的活动
+ ///
+ /// 返回数据包含:
+ /// - 活动基础信息(ID、名称、编号、负责人、开始时间、结束时间)
+ /// - 用户参与信息(部门ID、战队名称、目标数量等)
+ ///
+ /// 用户ID
+ /// 开始时间(可选)
+ /// 结束时间(可选)
+ /// 用户参与的拓客活动列表
+ /// 成功返回用户参与的拓客活动列表
+ /// 请求参数错误
+ /// 服务器内部错误
+ [HttpGet("user/{userId}")]
+ [ProducesResponseType(typeof(List), 200)]
+ [ProducesResponseType(400)]
+ [ProducesResponseType(500)]
+ public async Task> GetUserEvents(string userId, [FromQuery] DateTime? startTime = null, [FromQuery] DateTime? endTime = null)
+ {
+ try
+ {
+ // 先测试简单的查询
+ var eventUsers = await _db.Queryable().Where(u => u.UserId == userId).ToListAsync();
+
+ if (!eventUsers.Any())
+ {
+ return new List();
+ }
+
+ var eventIds = eventUsers.Select(u => u.EventId).ToList();
+
+ // 查询活动信息
+ var events = await _db.Queryable().Where(e => eventIds.Contains(e.Id)).ToListAsync();
+
+ // 时间范围筛选
+ if (startTime.HasValue)
+ {
+ events = events.Where(e => e.StartTime >= startTime.Value).ToList();
+ }
+
+ if (endTime.HasValue)
+ {
+ events = events.Where(e => e.EndTime <= endTime.Value).ToList();
+ }
+
+ // 构建结果
+ var result = new List();
+ foreach (var eventUser in eventUsers)
+ {
+ var eventInfo = events.FirstOrDefault(e => e.Id == eventUser.EventId);
+ if (eventInfo != null)
+ {
+ result.Add(
+ new LqEventUserEventOutput
+ {
+ // 活动基础信息
+ EventId = eventInfo.Id,
+ EventName = eventInfo.EventName,
+ EventNumber = eventInfo.EventNumber,
+ EventCoordinator = eventInfo.EventCoordinator,
+ StartTime = eventInfo.StartTime,
+ EndTime = eventInfo.EndTime,
+ // 用户参与信息
+ UserId = eventUser.UserId,
+ DepId = eventUser.DepId,
+ TeamName = eventUser.TeamName,
+ EventTarget = eventUser.EventTarget,
+ CreationTime = eventUser.CreationTime,
+ CreationUser = eventUser.CreationUser,
+ }
+ );
+ }
+ }
+
+ // 按开始时间降序排列
+ return result.OrderByDescending(x => x.StartTime).ToList();
+ }
+ catch (Exception ex)
+ {
+ throw NCCException.Oh("获取用户参与的拓客活动失败", ex);
+ }
+ }
+ #endregion
+ }
+}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
index 1730d5f..07fc53d 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
@@ -64,6 +64,7 @@ namespace NCC.Extend.LqHytkHytk
_userManager = userManager;
}
+ #region 获取退卡信息列表
///
/// 获取退卡信息列表
///
@@ -73,8 +74,7 @@ namespace NCC.Extend.LqHytkHytk
public async Task GetList([FromQuery] LqHytkHytkListQueryInput input)
{
var sidx = input.sidx == null ? "id" : input.sidx;
- List queryTksj =
- input.tksj != null ? input.tksj.Split(',').ToObeject>() : null;
+ List queryTksj = input.tksj != null ? input.tksj.Split(',').ToObeject>() : null;
DateTime? startTksj = queryTksj != null ? Ext.GetDateTime(queryTksj.First()) : null;
DateTime? endTksj = queryTksj != null ? Ext.GetDateTime(queryTksj.Last()) : null;
var data = await _db.Queryable()
@@ -91,36 +91,9 @@ namespace NCC.Extend.LqHytkHytk
.WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz))
.WhereIF(!string.IsNullOrEmpty(input.tkzt), p => p.Tkzt.Contains(input.tkzt))
.WhereIF(!string.IsNullOrEmpty(input.tkyy), p => p.Tkyy.Contains(input.tkyy))
- .WhereIF(
- !string.IsNullOrEmpty(input.fileUrl),
- p => p.FileUrl.Contains(input.fileUrl)
- )
- .WhereIF(
- queryTksj != null,
- p =>
- p.Tksj
- >= new DateTime(
- startTksj.ToDate().Year,
- startTksj.ToDate().Month,
- startTksj.ToDate().Day,
- 0,
- 0,
- 0
- )
- )
- .WhereIF(
- queryTksj != null,
- p =>
- p.Tksj
- <= new DateTime(
- endTksj.ToDate().Year,
- endTksj.ToDate().Month,
- endTksj.ToDate().Day,
- 23,
- 59,
- 59
- )
- )
+ .WhereIF(!string.IsNullOrEmpty(input.fileUrl), p => p.FileUrl.Contains(input.fileUrl))
+ .WhereIF(queryTksj != null, p => p.Tksj >= new DateTime(startTksj.ToDate().Year, startTksj.ToDate().Month, startTksj.ToDate().Day, 0, 0, 0))
+ .WhereIF(queryTksj != null, p => p.Tksj <= new DateTime(endTksj.ToDate().Year, endTksj.ToDate().Month, endTksj.ToDate().Day, 23, 59, 59))
.WhereIF(!string.IsNullOrEmpty(input.czry), p => p.Czry.Equals(input.czry))
.Select(it => new LqHytkHytkListOutput
{
@@ -146,7 +119,9 @@ namespace NCC.Extend.LqHytkHytk
.ToPagedListAsync(input.currentPage, input.pageSize);
return PageResult.SqlSugarPageResult(data);
}
+ #endregion
+ #region 创建退卡信息及其关联的品项明细、健康师业绩、科技部老师业绩信息
///
/// 创建退卡信息及其关联的品项明细、健康师业绩、科技部老师业绩信息
///
@@ -233,9 +208,7 @@ namespace NCC.Extend.LqHytkHytk
_db.BeginTran();
// 新增退卡主表记录
- var newEntity = await _db.Insertable(entity)
- .IgnoreColumns(ignoreNullColumn: true)
- .ExecuteReturnEntityAsync();
+ var newEntity = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnEntityAsync();
// 收集所有需要插入的实体,然后批量插入
var allMxEntities = new List();
@@ -262,8 +235,7 @@ namespace NCC.Extend.LqHytkHytk
F_ProjectNumber = item.F_ProjectNumber ?? 1,
F_IsEnabled = item.F_IsEnabled ?? 1,
F_SourceType = item.F_SourceType,
- F_TotalPrice =
- item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
+ F_TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
};
allMxEntities.Add(lqHytkMxEntity);
@@ -289,6 +261,7 @@ namespace NCC.Extend.LqHytkHytk
F_CreateTime = DateTime.Now,
F_CreateUser = userInfo.userId,
F_DeleteMark = 0,
+ CardReturn = lqHytkMxEntity.Id,
}
);
}
@@ -315,6 +288,7 @@ namespace NCC.Extend.LqHytkHytk
F_CreateTime = DateTime.Now,
F_CreateUser = userInfo.userId,
F_DeleteMark = 0,
+ CardReturn = lqHytkMxEntity.Id,
}
);
}
@@ -349,7 +323,9 @@ namespace NCC.Extend.LqHytkHytk
throw NCCException.Oh(ErrorCode.COM1005, ex.Message);
}
}
+ #endregion
+ #region 更新退卡信息及其关联的品项明细、健康师业绩、科技部老师业绩信息
///
/// 更新退卡信息及其关联的品项明细、健康师业绩、科技部老师业绩信息
///
@@ -381,15 +357,9 @@ namespace NCC.Extend.LqHytkHytk
await _db.Updateable(entity).IgnoreColumns(true).ExecuteCommandAsync();
// 删除原有的关联数据
- await _db.Deleteable()
- .Where(x => x.Gltkbh == id)
- .ExecuteCommandAsync();
- await _db.Deleteable()
- .Where(x => x.Gltkbh == id)
- .ExecuteCommandAsync();
- await _db.Deleteable()
- .Where(x => x.Gltkbh == id)
- .ExecuteCommandAsync();
+ await _db.Deleteable().Where(x => x.Gltkbh == id).ExecuteCommandAsync();
+ await _db.Deleteable().Where(x => x.Gltkbh == id).ExecuteCommandAsync();
+ await _db.Deleteable().Where(x => x.Gltkbh == id).ExecuteCommandAsync();
// 收集所有需要插入的实体,然后批量插入
var allMxEntities = new List();
@@ -416,8 +386,7 @@ namespace NCC.Extend.LqHytkHytk
F_ProjectNumber = item.F_ProjectNumber ?? 1,
F_IsEnabled = item.F_IsEnabled ?? 1,
F_SourceType = item.F_SourceType,
- F_TotalPrice =
- item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
+ F_TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
};
allMxEntities.Add(lqHytkMxEntity);
@@ -501,7 +470,9 @@ namespace NCC.Extend.LqHytkHytk
throw NCCException.Oh(ErrorCode.COM1005, ex.Message);
}
}
+ #endregion
+ #region 删除退卡信息
///
/// 删除退卡信息
///
@@ -517,7 +488,9 @@ namespace NCC.Extend.LqHytkHytk
await _lqHytkHytkRepository.UpdateAsync(entity);
}
}
+ #endregion
+ #region 获取退卡信息详情
///
/// 获取退卡信息详情
///
@@ -551,19 +524,13 @@ namespace NCC.Extend.LqHytkHytk
var output = entity.Adapt();
// 2. 查询品项明细列表
- var lqHytkMxList = await _db.Queryable()
- .Where(w => w.Gltkbh == entity.Id)
- .ToListAsync();
+ var lqHytkMxList = await _db.Queryable().Where(w => w.Gltkbh == entity.Id).ToListAsync();
// 3. 查询健康师业绩列表
- var lqHytkJksyjList = await _db.Queryable()
- .Where(w => w.Gltkbh == entity.Id)
- .ToListAsync();
+ var lqHytkJksyjList = await _db.Queryable().Where(w => w.Gltkbh == entity.Id).ToListAsync();
// 4. 查询科技部老师业绩列表
- var lqHytkKjbsyjList = await _db.Queryable()
- .Where(w => w.Gltkbh == entity.Id)
- .ToListAsync();
+ var lqHytkKjbsyjList = await _db.Queryable().Where(w => w.Gltkbh == entity.Id).ToListAsync();
// 5. 构建品项明细输出,每个品项关联对应的业绩信息
var mxOutputList = new List();
@@ -584,11 +551,11 @@ namespace NCC.Extend.LqHytkHytk
};
// 关联该品项的健康师业绩
- var jksyjForMx = lqHytkJksyjList.Where(j => j.F_tkpxid == mx.Id).ToList();
+ var jksyjForMx = lqHytkJksyjList.Where(j => j.CardReturn == mx.Id).ToList();
mxOutput.lqHytkJksyjList = jksyjForMx.Adapt>();
// 关联该品项的科技部老师业绩
- var kjbsyjForMx = lqHytkKjbsyjList.Where(k => k.F_tkpxid == mx.Id).ToList();
+ var kjbsyjForMx = lqHytkKjbsyjList.Where(k => k.CardReturn == mx.Id).ToList();
mxOutput.lqHytkKjbsyjList = kjbsyjForMx.Adapt>();
mxOutputList.Add(mxOutput);
@@ -608,5 +575,6 @@ namespace NCC.Extend.LqHytkHytk
throw NCCException.Oh(ErrorCode.COM1000, "获取退卡记录失败");
}
}
+ #endregion
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqJlmxbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqJlmxbService.cs
index e880a16..810b668 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqJlmxbService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqJlmxbService.cs
@@ -1,34 +1,34 @@
-using NCC.Common.Core.Manager;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Mapster;
+using Microsoft.AspNetCore.Mvc;
+using NCC.ClayObject;
+using NCC.Common.Configuration;
+using NCC.Common.Core.Manager;
using NCC.Common.Enum;
using NCC.Common.Extension;
using NCC.Common.Filter;
+using NCC.Common.Helper;
+using NCC.Common.Model.NPOI;
+using NCC.DataEncryption;
using NCC.Dependency;
using NCC.DynamicApiController;
-using NCC.FriendlyException;
+using NCC.Extend.Entitys.Dto.LqJlmxb;
+using NCC.Extend.Entitys.lq_jlmxb;
using NCC.Extend.Interfaces.LqJlmxb;
-using Mapster;
-using Microsoft.AspNetCore.Mvc;
+using NCC.FriendlyException;
+using NCC.JsonSerialization;
using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using NCC.Extend.Entitys.lq_jlmxb;
-using NCC.Extend.Entitys.Dto.LqJlmxb;
using Yitter.IdGenerator;
-using NCC.Common.Helper;
-using NCC.JsonSerialization;
-using NCC.Common.Model.NPOI;
-using NCC.Common.Configuration;
-using NCC.DataEncryption;
-using NCC.ClayObject;
namespace NCC.Extend.LqJlmxb
{
///
/// 奖励统计表服务
///
- [ApiDescriptionSettings(Tag = "Extend",Name = "LqJlmxb", Order = 200)]
+ [ApiDescriptionSettings(Tag = "Extend", Name = "LqJlmxb", Order = 200)]
[Route("api/Extend/[controller]")]
public class LqJlmxbService : ILqJlmxbService, IDynamicApiController, ITransient
{
@@ -39,11 +39,9 @@ namespace NCC.Extend.LqJlmxb
///
/// 初始化一个类型的新实例
///
- public LqJlmxbService(
- ISqlSugarRepository lqJlmxbRepository,
- IUserManager userManager)
+ public LqJlmxbService(ISqlSugarRepository lqJlmxbRepository, IUserManager userManager)
{
- _lqJlmxbRepository = lqJlmxbRepository;
+ _lqJlmxbRepository = lqJlmxbRepository;
_db = _lqJlmxbRepository.Context;
_userManager = userManager;
}
@@ -62,10 +60,10 @@ namespace NCC.Extend.LqJlmxb
}
///
- /// 获取奖励统计表列表
- ///
- /// 请求参数
- ///
+ /// 获取奖励统计表列表
+ ///
+ /// 请求参数
+ ///
[HttpGet("")]
public async Task GetList([FromQuery] LqJlmxbListQueryInput input)
{
@@ -87,26 +85,29 @@ namespace NCC.Extend.LqJlmxb
.WhereIF(!string.IsNullOrEmpty(input.hj), p => p.Hj.Contains(input.hj))
.WhereIF(!string.IsNullOrEmpty(input.kcmx), p => p.Kcmx.Contains(input.kcmx))
.WhereIF(!string.IsNullOrEmpty(input.bhjb), p => p.Bhjb.Contains(input.bhjb))
- .Select(it=> new LqJlmxbListOutput
+ .Select(it => new LqJlmxbListOutput
{
id = it.Id,
- mdbh=it.Mdbh,
- mdmc=it.Mdmc,
- gw=it.Gw,
- jks=it.Jks,
- ymmsk=it.Ymmsk,
- kjbmsk=it.Kjbmsk,
- cjj=it.Cjj,
- pk=it.Pk,
- ty=it.Ty,
- db=it.Db,
- cs=it.Cs,
- jb=it.Jb,
- hj=it.Hj,
- kcmx=it.Kcmx,
- bhjb=it.Bhjb,
- }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
- return PageResult.SqlSugarPageResult(data);
+ mdbh = it.Mdbh,
+ mdmc = it.Mdmc,
+ gw = it.Gw,
+ jks = it.Jks,
+ ymmsk = it.Ymmsk,
+ kjbmsk = it.Kjbmsk,
+ cjj = it.Cjj,
+ pk = it.Pk,
+ ty = it.Ty,
+ db = it.Db,
+ cs = it.Cs,
+ jb = it.Jb,
+ hj = it.Hj,
+ kcmx = it.Kcmx,
+ bhjb = it.Bhjb,
+ })
+ .MergeTable()
+ .OrderBy(sidx + " " + input.sort)
+ .ToPagedListAsync(input.currentPage, input.pageSize);
+ return PageResult.SqlSugarPageResult(data);
}
///
@@ -121,14 +122,15 @@ namespace NCC.Extend.LqJlmxb
var entity = input.Adapt();
entity.Id = YitIdHelper.NextId().ToString();
var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
- if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000);
+ if (!(isOk > 0))
+ throw NCCException.Oh(ErrorCode.COM1000);
}
///
- /// 获取奖励统计表无分页列表
- ///
- /// 请求参数
- ///
+ /// 获取奖励统计表无分页列表
+ ///
+ /// 请求参数
+ ///
[NonAction]
public async Task GetNoPagingList([FromQuery] LqJlmxbListQueryInput input)
{
@@ -150,33 +152,36 @@ namespace NCC.Extend.LqJlmxb
.WhereIF(!string.IsNullOrEmpty(input.hj), p => p.Hj.Contains(input.hj))
.WhereIF(!string.IsNullOrEmpty(input.kcmx), p => p.Kcmx.Contains(input.kcmx))
.WhereIF(!string.IsNullOrEmpty(input.bhjb), p => p.Bhjb.Contains(input.bhjb))
- .Select(it=> new LqJlmxbListOutput
+ .Select(it => new LqJlmxbListOutput
{
id = it.Id,
- mdbh=it.Mdbh,
- mdmc=it.Mdmc,
- gw=it.Gw,
- jks=it.Jks,
- ymmsk=it.Ymmsk,
- kjbmsk=it.Kjbmsk,
- cjj=it.Cjj,
- pk=it.Pk,
- ty=it.Ty,
- db=it.Db,
- cs=it.Cs,
- jb=it.Jb,
+ mdbh = it.Mdbh,
+ mdmc = it.Mdmc,
+ gw = it.Gw,
+ jks = it.Jks,
+ ymmsk = it.Ymmsk,
+ kjbmsk = it.Kjbmsk,
+ cjj = it.Cjj,
+ pk = it.Pk,
+ ty = it.Ty,
+ db = it.Db,
+ cs = it.Cs,
+ jb = it.Jb,
hj = it.Hj,
- kcmx=it.Kcmx,
- bhjb=it.Bhjb,
- }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
- return data;
+ kcmx = it.Kcmx,
+ bhjb = it.Bhjb,
+ })
+ .MergeTable()
+ .OrderBy(sidx + " " + input.sort)
+ .ToListAsync();
+ return data;
}
///
- /// 导出奖励统计表
- ///
- /// 请求参数
- ///
+ /// 导出奖励统计表
+ ///
+ /// 请求参数
+ ///
[HttpGet("Actions/Export")]
public async Task Export([FromQuery] LqJlmxbListQueryInput input)
{
@@ -191,7 +196,8 @@ namespace NCC.Extend.LqJlmxb
{
exportData = await this.GetNoPagingList(input);
}
- List paramList = "[{\"value\":\"奖励编号\",\"field\":\"id\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"岗位\",\"field\":\"gw\"},{\"value\":\"健康师\",\"field\":\"jks\"},{\"value\":\"医美秒杀卡\",\"field\":\"ymmsk\"},{\"value\":\"科技部秒杀卡\",\"field\":\"kjbmsk\"},{\"value\":\"成交奖\",\"field\":\"cjj\"},{\"value\":\"PK\",\"field\":\"pk\"},{\"value\":\"体验\",\"field\":\"ty\"},{\"value\":\"打版\",\"field\":\"db\"},{\"value\":\"沉睡\",\"field\":\"cs\"},{\"value\":\"嘉宾\",\"field\":\"jb\"},{\"value\":\"合计\",\"field\":\"hj\"},{\"value\":\"扣除明细\",\"field\":\"kcmx\"},{\"value\":\"不含嘉宾\",\"field\":\"bhjb\"},]".ToList();
+ List paramList =
+ "[{\"value\":\"奖励编号\",\"field\":\"id\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"岗位\",\"field\":\"gw\"},{\"value\":\"健康师\",\"field\":\"jks\"},{\"value\":\"医美秒杀卡\",\"field\":\"ymmsk\"},{\"value\":\"科技部秒杀卡\",\"field\":\"kjbmsk\"},{\"value\":\"成交奖\",\"field\":\"cjj\"},{\"value\":\"PK\",\"field\":\"pk\"},{\"value\":\"体验\",\"field\":\"ty\"},{\"value\":\"打版\",\"field\":\"db\"},{\"value\":\"沉睡\",\"field\":\"cs\"},{\"value\":\"嘉宾\",\"field\":\"jb\"},{\"value\":\"合计\",\"field\":\"hj\"},{\"value\":\"扣除明细\",\"field\":\"kcmx\"},{\"value\":\"不含嘉宾\",\"field\":\"bhjb\"},]".ToList();
ExcelConfig excelconfig = new ExcelConfig();
excelconfig.FileName = "奖励统计表.xls";
excelconfig.HeadFont = "微软雅黑";
@@ -210,11 +216,7 @@ namespace NCC.Extend.LqJlmxb
var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
ExcelExportHelper.Export(exportData, excelconfig, addPath);
var fileName = _userManager.UserId + "|" + addPath + "|xls";
- var output = new
- {
- name = excelconfig.FileName,
- url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")
- };
+ var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
return output;
}
@@ -234,7 +236,7 @@ namespace NCC.Extend.LqJlmxb
//开启事务
_db.BeginTran();
//批量删除奖励统计表
- await _db.Deleteable().In(d => d.Id,ids).ExecuteCommandAsync();
+ await _db.Deleteable().In(d => d.Id, ids).ExecuteCommandAsync();
//关闭事务
_db.CommitTran();
}
@@ -258,7 +260,8 @@ namespace NCC.Extend.LqJlmxb
{
var entity = input.Adapt();
var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
- if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
+ if (!(isOk > 0))
+ throw NCCException.Oh(ErrorCode.COM1001);
}
///
@@ -271,7 +274,8 @@ namespace NCC.Extend.LqJlmxb
var entity = await _db.Queryable().FirstAsync(p => p.Id == id);
_ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
var isOk = await _db.Deleteable().Where(d => d.Id == id).ExecuteCommandAsync();
- if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002);
+ if (!(isOk > 0))
+ throw NCCException.Oh(ErrorCode.COM1002);
}
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
index c3e3c90..32f64c7 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
@@ -1,36 +1,36 @@
-using NCC.Common.Core.Manager;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Mapster;
+using Microsoft.AspNetCore.Mvc;
+using NCC.ClayObject;
+using NCC.Common.Configuration;
+using NCC.Common.Core.Manager;
using NCC.Common.Enum;
using NCC.Common.Extension;
using NCC.Common.Filter;
+using NCC.Common.Helper;
+using NCC.Common.Model.NPOI;
+using NCC.DataEncryption;
using NCC.Dependency;
using NCC.DynamicApiController;
-using NCC.FriendlyException;
-using NCC.Extend.Interfaces.LqTkjlb;
-using Mapster;
-using Microsoft.AspNetCore.Mvc;
-using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using NCC.Extend.Entitys.lq_tkjlb;
-using NCC.Extend.Entitys.lq_ryzl;
using NCC.Extend.Entitys.Dto.LqTkjlb;
-using Yitter.IdGenerator;
-using NCC.Common.Helper;
+using NCC.Extend.Entitys.lq_ryzl;
+using NCC.Extend.Entitys.lq_tkjlb;
+using NCC.Extend.Interfaces.LqTkjlb;
+using NCC.FriendlyException;
using NCC.JsonSerialization;
-using NCC.Common.Model.NPOI;
-using NCC.Common.Configuration;
-using NCC.DataEncryption;
-using NCC.ClayObject;
using NCC.System.Entitys.Permission;
+using SqlSugar;
+using Yitter.IdGenerator;
namespace NCC.Extend.LqTkjlb
{
///
/// 拓客管理服务
///
- [ApiDescriptionSettings(Tag = "Extend",Name = "LqTkjlb", Order = 200)]
+ [ApiDescriptionSettings(Tag = "Extend", Name = "LqTkjlb", Order = 200)]
[Route("api/Extend/[controller]")]
public class LqTkjlbService : ILqTkjlbService, IDynamicApiController, ITransient
{
@@ -41,15 +41,14 @@ namespace NCC.Extend.LqTkjlb
///
/// 初始化一个类型的新实例
///
- public LqTkjlbService(
- ISqlSugarRepository lqTkjlbRepository,
- IUserManager userManager)
+ public LqTkjlbService(ISqlSugarRepository lqTkjlbRepository, IUserManager userManager)
{
- _lqTkjlbRepository = lqTkjlbRepository;
+ _lqTkjlbRepository = lqTkjlbRepository;
_db = _lqTkjlbRepository.Context;
_userManager = userManager;
}
+ #region 获取拓客管理
///
/// 获取拓客管理
///
@@ -62,12 +61,14 @@ namespace NCC.Extend.LqTkjlb
var output = entity.Adapt();
return output;
}
+ #endregion
+ #region 获取拓客管理列表
///
- /// 获取拓客管理列表
- ///
- /// 请求参数
- ///
+ /// 获取拓客管理列表
+ ///
+ /// 请求参数
+ ///
[HttpGet("")]
public async Task GetList([FromQuery] LqTkjlbListQueryInput input)
{
@@ -88,25 +89,29 @@ namespace NCC.Extend.LqTkjlb
.WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz))
.WhereIF(!string.IsNullOrEmpty(input.ssmd), p => p.Ssmd.Contains(input.ssmd))
.WhereIF(!string.IsNullOrEmpty(input.sszd), p => p.Sszd.Contains(input.sszd))
- .Select(it=> new LqTkjlbListOutput
+ .Select(it => new LqTkjlbListOutput
{
id = it.Id,
- tksj=it.Tksj,
- // tkry=it.Tkry,
+ tksj = it.Tksj,
+ // tkry=it.Tkry,
tkry = SqlFunc.Subqueryable().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName),
- gkxm=it.Gkxm,
- dhhm=it.Dhhm,
- gmzs=it.Gmzs,
- zffs=it.Zffs,
- sfjwx=it.Sfjwx,
- bz=it.Bz,
- ssmd=it.Ssmd,
- sszd=it.Sszd,
- }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
- return PageResult.SqlSugarPageResult(data);
+ gkxm = it.Gkxm,
+ dhhm = it.Dhhm,
+ gmzs = it.Gmzs,
+ zffs = it.Zffs,
+ sfjwx = it.Sfjwx,
+ bz = it.Bz,
+ ssmd = it.Ssmd,
+ sszd = it.Sszd,
+ })
+ .MergeTable()
+ .OrderBy(sidx + " " + input.sort)
+ .ToPagedListAsync(input.currentPage, input.pageSize);
+ return PageResult.SqlSugarPageResult(data);
}
-
+ #endregion
+ #region 新建拓客管理
///
/// 新建拓客管理
///
@@ -127,14 +132,16 @@ namespace NCC.Extend.LqTkjlb
}
var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
- if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000);
+ if (!(isOk > 0))
+ throw NCCException.Oh(ErrorCode.COM1000);
}
-
+ #endregion
+ #region 获取拓客管理无分页列表
///
- /// 获取拓客管理无分页列表
- ///
- /// 请求参数
- ///
+ /// 获取拓客管理无分页列表
+ ///
+ /// 请求参数
+ ///
[NonAction]
public async Task GetNoPagingList([FromQuery] LqTkjlbListQueryInput input)
{
@@ -155,28 +162,32 @@ namespace NCC.Extend.LqTkjlb
.WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz))
.WhereIF(!string.IsNullOrEmpty(input.ssmd), p => p.Ssmd.Contains(input.ssmd))
.WhereIF(!string.IsNullOrEmpty(input.sszd), p => p.Sszd.Contains(input.sszd))
- .Select(it=> new LqTkjlbListOutput
+ .Select(it => new LqTkjlbListOutput
{
id = it.Id,
- tksj=it.Tksj,
- tkry=it.Tkry,
- gkxm=it.Gkxm,
- dhhm=it.Dhhm,
- gmzs=it.Gmzs,
- zffs=it.Zffs,
- sfjwx=it.Sfjwx,
- bz=it.Bz,
- ssmd=it.Ssmd,
- sszd=it.Sszd,
- }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
- return data;
+ tksj = it.Tksj,
+ tkry = it.Tkry,
+ gkxm = it.Gkxm,
+ dhhm = it.Dhhm,
+ gmzs = it.Gmzs,
+ zffs = it.Zffs,
+ sfjwx = it.Sfjwx,
+ bz = it.Bz,
+ ssmd = it.Ssmd,
+ sszd = it.Sszd,
+ })
+ .MergeTable()
+ .OrderBy(sidx + " " + input.sort)
+ .ToListAsync();
+ return data;
}
-
+ #endregion
+ #region 导出拓客管理
///
- /// 导出拓客管理
- ///
- /// 请求参数
- ///
+ /// 导出拓客管理
+ ///
+ /// 请求参数
+ ///
[HttpGet("Actions/Export")]
public async Task Export([FromQuery] LqTkjlbListQueryInput input)
{
@@ -191,7 +202,8 @@ namespace NCC.Extend.LqTkjlb
{
exportData = await this.GetNoPagingList(input);
}
- List paramList = "[{\"value\":\"拓客编号\",\"field\":\"id\"},{\"value\":\"拓客人员\",\"field\":\"tkry\"},{\"value\":\"拓客时间\",\"field\":\"tksj\"},{\"value\":\"顾客姓名\",\"field\":\"gkxm\"},{\"value\":\"电话号码\",\"field\":\"dhhm\"},{\"value\":\"购买张数\",\"field\":\"gmzs\"},{\"value\":\"支付方式\",\"field\":\"zffs\"},{\"value\":\"是否加微信\",\"field\":\"sfjwx\"},{\"value\":\"备注\",\"field\":\"bz\"},{\"value\":\"所属门店\",\"field\":\"ssmd\"},{\"value\":\"所属战队\",\"field\":\"sszd\"},]".ToList();
+ List paramList =
+ "[{\"value\":\"拓客编号\",\"field\":\"id\"},{\"value\":\"拓客人员\",\"field\":\"tkry\"},{\"value\":\"拓客时间\",\"field\":\"tksj\"},{\"value\":\"顾客姓名\",\"field\":\"gkxm\"},{\"value\":\"电话号码\",\"field\":\"dhhm\"},{\"value\":\"购买张数\",\"field\":\"gmzs\"},{\"value\":\"支付方式\",\"field\":\"zffs\"},{\"value\":\"是否加微信\",\"field\":\"sfjwx\"},{\"value\":\"备注\",\"field\":\"bz\"},{\"value\":\"所属门店\",\"field\":\"ssmd\"},{\"value\":\"所属战队\",\"field\":\"sszd\"},]".ToList();
ExcelConfig excelconfig = new ExcelConfig();
excelconfig.FileName = "拓客管理.xls";
excelconfig.HeadFont = "微软雅黑";
@@ -210,13 +222,11 @@ namespace NCC.Extend.LqTkjlb
var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
ExcelExportHelper.Export(exportData, excelconfig, addPath);
var fileName = _userManager.UserId + "|" + addPath + "|xls";
- var output = new
- {
- name = excelconfig.FileName,
- url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")
- };
+ var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
return output;
}
+ #endregion
+ #region 批量删除拓客管理
///
/// 批量删除拓客管理
@@ -234,7 +244,7 @@ namespace NCC.Extend.LqTkjlb
//开启事务
_db.BeginTran();
//批量删除拓客管理
- await _db.Deleteable().In(d => d.Id,ids).ExecuteCommandAsync();
+ await _db.Deleteable().In(d => d.Id, ids).ExecuteCommandAsync();
//关闭事务
_db.CommitTran();
}
@@ -246,7 +256,8 @@ namespace NCC.Extend.LqTkjlb
}
}
}
-
+ #endregion
+ #region 更新拓客管理
///
/// 更新拓客管理
///
@@ -258,9 +269,11 @@ namespace NCC.Extend.LqTkjlb
{
var entity = input.Adapt();
var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
- if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
+ if (!(isOk > 0))
+ throw NCCException.Oh(ErrorCode.COM1001);
}
-
+ #endregion
+ #region 删除拓客管理
///
/// 删除拓客管理
///
@@ -271,9 +284,11 @@ namespace NCC.Extend.LqTkjlb
var entity = await _db.Queryable().FirstAsync(p => p.Id == id);
_ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
var isOk = await _db.Deleteable().Where(d => d.Id == id).ExecuteCommandAsync();
- if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002);
+ if (!(isOk > 0))
+ throw NCCException.Oh(ErrorCode.COM1002);
}
-
+ #endregion
+ #region 获取拓客排行榜
///
/// 获取拓客排行榜
///
@@ -281,14 +296,7 @@ namespace NCC.Extend.LqTkjlb
[HttpGet("Actions/GetRanking")]
public async Task GetRanking()
{
- var data = await _db.Queryable()
- .GroupBy(it => it.Sszd)
- .Select(it => new LqTkjlbRankingOutput
- {
- sszd = it.Sszd,
- tkrs = SqlFunc.AggregateCount(it.Id)
- })
- .ToListAsync();
+ var data = await _db.Queryable().GroupBy(it => it.Sszd).Select(it => new LqTkjlbRankingOutput { sszd = it.Sszd, tkrs = SqlFunc.AggregateCount(it.Id) }).ToListAsync();
// 在内存中排序并添加排名
var sortedData = data.OrderByDescending(it => it.tkrs).ToList();
@@ -299,7 +307,8 @@ namespace NCC.Extend.LqTkjlb
return sortedData;
}
-
+ #endregion
+ #region 获取战队人员详细报表
///
/// 获取战队人员详细报表
///
@@ -310,10 +319,7 @@ namespace NCC.Extend.LqTkjlb
var result = new List();
// 获取所有战队
- var teams = await _db.Queryable()
- .GroupBy(it => it.Sszd)
- .Select(it => it.Sszd)
- .ToListAsync();
+ var teams = await _db.Queryable().GroupBy(it => it.Sszd).Select(it => it.Sszd).ToListAsync();
foreach (var team in teams)
{
@@ -323,15 +329,15 @@ namespace NCC.Extend.LqTkjlb
.GroupBy(it => it.Tkry)
.Select(it => new
{
- // tkry = it.Tkry,
- tkry = SqlFunc.Subqueryable().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName),
- tkrs = SqlFunc.AggregateCount(it.Id)
+ // tkry = it.Tkry,
+ tkry = SqlFunc.Subqueryable().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName),
+ tkrs = SqlFunc.AggregateCount(it.Id),
})
.ToListAsync();
// 按拓客数量排序
var sortedMembers = teamMembers.OrderByDescending(m => m.tkrs).ToList();
-
+
// 计算战队总拓客数量
var totalCount = sortedMembers.Sum(m => m.tkrs);
@@ -340,7 +346,7 @@ namespace NCC.Extend.LqTkjlb
{
sszd = team,
totalCount = totalCount,
- members = new List()
+ members = new List(),
};
// 添加成员详情
@@ -348,14 +354,16 @@ namespace NCC.Extend.LqTkjlb
{
var member = sortedMembers[i];
var percentage = totalCount > 0 ? (int)Math.Round((double)member.tkrs / totalCount * 100) : 0;
-
- teamDetail.members.Add(new TeamMemberDetail
- {
- tkry = member.tkry,
- tkrs = member.tkrs,
- teamRanking = i + 1,
- percentage = percentage
- });
+
+ teamDetail.members.Add(
+ new TeamMemberDetail
+ {
+ tkry = member.tkry,
+ tkrs = member.tkrs,
+ teamRanking = i + 1,
+ percentage = percentage,
+ }
+ );
}
result.Add(teamDetail);
@@ -364,5 +372,6 @@ namespace NCC.Extend.LqTkjlb
// 按战队总拓客数量排序
return result.OrderByDescending(t => t.totalCount).ToList();
}
+ #endregion
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqYxhdfaService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqYxhdfaService.cs
index 80f60a2..340b36b 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqYxhdfaService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqYxhdfaService.cs
@@ -1,34 +1,34 @@
-using NCC.Common.Core.Manager;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Mapster;
+using Microsoft.AspNetCore.Mvc;
+using NCC.ClayObject;
+using NCC.Common.Configuration;
+using NCC.Common.Core.Manager;
using NCC.Common.Enum;
using NCC.Common.Extension;
using NCC.Common.Filter;
+using NCC.Common.Helper;
+using NCC.Common.Model.NPOI;
+using NCC.DataEncryption;
using NCC.Dependency;
using NCC.DynamicApiController;
-using NCC.FriendlyException;
+using NCC.Extend.Entitys.Dto.LqYxhdfa;
+using NCC.Extend.Entitys.lq_yxhdfa;
using NCC.Extend.Interfaces.LqYxhdfa;
-using Mapster;
-using Microsoft.AspNetCore.Mvc;
+using NCC.FriendlyException;
+using NCC.JsonSerialization;
using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using NCC.Extend.Entitys.lq_yxhdfa;
-using NCC.Extend.Entitys.Dto.LqYxhdfa;
using Yitter.IdGenerator;
-using NCC.Common.Helper;
-using NCC.JsonSerialization;
-using NCC.Common.Model.NPOI;
-using NCC.Common.Configuration;
-using NCC.DataEncryption;
-using NCC.ClayObject;
namespace NCC.Extend.LqYxhdfa
{
///
/// 营销活动方案服务
///
- [ApiDescriptionSettings(Tag = "Extend",Name = "LqYxhdfa", Order = 200)]
+ [ApiDescriptionSettings(Tag = "Extend", Name = "LqYxhdfa", Order = 200)]
[Route("api/Extend/[controller]")]
public class LqYxhdfaService : ILqYxhdfaService, IDynamicApiController, ITransient
{
@@ -39,11 +39,9 @@ namespace NCC.Extend.LqYxhdfa
///
/// 初始化一个类型的新实例
///
- public LqYxhdfaService(
- ISqlSugarRepository lqYxhdfaRepository,
- IUserManager userManager)
+ public LqYxhdfaService(ISqlSugarRepository lqYxhdfaRepository, IUserManager userManager)
{
- _lqYxhdfaRepository = lqYxhdfaRepository;
+ _lqYxhdfaRepository = lqYxhdfaRepository;
_db = _lqYxhdfaRepository.Context;
_userManager = userManager;
}
@@ -62,10 +60,10 @@ namespace NCC.Extend.LqYxhdfa
}
///
- /// 获取营销活动方案列表
- ///
- /// 请求参数
- ///
+ /// 获取营销活动方案列表
+ ///
+ /// 请求参数
+ ///
[HttpGet("")]
public async Task GetList([FromQuery] LqYxhdfaListQueryInput input)
{
@@ -76,15 +74,18 @@ namespace NCC.Extend.LqYxhdfa
.WhereIF(!string.IsNullOrEmpty(input.hdmc), p => p.Hdmc.Contains(input.hdmc))
.WhereIF(!string.IsNullOrEmpty(input.zsj), p => p.Zsj.Contains(input.zsj))
.WhereIF(!string.IsNullOrEmpty(input.jej), p => p.Jej.Contains(input.jej))
- .Select(it=> new LqYxhdfaListOutput
+ .Select(it => new LqYxhdfaListOutput
{
id = it.Id,
- yxhdbh=it.Yxhdbh,
- hdmc=it.Hdmc,
- zsj=it.Zsj,
- jej=it.Jej,
- }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
- return PageResult.SqlSugarPageResult(data);
+ yxhdbh = it.Yxhdbh,
+ hdmc = it.Hdmc,
+ zsj = it.Zsj,
+ jej = it.Jej,
+ })
+ .MergeTable()
+ .OrderBy(sidx + " " + input.sort)
+ .ToPagedListAsync(input.currentPage, input.pageSize);
+ return PageResult.SqlSugarPageResult(data);
}
///
@@ -99,14 +100,15 @@ namespace NCC.Extend.LqYxhdfa
var entity = input.Adapt();
entity.Id = YitIdHelper.NextId().ToString();
var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
- if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000);
+ if (!(isOk > 0))
+ throw NCCException.Oh(ErrorCode.COM1000);
}
///
- /// 获取营销活动方案无分页列表
- ///
- /// 请求参数
- ///
+ /// 获取营销活动方案无分页列表
+ ///
+ /// 请求参数
+ ///
[NonAction]
public async Task GetNoPagingList([FromQuery] LqYxhdfaListQueryInput input)
{
@@ -117,22 +119,25 @@ namespace NCC.Extend.LqYxhdfa
.WhereIF(!string.IsNullOrEmpty(input.hdmc), p => p.Hdmc.Contains(input.hdmc))
.WhereIF(!string.IsNullOrEmpty(input.zsj), p => p.Zsj.Contains(input.zsj))
.WhereIF(!string.IsNullOrEmpty(input.jej), p => p.Jej.Contains(input.jej))
- .Select(it=> new LqYxhdfaListOutput
+ .Select(it => new LqYxhdfaListOutput
{
id = it.Id,
- yxhdbh=it.Yxhdbh,
- hdmc=it.Hdmc,
- zsj=it.Zsj,
- jej=it.Jej,
- }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
- return data;
+ yxhdbh = it.Yxhdbh,
+ hdmc = it.Hdmc,
+ zsj = it.Zsj,
+ jej = it.Jej,
+ })
+ .MergeTable()
+ .OrderBy(sidx + " " + input.sort)
+ .ToListAsync();
+ return data;
}
///
- /// 导出营销活动方案
- ///
- /// 请求参数
- ///
+ /// 导出营销活动方案
+ ///
+ /// 请求参数
+ ///
[HttpGet("Actions/Export")]
public async Task Export([FromQuery] LqYxhdfaListQueryInput input)
{
@@ -147,7 +152,8 @@ namespace NCC.Extend.LqYxhdfa
{
exportData = await this.GetNoPagingList(input);
}
- List paramList = "[{\"value\":\"方案编号\",\"field\":\"id\"},{\"value\":\"营销活动编号\",\"field\":\"yxhdbh\"},{\"value\":\"活动名称\",\"field\":\"hdmc\"},{\"value\":\"张数奖\",\"field\":\"zsj\"},{\"value\":\"金额奖\",\"field\":\"jej\"},]".ToList();
+ List paramList =
+ "[{\"value\":\"方案编号\",\"field\":\"id\"},{\"value\":\"营销活动编号\",\"field\":\"yxhdbh\"},{\"value\":\"活动名称\",\"field\":\"hdmc\"},{\"value\":\"张数奖\",\"field\":\"zsj\"},{\"value\":\"金额奖\",\"field\":\"jej\"},]".ToList();
ExcelConfig excelconfig = new ExcelConfig();
excelconfig.FileName = "营销活动方案.xls";
excelconfig.HeadFont = "微软雅黑";
@@ -166,11 +172,7 @@ namespace NCC.Extend.LqYxhdfa
var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
ExcelExportHelper.Export(exportData, excelconfig, addPath);
var fileName = _userManager.UserId + "|" + addPath + "|xls";
- var output = new
- {
- name = excelconfig.FileName,
- url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")
- };
+ var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
return output;
}
@@ -190,7 +192,7 @@ namespace NCC.Extend.LqYxhdfa
//开启事务
_db.BeginTran();
//批量删除营销活动方案
- await _db.Deleteable().In(d => d.Id,ids).ExecuteCommandAsync();
+ await _db.Deleteable().In(d => d.Id, ids).ExecuteCommandAsync();
//关闭事务
_db.CommitTran();
}
@@ -214,7 +216,8 @@ namespace NCC.Extend.LqYxhdfa
{
var entity = input.Adapt();
var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
- if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
+ if (!(isOk > 0))
+ throw NCCException.Oh(ErrorCode.COM1001);
}
///
@@ -227,7 +230,8 @@ namespace NCC.Extend.LqYxhdfa
var entity = await _db.Queryable().FirstAsync(p => p.Id == id);
_ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
var isOk = await _db.Deleteable().Where(d => d.Id == id).ExecuteCommandAsync();
- if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002);
+ if (!(isOk > 0))
+ throw NCCException.Oh(ErrorCode.COM1002);
}
}
}
diff --git a/项目信息-薪酬规则与名词解释.md b/项目信息-薪酬规则与名词解释.md
index 63ce419..8c2a33c 100644
--- a/项目信息-薪酬规则与名词解释.md
+++ b/项目信息-薪酬规则与名词解释.md
@@ -50,14 +50,17 @@
### 门店相关
17. **门店分类**:门店分为A、B、C类,不同类别有不同的底薪
-18. **新店**:在门店信息中设置时间段,在该时间段内按新店薪酬规则计算
-19. **老店**:不在新店时间段内,按老店薪酬规则计算
-20. **门店生命线**:每个门店的生命线不一样,对所有角色生效
-21. **金三角(战队)**:每月初由不同健康师组成战队,单人也可形成战队
+18. **门店类别**:门店分为200平或旗舰店两种类型(仅在新店时设置)
+ - **200平门店**:标准门店类型,按正常薪酬规则计算
+ - **旗舰店**:特殊门店类型,需要扣除负奖励800元
+19. **新店**:在门店信息中设置时间段,在该时间段内按新店薪酬规则计算
+20. **老店**:不在新店时间段内,按老店薪酬规则计算
+21. **门店生命线**:每个门店的生命线不一样,对所有角色生效
+22. **金三角(战队)**:每月初由不同健康师组成战队,单人也可形成战队
### 其他
-22. **毛利**:销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾
-23. **总经理保底**:总经理工资在一年里可以有一个月保底8000元,保底寒假月份(春节)不能使用
+23. **毛利**:销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾
+24. **总经理保底**:总经理工资在一年里可以有一个月保底8000元,保底寒假月份(春节)不能使用
---
@@ -70,13 +73,32 @@
### 健康师薪酬规则
-#### 底薪规则
+#### 老店健康师底薪规则
- **一星**:月消耗达到10000元 且 项目数达到96个 → 底薪2000元
- **二星**:月消耗达到20000元 且 项目数达到126个 → 底薪2200元
- **三星**:月消耗达到40000元 且 项目数达到156个 → 底薪2400元
- **0星**:月消耗未达到10000元 且 项目数未达到96个 → 底薪1800元
- **特殊情况**:月消耗或项目数中有一个为0星(未达到最低标准),底薪为一星(2000元)
+#### 新店健康师薪酬规则
+**重要说明**:新店不考核消耗,健康师分成3个阶段:
+
+**第一阶段:新客转化阶段**
+- 主要考核新客转化率
+- 提成主要来源于新客转化业绩
+
+**第二阶段:升单人头阶段**
+- 主要考核升单人头数
+- 提成主要来源于升单业绩
+
+**第三阶段:业绩和项目数阶段**
+- 无新客转化和升单人头提成
+- 业绩主要计算提成
+- 项目数主要计算底薪
+
+**旗舰店特殊规则**:
+- 旗舰店类型门店需要扣除负奖励800元
+
### 金三角(战队)提成规则
#### 3人战队
@@ -159,6 +181,8 @@
#### 新店店长(底薪4000元)
+**重要说明**:新店店长涉及全部阶段,都有负奖励机制
+
**考核指标**:
- 生命线-业绩、人头-固定
- 一个指标未达到:扣800元
@@ -170,6 +194,9 @@
**提成计算**:毛利 × 业绩提成比例
+**旗舰店特殊规则**:
+- 旗舰店类型门店需要扣除负奖励800元
+
### 主任薪酬规则
#### 老店主任(底薪3500元)