From 1cf1bd86e006e9e18a852bd6e8f254428d5f6d75 Mon Sep 17 00:00:00 2001 From: “wangming” <“wangming@antissoft.com”> Date: Mon, 3 Nov 2025 18:11:31 +0800 Subject: [PATCH] feat: 添加项目资料表手工费字段和陪同相关字段 --- netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlCrInput.cs | 25 +++++++++++++++++++++++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlInfoOutput.cs | 25 +++++++++++++++++++++++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlListOutput.cs | 25 +++++++++++++++++++++++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xmzl/LqXmzlEntity.cs | 24 ++++++++++++++++++++++++ netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs | 197 +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs | 38 ++++++++++++++++++-------------------- netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs | 24 ++++++++++++++++++++++-- sql/添加耗卡健康师业绩表陪同字段.sql | 11 +++++++++++ sql/添加项目资料表手工费字段.sql | 30 ++++++++++++++++++++++++++++++ 9 files changed, 181 insertions(+), 218 deletions(-) create mode 100644 sql/添加耗卡健康师业绩表陪同字段.sql create mode 100644 sql/添加项目资料表手工费字段.sql diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlCrInput.cs index 9c0a8d9..a839463 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlCrInput.cs @@ -81,6 +81,31 @@ namespace NCC.Extend.Entitys.Dto.LqXmzl public decimal? sgf { get; set; } /// + /// 医美手工费 + /// + public decimal? medicalBeautyLaborCost { get; set; } + + /// + /// 科美手工费 + /// + public decimal? techBeautyLaborCost { get; set; } + + /// + /// 生美手工费 + /// + public decimal? lifeBeautyLaborCost { get; set; } + + /// + /// 健康师手工费 + /// + public decimal? healthCoachLaborCost { get; set; } + + /// + /// 是否允许陪同 + /// + public int? isAllowAccompanied { get; set; } = 0; + + /// /// 科美类型 /// public string beautyType { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlInfoOutput.cs index 32bc357..8f2ce4d 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlInfoOutput.cs @@ -81,6 +81,31 @@ namespace NCC.Extend.Entitys.Dto.LqXmzl public decimal? sgf { get; set; } /// + /// 医美手工费 + /// + public decimal? medicalBeautyLaborCost { get; set; } + + /// + /// 科美手工费 + /// + public decimal? techBeautyLaborCost { get; set; } + + /// + /// 生美手工费 + /// + public decimal? lifeBeautyLaborCost { get; set; } + + /// + /// 健康师手工费 + /// + public decimal? healthCoachLaborCost { get; set; } + + /// + /// 是否允许陪同 + /// + public int? isAllowAccompanied { get; set; } = 0; + + /// /// 科美类型 /// public string beautyType { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlListOutput.cs index f463317..3cf55a3 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlListOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlListOutput.cs @@ -80,6 +80,31 @@ namespace NCC.Extend.Entitys.Dto.LqXmzl public decimal? sgf { get; set; } /// + /// 医美手工费 + /// + public decimal? medicalBeautyLaborCost { get; set; } + + /// + /// 科美手工费 + /// + public decimal? techBeautyLaborCost { get; set; } + + /// + /// 生美手工费 + /// + public decimal? lifeBeautyLaborCost { get; set; } + + /// + /// 健康师手工费 + /// + public decimal? healthCoachLaborCost { get; set; } + + /// + /// 是否允许陪同 + /// + public int? isAllowAccompanied { get; set; } = 0; + + /// /// 科美类型 /// public string beautyType { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xmzl/LqXmzlEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xmzl/LqXmzlEntity.cs index b19156e..cfde2de 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xmzl/LqXmzlEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xmzl/LqXmzlEntity.cs @@ -98,6 +98,30 @@ namespace NCC.Extend.Entitys.lq_xmzl public decimal? Sgf { get; set; } /// + /// 医美手工费 + /// + [SugarColumn(ColumnName = "F_MedicalBeautyLaborCost")] + public decimal? MedicalBeautyLaborCost { get; set; } + + /// + /// 科美手工费 + /// + [SugarColumn(ColumnName = "F_TechBeautyLaborCost")] + public decimal? TechBeautyLaborCost { get; set; } + + /// + /// 生美手工费 + /// + [SugarColumn(ColumnName = "F_LifeBeautyLaborCost")] + public decimal? LifeBeautyLaborCost { get; set; } + + /// + /// 健康师手工费 + /// + [SugarColumn(ColumnName = "F_HealthCoachLaborCost")] + public decimal? HealthCoachLaborCost { get; set; } + + /// /// 科美类型 /// [SugarColumn(ColumnName = "F_BeautyType")] diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs index 9b25335..f963270 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs @@ -279,13 +279,11 @@ namespace NCC.Extend.LqKdKdjlb // 获取当前页的开单记录ID列表 var billingIds = data.list.Select(x => x.id).ToList(); - // 批量查询品项明细 var itemDetails = new List(); if (billingIds.Any()) { - itemDetails = await _db.Queryable() - .Where(x => billingIds.Contains(x.Glkdbh) && x.IsEffective == StatusEnum.有效.GetHashCode()) + itemDetails = await _db.Queryable().Where(x => billingIds.Contains(x.Glkdbh) && x.IsEffective == StatusEnum.有效.GetHashCode()) .Select(x => new LqKdPxmxInfoOutput { id = x.Id, @@ -575,199 +573,6 @@ namespace NCC.Extend.LqKdKdjlb } #endregion - #region 新建开单记录表_备份 - /// - /// 新建开单记录表_备份 - /// - /// 参数 - /// - [HttpPost("Create_Bak")] - public async Task Create_Bak([FromBody] LqKdKdjlbCrInput input) - { - var userInfo = await _userManager.GetUserInfo(); - var entity = input.Adapt(); - var HealthInstructorNames = ""; - entity.Id = YitIdHelper.NextId().ToString(); - entity.CreateTime = DateTime.Now; - entity.UpdateTime = DateTime.Now; - try - { - //开启事务 - _db.BeginTran(); - //新增开单记录表记录 - entity.CreateUser = userInfo.userId; - entity.DeductAmount = input.lqKdKdjlbDeductList.Sum(x => x.Amount ?? 0);//计算储扣总金额 - var newEntity = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnEntityAsync(); - //循环品相信息 - // 收集所有需要插入的实体,然后批量插入 - var allPxmxEntities = new List(); - var allJksyjEntities = new List(); - var allKjbsyjEntities = new List(); - var allDeductEntities = new List(); - // 处理扣款信息列表 - foreach (var item in input.lqKdKdjlbDeductList) - { - var lqKdDeductEntity = new LqKdDeductinfoEntity - { - Id = YitIdHelper.NextId().ToString(), - BillingId = newEntity.Id, - DeductId = item.DeductId, - DeductType = item.DeductType, - Amount = item.Amount, - }; - allDeductEntities.Add(lqKdDeductEntity); - } - // 处理品项明细列表 - foreach (var item in input.lqKdPxmxList) - { - // 创建品项明细实体 - var lqKdPxmxEntity = new LqKdPxmxEntity - { - Id = YitIdHelper.NextId().ToString(), - Glkdbh = newEntity.Id, - Yjsj = input.kdrq, - CreateTIme = DateTime.Now, - MemberId = entity.Kdhy, - IsEnabled = 0, - ProjectNumber = item.projectNumber, - TotalPrice = (decimal)(item.pxjg * item.projectNumber), - Px = item.px, - Pxmc = item.pxmc, - Pxjg = item.pxjg, - SourceType = item.sourceType, - ActualPrice = item.actualPrice, - }; - allPxmxEntities.Add(lqKdPxmxEntity); - - // 收集该品项关联的健康师业绩 - if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any()) - { - //把jksxm保存到HealthInstructorNames - foreach (var ijks_tem in item.lqKdJksyjList) - { - HealthInstructorNames += ijks_tem.jksxm + ","; - allJksyjEntities.Add(new LqKdJksyjEntity - { - Id = YitIdHelper.NextId().ToString(), - Glkdbh = newEntity.Id, - Jks = ijks_tem.jks, - Jksxm = ijks_tem.jksxm, - Jkszh = ijks_tem.jkszh, - Jksyj = ijks_tem.jksyj, - Yjsj = input.kdrq, - Jsj_id = ijks_tem.jsj_id, - Kdpxid = lqKdPxmxEntity.Id, - }); - } - } - - // 收集该品项关联的科技部老师业绩 - if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any()) - { - foreach (var ikjbs_tem in item.lqKdKjbsyjList) - { - allKjbsyjEntities.Add( - new LqKdKjbsyjEntity - { - Id = YitIdHelper.NextId().ToString(), - Glkdbh = newEntity.Id, - Kjbls = ikjbs_tem.kjbls, - Kjblsxm = ikjbs_tem.kjblsxm, - Kjblszh = ikjbs_tem.kjblszh, - Kjblsyj = ikjbs_tem.kjblsyj, - Yjsj = input.kdrq, - Kdpxid = lqKdPxmxEntity.Id, - } - ); - } - } - } - - - //通过会员id查询会员信息 - var memberInfo = await _db.Queryable().Where(u => u.Id == entity.Kdhy).FirstAsync(); - //通过开单记录表查询这个会员开单金额 - var kdAmount = await _db.Queryable().Where(u => u.Kdhy == entity.Kdhy).SumAsync(u => u.Sfyj); - //如果开单金额小于500,为散客,如果大于500,为会员 - if (kdAmount < 500) - { - memberInfo.Khlx = MemberTypeEnum.散客.GetHashCode().ToString(); - } - else - { - memberInfo.Khlx = MemberTypeEnum.会员.GetHashCode().ToString(); - } - await _db.Updateable(memberInfo).ExecuteCommandAsync(); - // 批量插入扣款信息 - if (allDeductEntities.Any()) - { - await _db.Insertable(allDeductEntities).ExecuteCommandAsync(); - } - // 批量插入品项明细 - if (allPxmxEntities.Any()) - { - await _db.Insertable(allPxmxEntities).ExecuteCommandAsync(); - } - // 批量插入健康师业绩 - if (allJksyjEntities.Any()) - { - await _db.Insertable(allJksyjEntities).ExecuteCommandAsync(); - } - // 批量插入科技部老师业绩 - if (allKjbsyjEntities.Any()) - { - await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync(); - } - - //关闭事务 - _db.CommitTran(); - - // 生成开单记录字符串并发送到企业微信 - try - { - var entityInfo = await GetInfo(newEntity.Id); - if (entityInfo != null) - { - var orderRecordString = _stringGenerator.GenerateOrderRecordString(entityInfo, HealthInstructorNames); - Console.WriteLine("开单记录字符串生成成功:"); - Console.WriteLine(orderRecordString); - - // 发送到企业微信群 - try - { - var sendResult = await _weChatBotService.SendOrderRecordMessage(orderRecordString); - if (sendResult) - { - Console.WriteLine("开单记录已成功发送到企业微信群"); - } - else - { - Console.WriteLine("开单记录发送到企业微信群失败"); - } - } - catch (Exception wechatEx) - { - Console.WriteLine($"发送企业微信消息异常: {wechatEx.Message}"); - } - } - } - catch (Exception ex) - { - // 字符串生成失败不影响主流程,只记录日志 - Console.WriteLine($"生成开单记录字符串失败: {ex.Message}"); - } - } - catch (Exception ex) - { - //回滚事务 - _db.RollbackTran(); - Console.WriteLine($"开单创建失败: {ex.Message}"); - Console.WriteLine($"异常堆栈: {ex.StackTrace}"); - throw NCCException.Oh(ErrorCode.COM1000); - } - } - #endregion - #region 获取开单记录表无分页列表 /// /// 获取开单记录表无分页列表 diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs index ea0e88d..81e04b8 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs @@ -672,26 +672,24 @@ namespace NCC.Extend.LqXhHyhk { foreach (var ikjbs_tem in item.lqXhKjbsyjList) { - allKjbsyjEntities.Add( - new LqXhKjbsyjEntity - { - Id = YitIdHelper.NextId().ToString(), - Glkdbh = input.id, - Kjbls = ikjbs_tem.kjbls, - Kjblsxm = ikjbs_tem.kjblsxm, - Kjblszh = ikjbs_tem.kjblszh, - 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))), - IsEffective = StatusEnum.有效.GetHashCode(), - } - ); + allKjbsyjEntities.Add(new LqXhKjbsyjEntity + { + Id = YitIdHelper.NextId().ToString(), + Glkdbh = input.id, + Kjbls = ikjbs_tem.kjbls, + Kjblsxm = ikjbs_tem.kjblsxm, + Kjblszh = ikjbs_tem.kjblszh, + 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))), + IsEffective = StatusEnum.有效.GetHashCode(), + }); } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs index 685d428..1839bbf 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs @@ -28,6 +28,7 @@ using NCC.Common.Model.NPOI; using NCC.Common.Configuration; using NCC.DataEncryption; using NCC.ClayObject; +using NCC.Extend.Entitys.Enum; namespace NCC.Extend.LqXmzl { @@ -115,6 +116,10 @@ namespace NCC.Extend.LqXmzl beautyType = it.BeautyType, sourceType = it.SourceType, isEffective = it.IsEffective, + medicalBeautyLaborCost = it.MedicalBeautyLaborCost, + techBeautyLaborCost = it.TechBeautyLaborCost, + lifeBeautyLaborCost = it.LifeBeautyLaborCost, + healthCoachLaborCost = it.HealthCoachLaborCost, }).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(data); } @@ -279,6 +284,23 @@ namespace NCC.Extend.LqXmzl } #endregion + #region 设置品项作废 + /// + /// 设置品项作废 + /// + /// 主键 + /// + [HttpPut("SetInvalid/{id}")] + public async Task SetInvalid(string id) + { + var entity = await _db.Queryable().FirstAsync(p => p.Id == id); + if (entity == null) throw NCCException.Oh("品项不存在"); + entity.IsEffective = StatusEnum.无效.GetHashCode(); + var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); + if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001); + } + #endregion + #region 删除品项资料 /// /// 删除品项资料 @@ -669,9 +691,7 @@ namespace NCC.Extend.LqXmzl return result; } #endregion - } - /// /// 品项统计数据(内部类) /// diff --git a/sql/添加耗卡健康师业绩表陪同字段.sql b/sql/添加耗卡健康师业绩表陪同字段.sql new file mode 100644 index 0000000..8a3d790 --- /dev/null +++ b/sql/添加耗卡健康师业绩表陪同字段.sql @@ -0,0 +1,11 @@ +-- 给lq_xh_jksyj表添加两个陪同相关字段 +-- 陪同项目数、是否陪同 + +-- 添加陪同项目数字段 +ALTER TABLE lq_xh_jksyj +ADD COLUMN F_AccompaniedProjectNumber DECIMAL(18,2) DEFAULT 0.00 COMMENT '陪同项目数' AFTER F_OvertimeLaborCost; + +-- 添加是否陪同字段 +ALTER TABLE lq_xh_jksyj +ADD COLUMN F_IsAccompanied INT DEFAULT 0 COMMENT '是否陪同(0-否,1-是)' AFTER F_AccompaniedProjectNumber; + diff --git a/sql/添加项目资料表手工费字段.sql b/sql/添加项目资料表手工费字段.sql new file mode 100644 index 0000000..21dab0e --- /dev/null +++ b/sql/添加项目资料表手工费字段.sql @@ -0,0 +1,30 @@ +-- 给lq_xmzl表添加四个手工费字段 +-- 医美手工费、科美手工费、生美手工费、健康师手工费 + +-- 添加医美手工费字段 +ALTER TABLE lq_xmzl +ADD COLUMN F_MedicalBeautyLaborCost DECIMAL(18,2) DEFAULT 0.00 COMMENT '医美手工费' AFTER sgf; + +-- 添加科美手工费字段 +ALTER TABLE lq_xmzl +ADD COLUMN F_TechBeautyLaborCost DECIMAL(18,2) DEFAULT 0.00 COMMENT '科美手工费' AFTER F_MedicalBeautyLaborCost; + +-- 添加生美手工费字段 +ALTER TABLE lq_xmzl +ADD COLUMN F_LifeBeautyLaborCost DECIMAL(18,2) DEFAULT 0.00 COMMENT '生美手工费' AFTER F_TechBeautyLaborCost; + +-- 添加健康师手工费字段 +ALTER TABLE lq_xmzl +ADD COLUMN F_HealthCoachLaborCost DECIMAL(18,2) DEFAULT 0.00 COMMENT '健康师手工费' AFTER F_LifeBeautyLaborCost; + +-- 更新已有数据:如果原有sgf字段有值,将值复制到四个新字段(可根据业务需求调整) +-- UPDATE lq_xmzl SET F_MedicalBeautyLaborCost = sgf, F_TechBeautyLaborCost = sgf, F_LifeBeautyLaborCost = sgf, F_HealthCoachLaborCost = sgf WHERE sgf IS NOT NULL AND sgf > 0; + +-- ============================================ +-- 给lq_xmzl表添加是否允许陪同字段 +-- ============================================ + +-- 添加是否允许陪同字段 +ALTER TABLE lq_xmzl +ADD COLUMN F_IsAllowAccompanied INT DEFAULT 0 COMMENT '是否允许陪同(0-否,1-是)' AFTER F_HealthCoachLaborCost; + -- libgit2 0.21.4