diff --git a/netcore/src/Application/NCC.API/appsettings.json b/netcore/src/Application/NCC.API/appsettings.json
index a074cfe..693026a 100644
--- a/netcore/src/Application/NCC.API/appsettings.json
+++ b/netcore/src/Application/NCC.API/appsettings.json
@@ -181,6 +181,11 @@
"scope": "snsapi_userinfo"
}
},
+ "WeChatBot": {
+ "BotApiUrl": "http://wx.lvqianmeiye.com/api/Bot/send-text",
+ "WebhookUrl": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=496f1add-122b-43fc-9e38-0ca79c48b33f",
+ "WebhookUrlTest": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=6f8686ec-5011-4c1d-bae9-d82a2a2f4d83"
+ },
"NCC_App": {
"CodeAreasName": "SubDev,Food,Extend,test",
//系统文件路径(末尾必须带斜杆)
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkListOutput.cs
index 4aeee69..27eadbf 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkListOutput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkListOutput.cs
@@ -1,4 +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;
namespace NCC.Extend.Entitys.Dto.LqHytkHytk
{
@@ -102,5 +106,19 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
///
public string cancelRemark { 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/LqHytkHytk/LqHytkHytkListQueryInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkListQueryInput.cs
index 1369ba5..e3f808e 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkListQueryInput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkListQueryInput.cs
@@ -93,5 +93,14 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
///
public int isEffective { get; set; } = 0;
+ ///
+ /// 健康师ID(可选,传入后只返回该健康师参与的退卡记录)
+ ///
+ public string jksId { get; set; }
+
+ ///
+ /// 科技部老师ID(可选,传入后只返回该老师参与的退卡记录)
+ ///
+ public string kjblsId { get; set; }
}
}
\ No newline at end of file
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqStatistics/TechTeacherSimpleStatisticsOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqStatistics/TechTeacherSimpleStatisticsOutput.cs
index e8ac726..ca4beb5 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqStatistics/TechTeacherSimpleStatisticsOutput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqStatistics/TechTeacherSimpleStatisticsOutput.cs
@@ -41,5 +41,10 @@ namespace NCC.Extend.Entitys.Dto.LqStatistics
/// 耗卡品项次数
///
public int ConsumeItemCount { get; set; }
+
+ ///
+ /// 消耗手工费(耗卡手工费)
+ ///
+ public decimal ConsumeLaborCost { get; set; }
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs
index 2ab5392..4e63238 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs
@@ -25,6 +25,7 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk
public string MemberName { get; set; }
///
+ ///
/// 剩余品项列表
///
/// 按剩余数量降序排列的品项列表
@@ -71,6 +72,12 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk
public string SourceType { get; set; }
///
+ /// 备注
+ ///
+ /// 备注
+ public string Remark { get; set; }
+
+ ///
/// 总购买数量
///
/// 该品项的总购买次数
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
index ce5fd82..56bd52c 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
@@ -70,8 +70,35 @@ namespace NCC.Extend.LqHytkHytk
///
/// 获取退卡信息列表
///
+ ///
+ /// 获取退卡记录列表,支持根据健康师ID或科技部老师ID筛选,返回品项明细、健康师业绩和科技部老师业绩
+ ///
+ /// 示例请求:
+ /// ```json
+ /// GET /api/Extend/LqHytkHytk?jksId=健康师ID&kjblsId=科技部老师ID¤tPage=1&pageSize=10
+ /// ```
+ ///
+ /// 参数说明:
+ /// - jksId: 健康师ID(可选,传入后只返回该健康师参与的退卡记录)
+ /// - kjblsId: 科技部老师ID(可选,传入后只返回该老师参与的退卡记录)
+ /// - id: 退卡编号(可选)
+ /// - md: 门店ID(可选)
+ /// - hy: 会员ID(可选)
+ /// - tksj: 退卡时间(可选,格式:yyyy-MM-dd,yyyy-MM-dd)
+ /// - currentPage: 当前页码(必填)
+ /// - pageSize: 每页数量(必填)
+ ///
+ /// 返回数据说明:
+ /// - 退卡基本信息:id、门店信息、会员信息、退卡金额、退卡时间等
+ /// - lqHytkMxList: 退卡品项明细列表,每个明细包含品项信息、退款金额、项目次数等
+ /// - lqHytkJksyjList: 健康师业绩列表,每个业绩包含健康师信息、业绩金额、手工费、退卡品项次数等
+ /// - lqHytkKjbsyjList: 科技部老师业绩列表,每个业绩包含科技部老师信息、业绩金额、手工费、退卡品项次数等
+ ///
/// 查询参数
- ///
+ /// 分页的退卡记录列表,包含退卡基本信息、品项明细、健康师业绩、科技部老师业绩
+ /// 成功返回退卡列表
+ /// 参数错误
+ /// 服务器内部错误
[HttpGet("")]
public async Task GetList([FromQuery] LqHytkHytkListQueryInput input)
{
@@ -79,7 +106,48 @@ namespace NCC.Extend.LqHytkHytk
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()
+
+ // 根据是否传入健康师ID或科技部老师ID,动态构建查询
+ ISugarQueryable baseQuery = null;
+
+ if (!string.IsNullOrEmpty(input.jksId) && !string.IsNullOrEmpty(input.kjblsId))
+ {
+ // 同时传入健康师ID和科技部老师ID,需要同时关联两个业绩表(不过滤有效性)
+ baseQuery = _db.Queryable(
+ (jksyj, kjbsyj, hytk) => jksyj.Gltkbh == hytk.Id && kjbsyj.Gltkbh == hytk.Id)
+ .Where((jksyj, kjbsyj, hytk) => jksyj.Jkszh == input.jksId)
+ .Where((jksyj, kjbsyj, hytk) => kjbsyj.Kjblszh == input.kjblsId)
+ .Select((jksyj, kjbsyj, hytk) => hytk)
+ .Distinct()
+ .MergeTable();
+ }
+ else if (!string.IsNullOrEmpty(input.jksId))
+ {
+ // 只传入健康师ID,关联健康师业绩表(不过滤有效性)
+ baseQuery = _db.Queryable(
+ (jksyj, hytk) => jksyj.Gltkbh == hytk.Id)
+ .Where((jksyj, hytk) => jksyj.Jkszh == input.jksId)
+ .Select((jksyj, hytk) => hytk)
+ .Distinct()
+ .MergeTable();
+ }
+ else if (!string.IsNullOrEmpty(input.kjblsId))
+ {
+ // 只传入科技部老师ID,关联科技部老师业绩表(不过滤有效性)
+ baseQuery = _db.Queryable(
+ (kjbsyj, hytk) => kjbsyj.Gltkbh == hytk.Id)
+ .Where((kjbsyj, hytk) => kjbsyj.Kjblszh == input.kjblsId)
+ .Select((kjbsyj, hytk) => hytk)
+ .Distinct()
+ .MergeTable();
+ }
+ else
+ {
+ // 没有传入健康师ID或科技部老师ID,使用原来的查询逻辑
+ baseQuery = _db.Queryable();
+ }
+
+ var data = await baseQuery
.WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
.WhereIF(!string.IsNullOrEmpty(input.md), p => p.Md.Equals(input.md))
.WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh))
@@ -123,6 +191,104 @@ namespace NCC.Extend.LqHytkHytk
.MergeTable()
.OrderBy(sidx + " " + input.sort)
.ToPagedListAsync(input.currentPage, input.pageSize);
+
+ // 获取当前页的退卡记录ID列表
+ var refundIds = data.list.Select(x => x.id).ToList();
+
+ // 批量查询品项明细(不过滤有效性,返回所有记录)
+ var itemDetails = new List();
+ if (refundIds.Any())
+ {
+ itemDetails = await _db.Queryable()
+ .Where(x => refundIds.Contains(x.RefundInfoId))
+ .Select(x => new LqHytkMxInfoOutput
+ {
+ id = x.Id,
+ refundInfoId = x.RefundInfoId,
+ billingItemId = x.BillingItemId,
+ px = x.Px,
+ pxmc = x.Pxmc,
+ pxjg = x.Pxjg,
+ tkje = x.Tkje,
+ projectNumber = x.ProjectNumber,
+ isEffective = x.IsEffective,
+ sourceType = x.SourceType,
+ totalPrice = x.TotalPrice
+ })
+ .ToListAsync();
+ }
+
+ // 批量查询健康师业绩(性能优化:一次性查询所有退卡的健康师业绩,不过滤有效性)
+ var jksyjList = new List();
+ if (refundIds.Any())
+ {
+ jksyjList = await _db.Queryable()
+ .Where(x => refundIds.Contains(x.Gltkbh))
+ .Select(x => new LqHytkJksyjInfoOutput
+ {
+ id = x.Id,
+ gltkbh = x.Gltkbh,
+ jks = x.Jks,
+ jksxm = x.Jksxm,
+ jkszh = x.Jkszh,
+ jksyj = x.Jksyj,
+ tksj = x.Tksj,
+ F_jsjid = x.F_jsjid,
+ F_tkpxid = x.F_tkpxid,
+ F_LaborCost = x.F_LaborCost,
+ F_tkpxNumber = x.F_tkpxNumber
+ })
+ .ToListAsync();
+ }
+
+ // 批量查询科技部老师业绩(性能优化:一次性查询所有退卡的科技部老师业绩,不过滤有效性)
+ var kjbsyjList = new List();
+ if (refundIds.Any())
+ {
+ kjbsyjList = await _db.Queryable()
+ .Where(x => refundIds.Contains(x.Gltkbh))
+ .Select(x => new LqHytkKjbsyjInfoOutput
+ {
+ id = x.Id,
+ gltkbh = x.Gltkbh,
+ kjbls = x.Kjbls,
+ kjblsxm = x.Kjblsxm,
+ kjblszh = x.Kjblszh,
+ kjblsyj = x.Kjblsyj,
+ tksj = x.Tksj,
+ F_tkpxid = x.F_tkpxid,
+ F_LaborCost = x.F_LaborCost,
+ F_tkpxNumber = x.F_tkpxNumber
+ })
+ .ToListAsync();
+ }
+
+ // 按退卡ID分组品项明细
+ var itemDetailsGrouped = itemDetails.GroupBy(x => x.refundInfoId)
+ .ToDictionary(g => g.Key, g => g.ToList());
+
+ // 按退卡ID分组健康师业绩
+ var jksyjGrouped = jksyjList.GroupBy(x => x.gltkbh)
+ .ToDictionary(g => g.Key, g => g.ToList());
+
+ // 按退卡ID分组科技部老师业绩
+ var kjbsyjGrouped = kjbsyjList.GroupBy(x => x.gltkbh)
+ .ToDictionary(g => g.Key, g => g.ToList());
+
+ // 为每个退卡记录分配品项明细、健康师业绩和科技部老师业绩
+ foreach (var item in data.list)
+ {
+ item.lqHytkMxList = itemDetailsGrouped.ContainsKey(item.id)
+ ? itemDetailsGrouped[item.id]
+ : new List();
+ item.lqHytkJksyjList = jksyjGrouped.ContainsKey(item.id)
+ ? jksyjGrouped[item.id]
+ : new List();
+ item.lqHytkKjbsyjList = kjbsyjGrouped.ContainsKey(item.id)
+ ? kjbsyjGrouped[item.id]
+ : new List();
+ }
+
return PageResult.SqlSugarPageResult(data);
}
#endregion
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
index 6014901..cae73ad 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
@@ -454,10 +454,8 @@ namespace NCC.Extend.LqKdKdjlb
{
throw NCCException.Oh("健康师ID不能为空");
}
-
var sidx = input.sidx == null ? "kdrq" : input.sidx;
var sort = string.IsNullOrEmpty(input.sort) ? "DESC" : input.sort;
-
// 解析时间范围
DateTime? startDate = null;
DateTime? endDate = null;
@@ -476,8 +474,7 @@ namespace NCC.Extend.LqKdKdjlb
}
// 通过健康师业绩表关联查询开单记录
- var data = await _db.Queryable(
- (jksyj, kdjlb) => jksyj.Glkdbh == kdjlb.Id)
+ var data = await _db.Queryable((jksyj, kdjlb) => jksyj.Glkdbh == kdjlb.Id)
.Where((jksyj, kdjlb) => jksyj.Jkszh == input.jksId)
.WhereIF(input.isEffective != 0, (jksyj, kdjlb) => jksyj.IsEffective == input.isEffective && kdjlb.IsEffective == input.isEffective)
.WhereIF(input.isEffective == 0, (jksyj, kdjlb) => jksyj.IsEffective == StatusEnum.有效.GetHashCode() && kdjlb.IsEffective == StatusEnum.有效.GetHashCode())
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs
index ad22a1d..e7b3951 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs
@@ -551,7 +551,8 @@ namespace NCC.Extend.LqKhxx
x.Pxmc,
x.Pxjg,
x.SourceType,
- x.ProjectNumber
+ x.ProjectNumber,
+ x.Remark
})
.ToListAsync();
@@ -600,6 +601,7 @@ namespace NCC.Extend.LqKhxx
ItemPrice = item.Pxjg,
SourceType = item.SourceType,
TotalPurchased = item.ProjectNumber,
+ Remark = item.Remark,
ConsumedCount = consumedData.FirstOrDefault(c => c.BillingItemId == item.Id)?.TotalConsumed ?? 0,
RefundedCount = refundedData.FirstOrDefault(r => r.BillingItemId == item.Id)?.TotalRefunded ?? 0,
DeductCount = deductData.FirstOrDefault(d => d.BillingItemId == item.Id)?.TotalDeduct ?? 0,
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
index cd79bb8..5c813cf 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
@@ -831,8 +831,40 @@ namespace NCC.Extend.LqStatistics
///
/// 获取科技部老师业绩统计
///
+ ///
+ /// 统计科技部老师的开单业绩、消耗业绩、手工费等相关数据
+ ///
+ /// 示例请求:
+ /// ```json
+ /// {
+ /// "startDate": "2025-01-01T00:00:00",
+ /// "endDate": "2025-01-31T23:59:59",
+ /// "teacherId": "科技部老师ID(可选)",
+ /// "teacherName": "科技部老师姓名(可选)"
+ /// }
+ /// ```
+ ///
+ /// 参数说明:
+ /// - startDate: 开始日期(可选)
+ /// - endDate: 结束日期(可选)
+ /// - teacherId: 科技部老师ID(可选)
+ /// - teacherName: 科技部老师姓名(可选)
+ ///
+ /// 返回数据说明:
+ /// - DepartmentName: 部门名称(固定为"科技部")
+ /// - TeacherName: 老师姓名
+ /// - ConsumeProjectCount: 消耗项目数
+ /// - ConsumeAchievement: 消耗业绩
+ /// - OrderAchievement: 开单业绩(开卡业绩)
+ /// - OrderItemCount: 开单品项次数
+ /// - ConsumeItemCount: 耗卡品项次数
+ /// - ConsumeLaborCost: 消耗手工费(耗卡手工费)
+ ///
/// 查询参数
- /// 科技部老师业绩统计结果
+ /// 科技部老师业绩统计结果列表,包含开单业绩、消耗业绩、手工费等数据
+ /// 成功返回统计数据
+ /// 参数错误
+ /// 服务器内部错误
[HttpPost("GetTechTeacherStatistics")]
[AllowAnonymous]
public async Task> GetTechTeacherStatistics(TechTeacherStatisticsInput input)
@@ -852,10 +884,21 @@ namespace NCC.Extend.LqStatistics
// 2. 获取业绩流水数据
var flowQuery = _db.Queryable();
- // 老师过滤
+ // 老师过滤(支持通过ID或账号匹配)
if (!string.IsNullOrEmpty(input.TeacherId))
{
- flowQuery = flowQuery.Where(x => x.TeacherId == input.TeacherId);
+ // 先通过用户ID查询账号,然后同时匹配ID和账号
+ var teacherAccount = allTeachers.FirstOrDefault(t => t.TeacherId == input.TeacherId)?.TeacherAccount;
+ if (!string.IsNullOrEmpty(teacherAccount))
+ {
+ // 同时匹配ID和账号(因为视图中的teacher_id可能是ID或账号)
+ flowQuery = flowQuery.Where(x => x.TeacherId == input.TeacherId || x.TeacherAccount == teacherAccount);
+ }
+ else
+ {
+ // 如果找不到账号,只匹配ID
+ flowQuery = flowQuery.Where(x => x.TeacherId == input.TeacherId);
+ }
}
if (!string.IsNullOrEmpty(input.TeacherName))
@@ -876,23 +919,25 @@ namespace NCC.Extend.LqStatistics
var flowRecords = await flowQuery.ToListAsync();
- // 3. 按老师分组统计业绩数据
+ // 3. 按老师账号分组统计业绩数据(包括耗卡手工费)
+ // 注意:视图中的teacher_id是kjbls,teacher_account是kjblszh,使用账号来匹配更准确
var teacherStatsDict = flowRecords
.GroupBy(x => new
{
- x.TeacherId,
- x.TeacherName,
- x.TeacherAccount,
+ TeacherAccount = x.TeacherAccount ?? string.Empty,
+ TeacherId = x.TeacherId ?? string.Empty,
+ TeacherName = x.TeacherName ?? string.Empty,
})
.ToDictionary(
- g => g.Key,
+ g => g.Key.TeacherAccount ?? string.Empty,
g => new
{
- ConsumeProjectCount = (int)g.Where(x => x.BusinessType == "耗卡").Sum(x => x.ProjectCount),
+ ConsumeProjectCount = (int)(g.Where(x => x.BusinessType == "耗卡").Sum(x => x.ProjectCount)),
ConsumeAchievement = g.Where(x => x.BusinessType == "耗卡").Sum(x => x.Achievement),
OrderAchievement = g.Where(x => x.BusinessType == "开卡").Sum(x => x.Achievement),
OrderItemCount = g.Where(x => x.BusinessType == "开卡").Sum(x => x.ItemCount),
ConsumeItemCount = g.Where(x => x.BusinessType == "耗卡").Sum(x => x.ItemCount),
+ ConsumeLaborCost = g.Where(x => x.BusinessType == "耗卡").Sum(x => x.LaborCost),
}
);
@@ -908,13 +953,10 @@ namespace NCC.Extend.LqStatistics
if (!string.IsNullOrEmpty(input.TeacherName) && !teacher.TeacherName.Contains(input.TeacherName))
continue;
+ // 使用账号来匹配业绩数据(因为视图中的teacher_account是kjblszh)
+ var teacherAccount = teacher.TeacherAccount ?? string.Empty;
var stats = teacherStatsDict.GetValueOrDefault(
- new
- {
- TeacherId = teacher.TeacherId,
- TeacherName = teacher.TeacherName,
- TeacherAccount = teacher.TeacherAccount,
- },
+ teacherAccount,
new
{
ConsumeProjectCount = 0,
@@ -922,6 +964,7 @@ namespace NCC.Extend.LqStatistics
OrderAchievement = 0m,
OrderItemCount = 0,
ConsumeItemCount = 0,
+ ConsumeLaborCost = 0m,
}
);
@@ -934,6 +977,7 @@ namespace NCC.Extend.LqStatistics
OrderAchievement = stats.OrderAchievement,
OrderItemCount = stats.OrderItemCount,
ConsumeItemCount = stats.ConsumeItemCount,
+ ConsumeLaborCost = stats.ConsumeLaborCost,
};
result.Add(teacherStats);
@@ -3672,6 +3716,5 @@ namespace NCC.Extend.LqStatistics
}
#endregion
-
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
index ff2ed7d..63bccf5 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
@@ -1043,12 +1043,18 @@ namespace NCC.Extend.LqXhHyhk
Kjblsyj = ikjbs_tem.kjblsyj,
Yjsj = DateTime.Now,
Hkpxid = lqXhPxmxEntity.Id,
+ // OriginalHdpxNumber = ikjbs_tem.hdpxNumber,
+ // OvertimeHdpxNumber = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0)),
+ // HdpxNumber = (decimal)((ikjbs_tem.hdpxNumber ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0))),
OriginalHdpxNumber = ikjbs_tem.hdpxNumber,
- OvertimeHdpxNumber = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0)),
- HdpxNumber = (decimal)((ikjbs_tem.hdpxNumber ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0))),
+ OvertimeHdpxNumber = 0,
+ HdpxNumber = ikjbs_tem.hdpxNumber,
+ // OriginalLaborCost = ikjbs_tem.laborCost,
+ // OvertimeLaborCost = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0)),
+ // LaborCost = (decimal)((ikjbs_tem.laborCost ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0))),
OriginalLaborCost = ikjbs_tem.laborCost,
- OvertimeLaborCost = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0)),
- LaborCost = (decimal)((ikjbs_tem.laborCost ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0))),
+ OvertimeLaborCost = 0,
+ LaborCost = ikjbs_tem.laborCost,
IsEffective = StatusEnum.有效.GetHashCode(),
}
);
@@ -1328,12 +1334,18 @@ namespace NCC.Extend.LqXhHyhk
Kjblsyj = ikjbs_tem.kjblsyj,
Yjsj = DateTime.Now,
Hkpxid = lqXhPxmxEntity.Id,
+ // OriginalHdpxNumber = ikjbs_tem.hdpxNumber,
+ // OvertimeHdpxNumber = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0)),
+ // HdpxNumber = (decimal)((ikjbs_tem.hdpxNumber ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0))),
+ // OriginalLaborCost = ikjbs_tem.laborCost,
+ // OvertimeLaborCost = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0)),
+ // LaborCost = (decimal)((ikjbs_tem.laborCost ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0))),
OriginalHdpxNumber = ikjbs_tem.hdpxNumber,
- OvertimeHdpxNumber = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0)),
- HdpxNumber = (decimal)((ikjbs_tem.hdpxNumber ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0))),
+ OvertimeHdpxNumber = 0,
+ HdpxNumber = ikjbs_tem.hdpxNumber,
OriginalLaborCost = ikjbs_tem.laborCost,
- OvertimeLaborCost = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0)),
- LaborCost = (decimal)((ikjbs_tem.laborCost ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0))),
+ OvertimeLaborCost = 0,
+ LaborCost = ikjbs_tem.laborCost,
IsEffective = StatusEnum.有效.GetHashCode(),
});
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotService.cs b/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotService.cs
index 88c785a..7dc6b81 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotService.cs
@@ -3,6 +3,7 @@ using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
+using NCC;
namespace NCC.Extend.Utils
{
@@ -12,17 +13,28 @@ namespace NCC.Extend.Utils
public class WeChatBotService
{
private readonly HttpClient _httpClient;
- private const string BOT_API_URL = "http://wx.lvqianmeiye.com/api/Bot/send-text";
- //正式地址
- //https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=581c22a6-cb67-42e5-8c76-b8e90052e188
- //测试地址
- //https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=6f8686ec-5011-4c1d-bae9-d82a2a2f4d83
- private const string WEBHOOK_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=496f1add-122b-43fc-9e38-0ca79c48b33f";
- private const string WEBHOOK_URL_TEST = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=6f8686ec-5011-4c1d-bae9-d82a2a2f4d83";
+ private readonly string _botApiUrl;
+ private readonly string _webhookUrl;
+ ///
+ /// 初始化企业微信机器人服务
+ ///
+ /// HTTP客户端
public WeChatBotService(HttpClient httpClient)
{
_httpClient = httpClient;
+
+ // 从配置文件中读取企业微信机器人配置
+ _botApiUrl = App.Configuration["WeChatBot:BotApiUrl"] ?? "http://wx.lvqianmeiye.com/api/Bot/send-text";
+
+ // 从配置文件中读取Webhook地址(正式或测试地址,通过配置文件切换)
+ _webhookUrl = App.Configuration["WeChatBot:WebhookUrl"];
+
+ // 如果配置文件中没有配置,使用默认值
+ if (string.IsNullOrEmpty(_webhookUrl))
+ {
+ _webhookUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=496f1add-122b-43fc-9e38-0ca79c48b33f";
+ }
}
///
@@ -36,8 +48,7 @@ namespace NCC.Extend.Utils
{
var requestData = new
{
- webhookUrl = WEBHOOK_URL,
- // webhookUrl = WEBHOOK_URL_TEST,
+ webhookUrl = _webhookUrl,
content = content,
mentionedList = (string)null,
mentionedMobileList = (string)null,
@@ -46,7 +57,7 @@ namespace NCC.Extend.Utils
var json = JsonConvert.SerializeObject(requestData);
var httpContent = new StringContent(json, Encoding.UTF8, "application/json");
- var response = await _httpClient.PostAsync(BOT_API_URL, httpContent);
+ var response = await _httpClient.PostAsync(_botApiUrl, httpContent);
if (response.IsSuccessStatusCode)
{