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 e7c406d..fa154b4 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 @@ -48,7 +48,7 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx /// /// 项目次数 /// - public int? F_ProjectNumber { get; set; } + public decimal? F_ProjectNumber { 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 623329e..85d67ad 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 @@ -48,7 +48,7 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx /// /// 项目次数 /// - public int projectNumber { get; set; } + public decimal projectNumber { get; set; } /// diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxUpInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxUpInput.cs index a23fc9e..d2fd158 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxUpInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxUpInput.cs @@ -40,7 +40,7 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx /// /// 项目次数 /// - public int? F_ProjectNumber { get; set; } + public decimal? F_ProjectNumber { get; set; } /// /// 是否有效 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs index 215d6c4..ac326d5 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs @@ -80,6 +80,16 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk public string signatureFile { get; set; } /// + /// 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) + /// + public decimal? overtimeCoefficient { get; set; } + + /// + /// 原始手工费(用户输入的原始值) + /// + public decimal? originalSgfy { get; set; } + + /// /// 耗卡_品项明细 /// public List lqXhPxmxList { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkInfoOutput.cs index d1ccbc2..db77441 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkInfoOutput.cs @@ -112,6 +112,21 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk public string cancelRemark { get; set; } /// + /// 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) + /// + public decimal? overtimeCoefficient { get; set; } + + /// + /// 原始手工费(用户输入的原始值) + /// + public decimal? originalSgfy { get; set; } + + /// + /// 加班手工费(加班计算后的增量值) + /// + public decimal? overtimeSgfy { get; set; } + + /// /// 健康师业绩 /// public List lqXhJksyjList { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs index 6c8a987..5d67139 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs @@ -95,5 +95,20 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk /// public int isEffective { get; set; } + /// + /// 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) + /// + public decimal? overtimeCoefficient { get; set; } + + /// + /// 原始手工费(用户输入的原始值) + /// + public decimal? originalSgfy { get; set; } + + /// + /// 加班手工费(加班计算后的增量值) + /// + public decimal? overtimeSgfy { get; set; } + } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkMemberCardUsageOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkMemberCardUsageOutput.cs index 8b2a0f4..2e3dad5 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkMemberCardUsageOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkMemberCardUsageOutput.cs @@ -87,7 +87,7 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk /// /// 项目次数 /// - public int? ProjectNumber { get; set; } + public decimal? ProjectNumber { get; set; } /// /// 合计金额 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhJksyj/LqXhJksyjInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhJksyj/LqXhJksyjInfoOutput.cs index c696d88..01585dc 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhJksyj/LqXhJksyjInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhJksyj/LqXhJksyjInfoOutput.cs @@ -68,6 +68,26 @@ namespace NCC.Extend.Entitys.Dto.LqXhJksyj public decimal? kdpxNumber { get; set; } /// + /// 原始耗卡品项次数(原始值) + /// + public decimal? originalKdpxNumber { get; set; } + + /// + /// 加班耗卡品项次数(加班计算后的增量值) + /// + public decimal? overtimeKdpxNumber { get; set; } + + /// + /// 原始手工费(原始值) + /// + public decimal? originalLaborCost { get; set; } + + /// + /// 加班手工费(加班计算后的增量值) + /// + public decimal? overtimeLaborCost { get; set; } + + /// /// 会员id /// public string memberId { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhKjbsyj/LqXhKjbsyjInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhKjbsyj/LqXhKjbsyjInfoOutput.cs index 9aff454..b510e2c 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhKjbsyj/LqXhKjbsyjInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhKjbsyj/LqXhKjbsyjInfoOutput.cs @@ -56,5 +56,25 @@ namespace NCC.Extend.Entitys.Dto.LqXhKjbsyj /// 耗卡品相次数 /// public decimal? hdpxNumber { get; set; } + + /// + /// 原始耗卡品相次数(原始值) + /// + public decimal? originalHdpxNumber { get; set; } + + /// + /// 加班耗卡品相次数(加班计算后的增量值) + /// + public decimal? overtimeHdpxNumber { get; set; } + + /// + /// 原始手工费(原始值) + /// + public decimal? originalLaborCost { get; set; } + + /// + /// 加班手工费(加班计算后的增量值) + /// + public decimal? overtimeLaborCost { get; set; } } } \ No newline at end of file diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs index 5165762..3b55700 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs @@ -46,7 +46,7 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx /// /// 项目次数 /// - public int? projectNumber { get; set; } + public decimal? projectNumber { get; set; } /// /// 是否有效 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxInfoOutput.cs index a8e38cb..a5b37f5 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxInfoOutput.cs @@ -53,7 +53,17 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx /// /// 项目次数 /// - public int? projectNumber { get; set; } + public decimal? projectNumber { get; set; } + + /// + /// 原始项目次数(用户输入的原始值) + /// + public decimal? originalProjectNumber { get; set; } + + /// + /// 加班项目次数(加班计算后的增量值) + /// + public decimal? overtimeProjectNumber { get; set; } /// /// 来源类型(开卡/赠送/其他) diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxUpInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxUpInput.cs index eef2a87..5374891 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxUpInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxUpInput.cs @@ -51,7 +51,7 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx /// /// 项目次数 /// - public int? projectNumber { get; set; } + public decimal? projectNumber { get; set; } /// /// 是否有效 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlStatisticsOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlStatisticsOutput.cs index 58f52d6..86cfd82 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlStatisticsOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlStatisticsOutput.cs @@ -65,17 +65,17 @@ namespace NCC.Extend.Entitys.Dto.LqXmzl /// /// 消耗购买次数 /// - public int ConsumePurchaseCount { get; set; } + public decimal ConsumePurchaseCount { get; set; } /// /// 消耗赠送次数 /// - public int ConsumeGiftCount { get; set; } + public decimal ConsumeGiftCount { get; set; } /// /// 消耗体验次数 /// - public int ConsumeExperienceCount { get; set; } + public decimal ConsumeExperienceCount { get; set; } /// /// 退卡业绩 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs index 8786f9b..75272ee 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs @@ -71,7 +71,7 @@ namespace NCC.Extend.Entitys.lq_hytk_mx /// 项目次数 /// [SugarColumn(ColumnName = "F_ProjectNumber")] - public int ProjectNumber { get; set; } + public decimal ProjectNumber { get; set; } /// /// 来源类型 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_hyhk/LqXhHyhkEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_hyhk/LqXhHyhkEntity.cs index 5a91782..8c5ab50 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_hyhk/LqXhHyhkEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_hyhk/LqXhHyhkEntity.cs @@ -126,5 +126,23 @@ namespace NCC.Extend.Entitys.lq_xh_hyhk /// [SugarColumn(ColumnName = "F_CancelRemark")] public string CancelRemark { get; set; } + + /// + /// 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) + /// + [SugarColumn(ColumnName = "F_OvertimeCoefficient")] + public decimal? OvertimeCoefficient { get; set; } + + /// + /// 原始手工费(用户输入的原始值) + /// + [SugarColumn(ColumnName = "F_OriginalSgfy")] + public decimal? OriginalSgfy { get; set; } + + /// + /// 加班手工费(加班计算后的增量值) + /// + [SugarColumn(ColumnName = "F_OvertimeSgfy")] + public decimal? OvertimeSgfy { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs index 83c7d63..18c409f 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs @@ -78,6 +78,30 @@ namespace NCC.Extend.Entitys.lq_xh_jksyj public decimal? KdpxNumber { get; set; } /// + /// 原始耗卡品项次数(原始值) + /// + [SugarColumn(ColumnName = "F_OriginalKdpxNumber")] + public decimal? OriginalKdpxNumber { get; set; } + + /// + /// 加班耗卡品项次数(加班计算后的增量值) + /// + [SugarColumn(ColumnName = "F_OvertimeKdpxNumber")] + public decimal? OvertimeKdpxNumber { get; set; } + + /// + /// 原始手工费(原始值) + /// + [SugarColumn(ColumnName = "F_OriginalLaborCost")] + public decimal? OriginalLaborCost { get; set; } + + /// + /// 加班手工费(加班计算后的增量值) + /// + [SugarColumn(ColumnName = "F_OvertimeLaborCost")] + public decimal? OvertimeLaborCost { get; set; } + + /// /// 是否有效 /// [SugarColumn(ColumnName = "F_IsEffective")] diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs index cb973bd..06c074d 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs @@ -72,6 +72,30 @@ namespace NCC.Extend.Entitys.lq_xh_kjbsyj public decimal? HdpxNumber { get; set; } /// + /// 原始耗卡品相次数(原始值) + /// + [SugarColumn(ColumnName = "F_OriginalHdpxNumber")] + public decimal? OriginalHdpxNumber { get; set; } + + /// + /// 加班耗卡品相次数(加班计算后的增量值) + /// + [SugarColumn(ColumnName = "F_OvertimeHdpxNumber")] + public decimal? OvertimeHdpxNumber { get; set; } + + /// + /// 原始手工费(原始值) + /// + [SugarColumn(ColumnName = "F_OriginalLaborCost")] + public decimal? OriginalLaborCost { get; set; } + + /// + /// 加班手工费(加班计算后的增量值) + /// + [SugarColumn(ColumnName = "F_OvertimeLaborCost")] + public decimal? OvertimeLaborCost { get; set; } + + /// /// 是否有效 /// [SugarColumn(ColumnName = "F_IsEffective")] diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs index 1938185..23810eb 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs @@ -63,7 +63,19 @@ namespace NCC.Extend.Entitys.lq_xh_pxmx /// 项目次数 /// [SugarColumn(ColumnName = "F_ProjectNumber")] - public int ProjectNumber { get; set; } + public decimal ProjectNumber { get; set; } + + /// + /// 原始项目次数(用户输入的原始值) + /// + [SugarColumn(ColumnName = "F_OriginalProjectNumber")] + public decimal? OriginalProjectNumber { get; set; } + + /// + /// 加班项目次数(加班计算后的增量值) + /// + [SugarColumn(ColumnName = "F_OvertimeProjectNumber")] + public decimal? OvertimeProjectNumber { get; set; } /// /// 来源类型 diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqMdxxService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqMdxxService.cs index 2ebf5f9..ab17b91 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqMdxxService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqMdxxService.cs @@ -346,7 +346,7 @@ namespace NCC.Extend.LqMdxx var entity = await _db.Queryable().FirstAsync(p => p.Id == id); _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); //直接修改status为0 - entity.Status = StatusEnum.删除.GetHashCode(); + entity.Status = StatusEnum.无效.GetHashCode(); var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001); } diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs index 56bbc87..e54f94c 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs @@ -305,6 +305,7 @@ namespace NCC.Extend.LqXhHyhk public async Task Create([FromBody] LqXhHyhkCrInput input) { var userInfo = await _userManager.GetUserInfo(); + //首先判断当前时间是否是加班时间 var entity = input.Adapt(); entity.Id = YitIdHelper.NextId().ToString(); entity.Czry = _userManager.UserId; @@ -312,6 +313,15 @@ namespace NCC.Extend.LqXhHyhk entity.CreateTime = DateTime.Now; entity.IsEffective = StatusEnum.有效.GetHashCode(); entity.UpdateTime = DateTime.Now; + entity.OvertimeCoefficient = input.overtimeCoefficient ?? 0; + entity.OriginalSgfy = entity.Sgfy; + if (entity.OvertimeCoefficient > 0) + { + //加班手工费 = 原始手工费 * 加班系数 + entity.OvertimeSgfy = entity.OriginalSgfy * entity.OvertimeCoefficient; + //最终手工费 = 原始手工费 + 加班手工费 + entity.Sgfy = entity.OriginalSgfy + entity.OvertimeSgfy; + } try { // 开启事务 diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs index 3f157f9..685d428 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs @@ -498,7 +498,6 @@ namespace NCC.Extend.LqXmzl RefundAmount = refundData?.RefundAmount ?? 0, RefundCount = refundData?.RefundCount ?? 0 }; - result.Add(output); } @@ -691,9 +690,9 @@ namespace NCC.Extend.LqXmzl { public string ItemId { get; set; } public decimal ConsumeAmount { get; set; } - public int ConsumePurchaseCount { get; set; } - public int ConsumeGiftCount { get; set; } - public int ConsumeExperienceCount { get; set; } + public decimal ConsumePurchaseCount { get; set; } + public decimal ConsumeGiftCount { get; set; } + public decimal ConsumeExperienceCount { get; set; } } /// diff --git a/消耗功能加班需求分析.md b/消耗功能加班需求分析.md new file mode 100644 index 0000000..057ac9b --- /dev/null +++ b/消耗功能加班需求分析.md @@ -0,0 +1,209 @@ +# 消耗功能加班需求分析与设计方案 + +## 一、需求分析 + +### 核心需求 +1. **加班标识**:标识消耗单是否是加班单 +2. **加班系数**:记录加班系数(如 0.5、1、1.5 等) +3. **数据计算**:消耗单的项目数和手工费需要加上对应的系数 +4. **数据保留**:保留原始数据、加班数据、最终数据 + +### 影响范围 +- **项目数**:影响 `lq_xh_pxmx.F_ProjectNumber`(品项明细项目次数) +- **手工费**:影响 `lq_xh_hyhk.sgfy`(耗卡主表手工费用)和 `lq_xh_jksyj.F_LaborCost`(健康师业绩手工费)、`lq_xh_kjbsyj.F_LaborCost`(科技部老师业绩手工费) + +## 二、当前表结构分析 + +### 1. lq_xh_hyhk(耗卡主表) +- `xfje` - 消费金额(decimal) +- `sgfy` - 手工费用(decimal)**← 需要记录原始值、加班计算值、最终值** +- `hksj` - 耗卡时间 + +### 2. lq_xh_pxmx(耗卡品项明细表) +- `F_ProjectNumber` - 项目次数(int)**← 需要记录原始值、加班计算值、最终值** +- `F_TotalPrice` - 合计金额(decimal) +- `pxjg` - 品项价格(decimal) + +### 3. lq_xh_jksyj(耗卡健康师业绩表) +- `F_kdpxNumber` - 耗卡品项次数(decimal)**← 需要记录原始值、加班计算值、最终值** +- `F_LaborCost` - 手工费(decimal)**← 需要记录原始值、加班计算值、最终值** +- `jksyj` - 健康师业绩(decimal) + +### 4. lq_xh_kjbsyj(耗卡科技部老师业绩表) +- `F_hdpxNumber` - 耗卡品相次数(decimal)**← 需要记录原始值、加班计算值、最终值** +- `F_LaborCost` - 手工费(decimal)**← 需要记录原始值、加班计算值、最终值** +- `kjblsyj` - 科技部老师业绩(decimal) + +## 三、设计方案 + +### 方案概述 +采用 **主表标识 + 明细表计算** 的设计模式: +- 加班标识和加班系数存储在 **耗卡主表**(`lq_xh_hyhk`) +- 原始数据、加班计算后的数据、最终数据分别存储在相关表中 + +### 字段设计 + +#### 3.1 lq_xh_hyhk(耗卡主表)- 新增字段 +``` +F_OvertimeCoefficient DECIMAL(18,2) 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) +F_OriginalSgfy DECIMAL(18,2) 原始手工费(用户输入的原始值) +F_OvertimeSgfy DECIMAL(18,2) 加班手工费(加班计算后的增量值) +``` + +**说明:** +- `F_OvertimeCoefficient` 存储加班系数,用于判断是否为加班单: + - `NULL` 或 `0` → 非加班单 + - 大于 `0`(如 0.5、1、1.5)→ 加班单,系数值表示加倍的倍数 +- `F_OriginalSgfy` 存储用户输入的原始手工费 +- `F_OvertimeSgfy = F_OriginalSgfy * F_OvertimeCoefficient`(加班计算后的增量,仅当系数大于0时计算) +- `sgfy`(最终手工费)= `F_OriginalSgfy + F_OvertimeSgfy`(原始值 + 加班增量) + +#### 3.2 lq_xh_pxmx(耗卡品项明细表)- 新增字段 +``` +F_OriginalProjectNumber INT 原始项目次数(用户输入的原始值) +F_OvertimeProjectNumber DECIMAL(18,2) 加班项目次数(加班计算后的增量值) +``` + +**说明:** +- `F_OriginalProjectNumber` 存储用户输入的原始项目次数 +- `F_OvertimeProjectNumber = F_OriginalProjectNumber * F_OvertimeCoefficient`(从主表获取系数计算) +- `F_ProjectNumber`(最终项目次数)= `F_OriginalProjectNumber + F_OvertimeProjectNumber`(原始值 + 加班增量) + +#### 3.3 lq_xh_jksyj(耗卡健康师业绩表)- 新增字段 +``` +F_OriginalKdpxNumber DECIMAL(18,2) 原始耗卡品项次数(原始值) +F_OvertimeKdpxNumber DECIMAL(18,2) 加班耗卡品项次数(加班计算后的增量值) +F_OriginalLaborCost DECIMAL(18,2) 原始手工费(原始值) +F_OvertimeLaborCost DECIMAL(18,2) 加班手工费(加班计算后的增量值) +``` + +**说明:** +- `F_OriginalKdpxNumber` 存储原始耗卡品项次数 +- `F_OvertimeKdpxNumber = F_OriginalKdpxNumber * F_OvertimeCoefficient`(从主表获取系数计算) +- `F_kdpxNumber`(最终耗卡品项次数)= `F_OriginalKdpxNumber + F_OvertimeKdpxNumber` +- `F_OriginalLaborCost` 存储原始手工费 +- `F_OvertimeLaborCost = F_OriginalLaborCost * F_OvertimeCoefficient`(从主表获取系数计算) +- `F_LaborCost`(最终手工费)= `F_OriginalLaborCost + F_OvertimeLaborCost` + +#### 3.4 lq_xh_kjbsyj(耗卡科技部老师业绩表)- 新增字段 +``` +F_OriginalHdpxNumber DECIMAL(18,2) 原始耗卡品相次数(原始值) +F_OvertimeHdpxNumber DECIMAL(18,2) 加班耗卡品相次数(加班计算后的增量值) +F_OriginalLaborCost DECIMAL(18,2) 原始手工费(原始值) +F_OvertimeLaborCost DECIMAL(18,2) 加班手工费(加班计算后的增量值) +``` + +**说明:** +- `F_OriginalHdpxNumber` 存储原始耗卡品相次数 +- `F_OvertimeHdpxNumber = F_OriginalHdpxNumber * F_OvertimeCoefficient`(从主表获取系数计算) +- `F_hdpxNumber`(最终耗卡品相次数)= `F_OriginalHdpxNumber + F_OvertimeHdpxNumber` +- `F_OriginalLaborCost` 存储原始手工费 +- `F_OvertimeLaborCost = F_OriginalLaborCost * F_OvertimeCoefficient`(从主表获取系数计算) +- `F_LaborCost`(最终手工费)= `F_OriginalLaborCost + F_OvertimeLaborCost` + +## 四、数据计算逻辑 + +### 4.1 创建消耗单时的计算流程 + +**前提条件:** +- 如果用户输入加班系数(`F_OvertimeCoefficient`),且值大于 0,则视为加班单 +- 加班系数可以为 `NULL`、`0`(非加班单)或大于 `0` 的值(如 0.5、1、1.5) + +**计算步骤:** + +1. **耗卡主表(lq_xh_hyhk)** + ``` + 原始手工费(F_OriginalSgfy)= 用户输入的手工费 + 加班手工费(F_OvertimeSgfy)= F_OriginalSgfy * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) + 最终手工费(sgfy)= F_OriginalSgfy + F_OvertimeSgfy + ``` + +2. **耗卡品项明细表(lq_xh_pxmx)** + ``` + 原始项目次数(F_OriginalProjectNumber)= 用户输入的项目次数 + 加班项目次数(F_OvertimeProjectNumber)= F_OriginalProjectNumber * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) + 最终项目次数(F_ProjectNumber)= F_OriginalProjectNumber + F_OvertimeProjectNumber + ``` + +3. **健康师业绩表(lq_xh_jksyj)** + ``` + 原始耗卡品项次数(F_OriginalKdpxNumber)= 原始项目次数 + 加班耗卡品项次数(F_OvertimeKdpxNumber)= F_OriginalKdpxNumber * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) + 最终耗卡品项次数(F_kdpxNumber)= F_OriginalKdpxNumber + F_OvertimeKdpxNumber + + 原始手工费(F_OriginalLaborCost)= 该健康师的原始手工费 + 加班手工费(F_OvertimeLaborCost)= F_OriginalLaborCost * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) + 最终手工费(F_LaborCost)= F_OriginalLaborCost + F_OvertimeLaborCost + ``` + +4. **科技部老师业绩表(lq_xh_kjbsyj)** + ``` + 原始耗卡品相次数(F_OriginalHdpxNumber)= 原始项目次数 + 加班耗卡品相次数(F_OvertimeHdpxNumber)= F_OriginalHdpxNumber * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) + 最终耗卡品相次数(F_hdpxNumber)= F_OriginalHdpxNumber + F_OvertimeHdpxNumber + + 原始手工费(F_OriginalLaborCost)= 该科技部老师的原始手工费 + 加班手工费(F_OvertimeLaborCost)= F_OriginalLaborCost * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) + 最终手工费(F_LaborCost)= F_OriginalLaborCost + F_OvertimeLaborCost + ``` + +### 4.2 特殊情况处理 + +- **非加班单(F_OvertimeCoefficient IS NULL 或 F_OvertimeCoefficient = 0)**: + - 所有加班字段(`F_Overtime*`)都等于 `0` 或 `NULL` + - 最终值 = 原始值 + +- **加班系数为 0**: + - 加班增量 = 0,最终值 = 原始值(等同于非加班单) + +- **加班系数为 NULL**: + - 视为非加班单,不进行任何加班计算 + +## 五、数据查询与展示 + +### 5.1 查询时展示的数据 +- **原始数据**:所有 `F_Original*` 字段 +- **加班数据**:所有 `F_Overtime*` 字段 + `F_OvertimeCoefficient` +- **最终数据**:所有最终字段(`sgfy`、`F_ProjectNumber`、`F_kdpxNumber`、`F_LaborCost` 等) + +### 5.2 统计计算 +- 统计时可以分别统计: + - 原始数据总和 + - 加班数据总和(筛选条件:`F_OvertimeCoefficient > 0`) + - 最终数据总和 +- 查询加班单:`WHERE F_OvertimeCoefficient > 0` +- 查询非加班单:`WHERE F_OvertimeCoefficient IS NULL OR F_OvertimeCoefficient = 0` + +## 六、实施建议 + +### 6.1 数据库变更 +1. 执行 SQL 脚本添加所有新字段 +2. 为现有数据设置默认值: + - `F_OvertimeCoefficient = NULL`(所有现有数据默认为非加班) + - `F_OriginalSgfy = sgfy`(现有手工费作为原始值) + - `F_OvertimeSgfy = 0`(现有数据无加班增量) + - 类似处理其他原始值字段 + +### 6.2 代码变更 +1. **实体类(Entity)**:添加所有新字段属性 +2. **DTO 类**: + - `LqXhHyhkCrInput` - 添加 `F_OvertimeCoefficient`(加班系数)输入字段 + - `LqXhHyhkInfoOutput` - 添加加班相关输出字段(系数、原始值、加班值) + - `LqXhPxmxInfoOutput` - 添加加班相关输出字段(原始值、加班值) + - `LqXhJksyjInfoOutput` - 添加加班相关输出字段(原始值、加班值) + - `LqXhKjbsyjInfoOutput` - 添加加班相关输出字段(原始值、加班值) +3. **Service 层**: + - `Create` 方法:添加加班计算逻辑 + - `Update` 方法:添加加班计算逻辑 + - `GetInfo` 方法:返回加班相关字段 + +## 七、总结 + +本设计方案实现了: +✅ **原始数据保留**:所有原始值存储在 `F_Original*` 字段 +✅ **加班数据保留**:所有加班计算值存储在 `F_Overtime*` 字段 +✅ **最终数据展示**:最终值 = 原始值 + 加班增量 +✅ **数据可追溯**:可以查看任意时刻的原始值、加班值、最终值 +✅ **灵活扩展**:加班系数可配置,支持不同场景(0.5、1、1.5 等) +✅ **简化设计**:通过 `F_OvertimeCoefficient` 一个字段即可判断是否为加班单(NULL/0=非加班,>0=加班) + diff --git a/添加消耗功能加班字段.sql b/添加消耗功能加班字段.sql new file mode 100644 index 0000000..d692243 --- /dev/null +++ b/添加消耗功能加班字段.sql @@ -0,0 +1,102 @@ +-- ============================================ +-- 为消耗功能添加加班相关字段 +-- ============================================ +-- 说明:此脚本为消耗功能添加加班标识、加班系数以及原始值、加班值、最终值的字段 +-- 执行顺序:按照表的主从关系依次执行 + +-- ============================================ +-- 1. lq_xh_hyhk(耗卡主表) - 添加加班相关字段 +-- ============================================ +-- 说明:F_OvertimeCoefficient 为 NULL 或 0 表示非加班单,大于 0 表示加班单 +ALTER TABLE lq_xh_hyhk +ADD COLUMN F_OvertimeCoefficient DECIMAL(18,2) NULL DEFAULT NULL COMMENT '加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5)' AFTER F_CancelRemark, +ADD COLUMN F_OriginalSgfy DECIMAL(18,2) NULL COMMENT '原始手工费(用户输入的原始值)' AFTER F_OvertimeCoefficient, +ADD COLUMN F_OvertimeSgfy DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班手工费(加班计算后的增量值)' AFTER F_OriginalSgfy; + +-- 为现有数据设置默认值 +UPDATE lq_xh_hyhk +SET F_OvertimeCoefficient = NULL, + F_OriginalSgfy = COALESCE(sgfy, 0), + F_OvertimeSgfy = 0 +WHERE F_OvertimeCoefficient IS NULL; + +-- ============================================ +-- 2. lq_xh_pxmx(耗卡品项明细表) - 添加加班相关字段 +-- ============================================ +ALTER TABLE lq_xh_pxmx +ADD COLUMN F_OriginalProjectNumber DECIMAL(18,2) NULL COMMENT '原始项目次数(用户输入的原始值)' AFTER F_ProjectNumber, +ADD COLUMN F_OvertimeProjectNumber DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班项目次数(加班计算后的增量值)' AFTER F_OriginalProjectNumber; + +-- 为现有数据设置默认值 +UPDATE lq_xh_pxmx +SET F_OriginalProjectNumber = COALESCE(F_ProjectNumber, 0), + F_OvertimeProjectNumber = 0 +WHERE F_OriginalProjectNumber IS NULL; + +-- ============================================ +-- 3. lq_xh_jksyj(耗卡健康师业绩表) - 添加加班相关字段 +-- ============================================ +ALTER TABLE lq_xh_jksyj +ADD COLUMN F_OriginalKdpxNumber DECIMAL(18,2) NULL COMMENT '原始耗卡品项次数(原始值)' AFTER F_kdpxNumber, +ADD COLUMN F_OvertimeKdpxNumber DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班耗卡品项次数(加班计算后的增量值)' AFTER F_OriginalKdpxNumber, +ADD COLUMN F_OriginalLaborCost DECIMAL(18,2) NULL COMMENT '原始手工费(原始值)' AFTER F_LaborCost, +ADD COLUMN F_OvertimeLaborCost DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班手工费(加班计算后的增量值)' AFTER F_OriginalLaborCost; + +-- 为现有数据设置默认值 +UPDATE lq_xh_jksyj +SET F_OriginalKdpxNumber = COALESCE(F_kdpxNumber, 0), + F_OvertimeKdpxNumber = 0, + F_OriginalLaborCost = COALESCE(F_LaborCost, 0), + F_OvertimeLaborCost = 0 +WHERE F_OriginalKdpxNumber IS NULL; + +-- ============================================ +-- 4. lq_xh_kjbsyj(耗卡科技部老师业绩表) - 添加加班相关字段 +-- ============================================ +ALTER TABLE lq_xh_kjbsyj +ADD COLUMN F_OriginalHdpxNumber DECIMAL(18,2) NULL COMMENT '原始耗卡品相次数(原始值)' AFTER F_hdpxNumber, +ADD COLUMN F_OvertimeHdpxNumber DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班耗卡品相次数(加班计算后的增量值)' AFTER F_OriginalHdpxNumber, +ADD COLUMN F_OriginalLaborCost DECIMAL(18,2) NULL COMMENT '原始手工费(原始值)' AFTER F_LaborCost, +ADD COLUMN F_OvertimeLaborCost DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班手工费(加班计算后的增量值)' AFTER F_OriginalLaborCost; + +-- 为现有数据设置默认值 +UPDATE lq_xh_kjbsyj +SET F_OriginalHdpxNumber = COALESCE(F_hdpxNumber, 0), + F_OvertimeHdpxNumber = 0, + F_OriginalLaborCost = COALESCE(F_LaborCost, 0), + F_OvertimeLaborCost = 0 +WHERE F_OriginalHdpxNumber IS NULL; + +-- ============================================ +-- 5. 创建索引(可选,用于优化查询) +-- ============================================ +-- 为加班系数创建索引,方便查询加班单(系数大于0的记录) +CREATE INDEX idx_xh_hyhk_overtime_coefficient ON lq_xh_hyhk(F_OvertimeCoefficient); + +-- ============================================ +-- 6. 验证字段创建 +-- ============================================ +-- 验证 lq_xh_hyhk 表 +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT +-- FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_NAME = 'lq_xh_hyhk' +-- AND (COLUMN_NAME LIKE 'F_%Overtime%' OR COLUMN_NAME LIKE 'F_Original%'); + +-- 验证 lq_xh_pxmx 表 +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT +-- FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_NAME = 'lq_xh_pxmx' +-- AND (COLUMN_NAME LIKE 'F_%Overtime%' OR COLUMN_NAME LIKE 'F_Original%'); + +-- 验证 lq_xh_jksyj 表 +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT +-- FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_NAME = 'lq_xh_jksyj' +-- AND (COLUMN_NAME LIKE 'F_%Overtime%' OR COLUMN_NAME LIKE 'F_Original%'); + +-- 验证 lq_xh_kjbsyj 表 +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT +-- FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_NAME = 'lq_xh_kjbsyj' +-- AND (COLUMN_NAME LIKE 'F_%Overtime%' OR COLUMN_NAME LIKE 'F_Original%'); +