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