From 86e6cb7030c926402c8e0cbbdde56d57ca567d47 Mon Sep 17 00:00:00 2001
From: “wangming” <“wangming@antissoft.com”>
Date: Thu, 25 Sep 2025 22:39:56 +0800
Subject: [PATCH] 对开单加上了是否有效的逻辑,完善了开单业绩统计的部分
---
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs | 5 +++++
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs | 6 ++++++
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs | 9 ++++++++-
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs | 6 ++++++
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs | 6 ++++++
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs | 265 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs | 50 +++++++++++++++++++++++++++-----------------------
7 files changed, 323 insertions(+), 24 deletions(-)
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs
index 1c76346..9be1f65 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs
@@ -9,6 +9,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
public class LqKdDeductinfoCrInput
{
///
+ /// 扣减编号
+ ///
+ public string id { get; set; }
+
+ ///
/// 扣减类型
///
[Required(ErrorMessage = "扣减类型不能为空")]
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs
index 7a75e90..441dbaa 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs
@@ -64,5 +64,11 @@ namespace NCC.Extend.Entitys.lq_kd_jksyj
///
[SugarColumn(ColumnName = "F_kdpxid")]
public string Kdpxid { get; set; }
+
+ ///
+ /// 是否有效
+ ///
+ [SugarColumn(ColumnName = "F_IsEffective")]
+ public int IsEffective { get; set; } = 1;
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs
index d50cb3a..309e905 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs
@@ -52,7 +52,7 @@ namespace NCC.Extend.Entitys.lq_kd_kdjlb
///
[SugarColumn(ColumnName = "zdyj")]
public decimal Zdyj { get; set; }
-
+
///
/// 实付业绩
@@ -197,5 +197,12 @@ namespace NCC.Extend.Entitys.lq_kd_kdjlb
///
[SugarColumn(ColumnName = "F_UpdateTime")]
public DateTime UpdateTime { get; set; }
+
+ ///
+ /// 是否有效
+ ///
+ [SugarColumn(ColumnName = "F_IsEffective")]
+ public int IsEffective { get; set; } = 1;
+
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs
index 4efc633..97cadbb 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs
@@ -64,5 +64,11 @@ namespace NCC.Extend.Entitys.lq_kd_kjbsyj
///
[SugarColumn(ColumnName = "F_LaborCost")]
public decimal? LaborCost { get; set; }
+
+ ///
+ /// 是否有效
+ ///
+ [SugarColumn(ColumnName = "F_IsEffective")]
+ public int IsEffective { get; set; } = 1;
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs
index 791cefa..d4ec98a 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs
@@ -82,5 +82,11 @@ namespace NCC.Extend.Entitys.lq_kd_pxmx
///
[SugarColumn(ColumnName = "F_ActualPrice")]
public decimal ActualPrice { get; set; }
+
+ ///
+ /// 是否有效
+ ///
+ [SugarColumn(ColumnName = "F_IsEffective")]
+ public int IsEffective { get; set; } = 1;
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
index 5ad398a..bed0bac 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
@@ -799,5 +799,270 @@ namespace NCC.Extend.LqKdKdjlb
.ToList();
}
#endregion
+
+ #region 修改开单记录,不做删除,仅健康师业绩、科技部老师业绩信息
+ ///
+ /// 修改开单记录,不做删除,仅健康师业绩、科技部老师业绩信息
+ ///
+ ///
+ /// 更新开单记录及其关联的品项明细、健康师业绩、科技部老师业绩信息
+ ///
+ /// 示例请求:
+ /// ```json
+ /// {
+ /// "id": "开单编号",
+ /// "djmd": "单据门店",
+ /// "jsj": "金三角",
+ /// "kdrq": "2025-01-11",
+ /// "lqKdPxmxList": [
+ /// {
+ /// "px": "品项编号",
+ /// "pxmc": "品项名称",
+ /// "pxjg": 100.00,
+ /// "projectNumber": 1,
+ /// "sourceType": "购买",
+ /// "lqKdJksyjList": [
+ /// {
+ /// "jks": "健康师",
+ /// "jksxm": "健康师姓名",
+ /// "jksyj": "100"
+ /// }
+ /// ]
+ /// }
+ /// ]
+ /// }
+ /// ```
+ ///
+ /// 参数说明:
+ /// - id: 开单记录主键ID
+ /// - input: 开单记录更新参数,包含品项明细和业绩信息
+ ///
+ /// 开单记录主键ID
+ /// 开单记录更新参数
+ /// 无返回值
+ /// 更新成功
+ /// 参数错误或数据验证失败
+ /// 服务器内部错误
+ [HttpPut("UpdateForNoDelete/{id}")]
+ public async Task UpdateForNoDelete(string id, [FromBody] LqKdKdjlbUpInput input)
+ {
+ var entity = input.Adapt();
+ entity.Id = id; // 确保ID正确设置
+
+ try
+ {
+ //开启事务
+ _db.BeginTran();
+
+ // 更新开单记录主表
+ await _db.Updateable(entity)
+ .IgnoreColumns(ignoreAllNullColumns: true)
+ .IgnoreColumns(x => x.CreateTime) // 不更新创建时间
+ .ExecuteCommandAsync();
+
+ // 处理品项明细列表 - 更新或插入
+ if (input.lqKdPxmxList != null && input.lqKdPxmxList.Any())
+ {
+ foreach (var item in input.lqKdPxmxList)
+ {
+ // 检查品项明细是否已存在
+ var existingPxmx = await _db.Queryable()
+ .Where(x => x.Glkdbh == id && x.Px == item.px)
+ .FirstAsync();
+
+ if (existingPxmx != null)
+ {
+ // 更新现有品项明细
+ existingPxmx.ProjectNumber = item.projectNumber == 0 ? 1 : item.projectNumber;
+ existingPxmx.TotalPrice = (decimal)(item.pxjg * (item.projectNumber == 0 ? 1 : item.projectNumber));
+ existingPxmx.Pxmc = item.pxmc;
+ existingPxmx.Pxjg = item.pxjg;
+ existingPxmx.SourceType = item.sourceType;
+ await _db.Updateable(existingPxmx).ExecuteCommandAsync();
+
+ // 更新该品项关联的健康师业绩
+ if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
+ {
+ // 先删除该品项的所有健康师业绩
+ await _db.Deleteable()
+ .Where(x => x.Kdpxid == existingPxmx.Id)
+ .ExecuteCommandAsync();
+
+ // 重新插入健康师业绩
+ var jksyjEntities = item.lqKdJksyjList.Select(ijks_tem => new LqKdJksyjEntity
+ {
+ Id = YitIdHelper.NextId().ToString(),
+ Glkdbh = entity.Id,
+ Jks = ijks_tem.jks,
+ Jksxm = ijks_tem.jksxm,
+ Jkszh = ijks_tem.jkszh,
+ Jksyj = ijks_tem.jksyj,
+ Yjsj = DateTime.Now,
+ Jsj_id = ijks_tem.jsj_id,
+ Kdpxid = existingPxmx.Id,
+ }).ToList();
+
+ if (jksyjEntities.Any())
+ {
+ await _db.Insertable(jksyjEntities).ExecuteCommandAsync();
+ }
+ }
+
+ // 更新该品项关联的科技部老师业绩
+ if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
+ {
+ // 先删除该品项的所有科技部老师业绩
+ await _db.Deleteable()
+ .Where(x => x.Kdpxid == existingPxmx.Id)
+ .ExecuteCommandAsync();
+
+ // 重新插入科技部老师业绩
+ var kjbsyjEntities = item.lqKdKjbsyjList.Select(ikjbs_tem => new LqKdKjbsyjEntity
+ {
+ Id = YitIdHelper.NextId().ToString(),
+ Glkdbh = entity.Id,
+ Kjbls = ikjbs_tem.kjbls,
+ Kjblsxm = ikjbs_tem.kjblsxm,
+ Kjblszh = ikjbs_tem.kjblszh,
+ Kjblsyj = ikjbs_tem.kjblsyj,
+ Yjsj = DateTime.Now,
+ Kdpxid = existingPxmx.Id,
+ }).ToList();
+
+ if (kjbsyjEntities.Any())
+ {
+ await _db.Insertable(kjbsyjEntities).ExecuteCommandAsync();
+ }
+ }
+ }
+ else
+ {
+ // 插入新的品项明细
+ var newPxmxEntity = new LqKdPxmxEntity
+ {
+ Id = YitIdHelper.NextId().ToString(),
+ Glkdbh = entity.Id,
+ CreateTIme = DateTime.Now,
+ MemberId = entity.Kdhy,
+ IsEnabled = 0,
+ ProjectNumber = item.projectNumber == 0 ? 1 : item.projectNumber,
+ TotalPrice = (decimal)(item.pxjg * (item.projectNumber == 0 ? 1 : item.projectNumber)),
+ Px = item.px,
+ Pxmc = item.pxmc,
+ Pxjg = item.pxjg,
+ SourceType = item.sourceType,
+ };
+ await _db.Insertable(newPxmxEntity).ExecuteCommandAsync();
+
+ // 插入该品项关联的健康师业绩
+ if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
+ {
+ var jksyjEntities = item.lqKdJksyjList.Select(ijks_tem => new LqKdJksyjEntity
+ {
+ Id = YitIdHelper.NextId().ToString(),
+ Glkdbh = entity.Id,
+ Jks = ijks_tem.jks,
+ Jksxm = ijks_tem.jksxm,
+ Jkszh = ijks_tem.jkszh,
+ Jksyj = ijks_tem.jksyj,
+ Yjsj = DateTime.Now,
+ Jsj_id = ijks_tem.jsj_id,
+ Kdpxid = newPxmxEntity.Id,
+ }).ToList();
+
+ await _db.Insertable(jksyjEntities).ExecuteCommandAsync();
+ }
+
+ // 插入该品项关联的科技部老师业绩
+ if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
+ {
+ var kjbsyjEntities = item.lqKdKjbsyjList.Select(ikjbs_tem => new LqKdKjbsyjEntity
+ {
+ Id = YitIdHelper.NextId().ToString(),
+ Glkdbh = entity.Id,
+ Kjbls = ikjbs_tem.kjbls,
+ Kjblsxm = ikjbs_tem.kjblsxm,
+ Kjblszh = ikjbs_tem.kjblszh,
+ Kjblsyj = ikjbs_tem.kjblsyj,
+ Yjsj = DateTime.Now,
+ Kdpxid = newPxmxEntity.Id,
+ }).ToList();
+
+ await _db.Insertable(kjbsyjEntities).ExecuteCommandAsync();
+ }
+ }
+ }
+ }
+
+ //关闭事务
+ _db.CommitTran();
+ }
+ catch (Exception)
+ {
+ //回滚事务
+ _db.RollbackTran();
+ throw NCCException.Oh(ErrorCode.COM1001);
+ }
+ }
+ #endregion
+
+ #region 作废开单记录
+ ///
+ /// 作废开单记录
+ ///
+ /// 开单记录主键ID
+ /// 无返回值
+ /// 作废成功
+ /// 参数错误,开单记录ID不能为空
+ /// 开单记录不存在
+ /// 服务器内部错误
+ [HttpPut("Cancel/{id}")]
+ public async Task Cancel(string id)
+ {
+ if (string.IsNullOrEmpty(id))
+ {
+ throw NCCException.Oh("开单记录ID不能为空");
+ }
+
+ try
+ {
+ //开启事务
+ _db.BeginTran();
+
+ // 查询开单记录
+ var entity = await _db.Queryable().FirstAsync(p => p.Id == id);
+ if (entity == null)
+ {
+ throw NCCException.Oh("开单记录不存在");
+ }
+
+ // 检查是否已经作废
+ if (entity.IsEffective == 0)
+ {
+ throw NCCException.Oh("该开单记录已经作废");
+ }
+
+ // 标记开单记录为无效
+ entity.IsEffective = 0;
+ await _db.Updateable(entity).ExecuteCommandAsync();
+ // 标记对应开单明细表为无效
+ await _db.Updateable().SetColumns(it => new LqKdPxmxEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
+ // 标记健康师业绩为无效
+ await _db.Updateable().SetColumns(it => new LqKdJksyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
+ // 标记科技部老师业绩为无效
+ await _db.Updateable().SetColumns(it => new LqKdKjbsyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
+ //关闭事务
+ _db.CommitTran();
+ }
+ catch (Exception ex) when (!(ex is NCCException))
+ {
+ //回滚事务
+ _db.RollbackTran();
+ throw NCCException.Oh(ErrorCode.COM1001);
+ }
+ }
+ #endregion
+
+
}
}
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
index 7b4ab4f..0ad0d63 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
@@ -1238,6 +1238,7 @@ namespace NCC.Extend.LqStatistics
jsj.F_Id = jksyj.jsj_id
AND YEAR(jksyj.yjsj) = SUBSTRING(jsj.yf, 1, 4)
AND MONTH(jksyj.yjsj) = SUBSTRING(jsj.yf, 5, 2)
+ AND jksyj.F_IsEffective = 1
)
LEFT JOIN lq_mdxx md ON jsj.md = md.F_Id
WHERE jsj.yf = @statisticsMonth
@@ -1429,7 +1430,7 @@ namespace NCC.Extend.LqStatistics
) AS BasePerformance,
SUM(CAST(jksyj.jksyj AS DECIMAL(18,2))) AS TotalPerformance
FROM lq_kd_jksyj jksyj
- INNER JOIN lq_kd_pxmx pxmx ON jksyj.F_kdpxid = pxmx.F_Id
+ INNER JOIN lq_kd_pxmx pxmx ON jksyj.F_kdpxid = pxmx.F_Id AND pxmx.F_IsEffective = 1
INNER JOIN lq_xmzl xmzl ON pxmx.px = xmzl.F_Id
INNER JOIN BASE_USER u ON jksyj.jkszh = u.F_Id
LEFT JOIN lq_mdxx md ON u.F_MDID = md.F_Id
@@ -1446,6 +1447,7 @@ namespace NCC.Extend.LqStatistics
AND jksyj.jksyj != '0'
AND jksyj.F_kdpxid IS NOT NULL
AND jksyj.F_kdpxid != ''
+ AND jksyj.F_IsEffective = 1
AND YEAR(jksyj.yjsj) = @year
AND MONTH(jksyj.yjsj) = @month
GROUP BY
@@ -1636,27 +1638,6 @@ namespace NCC.Extend.LqStatistics
#endregion
- ///
- /// 部门信息
- ///
- public class DepartmentInfo
- {
- ///
- /// 部门ID
- ///
- public string DepartmentId { get; set; }
-
- ///
- /// 部门名称
- ///
- public string DepartmentName { get; set; }
-
- ///
- /// 父部门ID
- ///
- public string ParentId { get; set; }
- }
-
#region 科技部开单业绩统计
///
@@ -1706,13 +1687,14 @@ namespace NCC.Extend.LqStatistics
MAX(k.yjsj) AS LastOrderDate,
MIN(k.yjsj) AS FirstOrderDate
FROM lq_kd_kjbsyj k
- LEFT JOIN lq_kd_pxmx pm ON k.F_kdpxid = pm.F_Id
+ LEFT JOIN lq_kd_pxmx pm ON k.F_kdpxid = pm.F_Id AND pm.F_IsEffective = 1
WHERE k.kjbls IS NOT NULL
AND k.kjblsxm IS NOT NULL
AND k.yjsj IS NOT NULL
AND k.kjblsyj IS NOT NULL
AND k.kjblsyj != ''
AND k.kjblsyj != '0'
+ AND k.F_IsEffective = 1
AND YEAR(k.yjsj) = @year
AND MONTH(k.yjsj) = @month
GROUP BY
@@ -1893,5 +1875,27 @@ namespace NCC.Extend.LqStatistics
}
#endregion
+
+ ///
+ /// 部门信息
+ ///
+ public class DepartmentInfo
+ {
+ ///
+ /// 部门ID
+ ///
+ public string DepartmentId { get; set; }
+
+ ///
+ /// 部门名称
+ ///
+ public string DepartmentName { get; set; }
+
+ ///
+ /// 父部门ID
+ ///
+ public string ParentId { get; set; }
+ }
+
}
}
--
libgit2 0.21.4