Commit fc259a33b33c8f2aff38ea3113f3acce9888cdc0
1 parent
d19ef8a5
feat: 添加消耗功能加班相关字段和退卡明细会员ID字段
- 为lq_hytk_mx表添加会员ID字段(F_MemberId) - 为消耗功能添加加班相关字段: - lq_xh_hyhk: 加班系数、原始手工费、加班手工费 - lq_xh_pxmx: 原始项目次数、加班项目次数 - lq_xh_jksyj: 原始耗卡品项次数、加班耗卡品项次数、原始手工费、加班手工费 - lq_xh_kjbsyj: 原始耗卡品相次数、加班耗卡品相次数、原始手工费、加班手工费 - 更新相关实体类和DTO类 - 将lq_xh_pxmx和lq_hytk_mx表的项目次数字段改为DECIMAL类型 - 添加消耗功能加班需求分析文档和SQL脚本
Showing
23 changed files
with
505 additions
and
17 deletions
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxCrInput.cs
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxInfoOutput.cs
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxUpInput.cs
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs
| ... | ... | @@ -80,6 +80,16 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk |
| 80 | 80 | public string signatureFile { get; set; } |
| 81 | 81 | |
| 82 | 82 | /// <summary> |
| 83 | + /// 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) | |
| 84 | + /// </summary> | |
| 85 | + public decimal? overtimeCoefficient { get; set; } | |
| 86 | + | |
| 87 | + /// <summary> | |
| 88 | + /// 原始手工费(用户输入的原始值) | |
| 89 | + /// </summary> | |
| 90 | + public decimal? originalSgfy { get; set; } | |
| 91 | + | |
| 92 | + /// <summary> | |
| 83 | 93 | /// 耗卡_品项明细 |
| 84 | 94 | /// </summary> |
| 85 | 95 | public List<LqXhPxmxCrInput> lqXhPxmxList { get; set; } | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkInfoOutput.cs
| ... | ... | @@ -112,6 +112,21 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk |
| 112 | 112 | public string cancelRemark { get; set; } |
| 113 | 113 | |
| 114 | 114 | /// <summary> |
| 115 | + /// 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) | |
| 116 | + /// </summary> | |
| 117 | + public decimal? overtimeCoefficient { get; set; } | |
| 118 | + | |
| 119 | + /// <summary> | |
| 120 | + /// 原始手工费(用户输入的原始值) | |
| 121 | + /// </summary> | |
| 122 | + public decimal? originalSgfy { get; set; } | |
| 123 | + | |
| 124 | + /// <summary> | |
| 125 | + /// 加班手工费(加班计算后的增量值) | |
| 126 | + /// </summary> | |
| 127 | + public decimal? overtimeSgfy { get; set; } | |
| 128 | + | |
| 129 | + /// <summary> | |
| 115 | 130 | /// 健康师业绩 |
| 116 | 131 | /// </summary> |
| 117 | 132 | public List<LqXhJksyjInfoOutput> lqXhJksyjList { get; set; } | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs
| ... | ... | @@ -95,5 +95,20 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk |
| 95 | 95 | /// </summary> |
| 96 | 96 | public int isEffective { get; set; } |
| 97 | 97 | |
| 98 | + /// <summary> | |
| 99 | + /// 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) | |
| 100 | + /// </summary> | |
| 101 | + public decimal? overtimeCoefficient { get; set; } | |
| 102 | + | |
| 103 | + /// <summary> | |
| 104 | + /// 原始手工费(用户输入的原始值) | |
| 105 | + /// </summary> | |
| 106 | + public decimal? originalSgfy { get; set; } | |
| 107 | + | |
| 108 | + /// <summary> | |
| 109 | + /// 加班手工费(加班计算后的增量值) | |
| 110 | + /// </summary> | |
| 111 | + public decimal? overtimeSgfy { get; set; } | |
| 112 | + | |
| 98 | 113 | } |
| 99 | 114 | } | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkMemberCardUsageOutput.cs
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhJksyj/LqXhJksyjInfoOutput.cs
| ... | ... | @@ -68,6 +68,26 @@ namespace NCC.Extend.Entitys.Dto.LqXhJksyj |
| 68 | 68 | public decimal? kdpxNumber { get; set; } |
| 69 | 69 | |
| 70 | 70 | /// <summary> |
| 71 | + /// 原始耗卡品项次数(原始值) | |
| 72 | + /// </summary> | |
| 73 | + public decimal? originalKdpxNumber { get; set; } | |
| 74 | + | |
| 75 | + /// <summary> | |
| 76 | + /// 加班耗卡品项次数(加班计算后的增量值) | |
| 77 | + /// </summary> | |
| 78 | + public decimal? overtimeKdpxNumber { get; set; } | |
| 79 | + | |
| 80 | + /// <summary> | |
| 81 | + /// 原始手工费(原始值) | |
| 82 | + /// </summary> | |
| 83 | + public decimal? originalLaborCost { get; set; } | |
| 84 | + | |
| 85 | + /// <summary> | |
| 86 | + /// 加班手工费(加班计算后的增量值) | |
| 87 | + /// </summary> | |
| 88 | + public decimal? overtimeLaborCost { get; set; } | |
| 89 | + | |
| 90 | + /// <summary> | |
| 71 | 91 | /// 会员id |
| 72 | 92 | /// </summary> |
| 73 | 93 | public string memberId { get; set; } | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhKjbsyj/LqXhKjbsyjInfoOutput.cs
| ... | ... | @@ -56,5 +56,25 @@ namespace NCC.Extend.Entitys.Dto.LqXhKjbsyj |
| 56 | 56 | /// 耗卡品相次数 |
| 57 | 57 | /// </summary> |
| 58 | 58 | public decimal? hdpxNumber { get; set; } |
| 59 | + | |
| 60 | + /// <summary> | |
| 61 | + /// 原始耗卡品相次数(原始值) | |
| 62 | + /// </summary> | |
| 63 | + public decimal? originalHdpxNumber { get; set; } | |
| 64 | + | |
| 65 | + /// <summary> | |
| 66 | + /// 加班耗卡品相次数(加班计算后的增量值) | |
| 67 | + /// </summary> | |
| 68 | + public decimal? overtimeHdpxNumber { get; set; } | |
| 69 | + | |
| 70 | + /// <summary> | |
| 71 | + /// 原始手工费(原始值) | |
| 72 | + /// </summary> | |
| 73 | + public decimal? originalLaborCost { get; set; } | |
| 74 | + | |
| 75 | + /// <summary> | |
| 76 | + /// 加班手工费(加班计算后的增量值) | |
| 77 | + /// </summary> | |
| 78 | + public decimal? overtimeLaborCost { get; set; } | |
| 59 | 79 | } |
| 60 | 80 | } |
| 61 | 81 | \ No newline at end of file | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxInfoOutput.cs
| ... | ... | @@ -53,7 +53,17 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx |
| 53 | 53 | /// <summary> |
| 54 | 54 | /// 项目次数 |
| 55 | 55 | /// </summary> |
| 56 | - public int? projectNumber { get; set; } | |
| 56 | + public decimal? projectNumber { get; set; } | |
| 57 | + | |
| 58 | + /// <summary> | |
| 59 | + /// 原始项目次数(用户输入的原始值) | |
| 60 | + /// </summary> | |
| 61 | + public decimal? originalProjectNumber { get; set; } | |
| 62 | + | |
| 63 | + /// <summary> | |
| 64 | + /// 加班项目次数(加班计算后的增量值) | |
| 65 | + /// </summary> | |
| 66 | + public decimal? overtimeProjectNumber { get; set; } | |
| 57 | 67 | |
| 58 | 68 | /// <summary> |
| 59 | 69 | /// 来源类型(开卡/赠送/其他) | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxUpInput.cs
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlStatisticsOutput.cs
| ... | ... | @@ -65,17 +65,17 @@ namespace NCC.Extend.Entitys.Dto.LqXmzl |
| 65 | 65 | /// <summary> |
| 66 | 66 | /// 消耗购买次数 |
| 67 | 67 | /// </summary> |
| 68 | - public int ConsumePurchaseCount { get; set; } | |
| 68 | + public decimal ConsumePurchaseCount { get; set; } | |
| 69 | 69 | |
| 70 | 70 | /// <summary> |
| 71 | 71 | /// 消耗赠送次数 |
| 72 | 72 | /// </summary> |
| 73 | - public int ConsumeGiftCount { get; set; } | |
| 73 | + public decimal ConsumeGiftCount { get; set; } | |
| 74 | 74 | |
| 75 | 75 | /// <summary> |
| 76 | 76 | /// 消耗体验次数 |
| 77 | 77 | /// </summary> |
| 78 | - public int ConsumeExperienceCount { get; set; } | |
| 78 | + public decimal ConsumeExperienceCount { get; set; } | |
| 79 | 79 | |
| 80 | 80 | /// <summary> |
| 81 | 81 | /// 退卡业绩 | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_hyhk/LqXhHyhkEntity.cs
| ... | ... | @@ -126,5 +126,23 @@ namespace NCC.Extend.Entitys.lq_xh_hyhk |
| 126 | 126 | /// </summary> |
| 127 | 127 | [SugarColumn(ColumnName = "F_CancelRemark")] |
| 128 | 128 | public string CancelRemark { get; set; } |
| 129 | + | |
| 130 | + /// <summary> | |
| 131 | + /// 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) | |
| 132 | + /// </summary> | |
| 133 | + [SugarColumn(ColumnName = "F_OvertimeCoefficient")] | |
| 134 | + public decimal? OvertimeCoefficient { get; set; } | |
| 135 | + | |
| 136 | + /// <summary> | |
| 137 | + /// 原始手工费(用户输入的原始值) | |
| 138 | + /// </summary> | |
| 139 | + [SugarColumn(ColumnName = "F_OriginalSgfy")] | |
| 140 | + public decimal? OriginalSgfy { get; set; } | |
| 141 | + | |
| 142 | + /// <summary> | |
| 143 | + /// 加班手工费(加班计算后的增量值) | |
| 144 | + /// </summary> | |
| 145 | + [SugarColumn(ColumnName = "F_OvertimeSgfy")] | |
| 146 | + public decimal? OvertimeSgfy { get; set; } | |
| 129 | 147 | } |
| 130 | 148 | } | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs
| ... | ... | @@ -78,6 +78,30 @@ namespace NCC.Extend.Entitys.lq_xh_jksyj |
| 78 | 78 | public decimal? KdpxNumber { get; set; } |
| 79 | 79 | |
| 80 | 80 | /// <summary> |
| 81 | + /// 原始耗卡品项次数(原始值) | |
| 82 | + /// </summary> | |
| 83 | + [SugarColumn(ColumnName = "F_OriginalKdpxNumber")] | |
| 84 | + public decimal? OriginalKdpxNumber { get; set; } | |
| 85 | + | |
| 86 | + /// <summary> | |
| 87 | + /// 加班耗卡品项次数(加班计算后的增量值) | |
| 88 | + /// </summary> | |
| 89 | + [SugarColumn(ColumnName = "F_OvertimeKdpxNumber")] | |
| 90 | + public decimal? OvertimeKdpxNumber { get; set; } | |
| 91 | + | |
| 92 | + /// <summary> | |
| 93 | + /// 原始手工费(原始值) | |
| 94 | + /// </summary> | |
| 95 | + [SugarColumn(ColumnName = "F_OriginalLaborCost")] | |
| 96 | + public decimal? OriginalLaborCost { get; set; } | |
| 97 | + | |
| 98 | + /// <summary> | |
| 99 | + /// 加班手工费(加班计算后的增量值) | |
| 100 | + /// </summary> | |
| 101 | + [SugarColumn(ColumnName = "F_OvertimeLaborCost")] | |
| 102 | + public decimal? OvertimeLaborCost { get; set; } | |
| 103 | + | |
| 104 | + /// <summary> | |
| 81 | 105 | /// 是否有效 |
| 82 | 106 | /// </summary> |
| 83 | 107 | [SugarColumn(ColumnName = "F_IsEffective")] | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs
| ... | ... | @@ -72,6 +72,30 @@ namespace NCC.Extend.Entitys.lq_xh_kjbsyj |
| 72 | 72 | public decimal? HdpxNumber { get; set; } |
| 73 | 73 | |
| 74 | 74 | /// <summary> |
| 75 | + /// 原始耗卡品相次数(原始值) | |
| 76 | + /// </summary> | |
| 77 | + [SugarColumn(ColumnName = "F_OriginalHdpxNumber")] | |
| 78 | + public decimal? OriginalHdpxNumber { get; set; } | |
| 79 | + | |
| 80 | + /// <summary> | |
| 81 | + /// 加班耗卡品相次数(加班计算后的增量值) | |
| 82 | + /// </summary> | |
| 83 | + [SugarColumn(ColumnName = "F_OvertimeHdpxNumber")] | |
| 84 | + public decimal? OvertimeHdpxNumber { get; set; } | |
| 85 | + | |
| 86 | + /// <summary> | |
| 87 | + /// 原始手工费(原始值) | |
| 88 | + /// </summary> | |
| 89 | + [SugarColumn(ColumnName = "F_OriginalLaborCost")] | |
| 90 | + public decimal? OriginalLaborCost { get; set; } | |
| 91 | + | |
| 92 | + /// <summary> | |
| 93 | + /// 加班手工费(加班计算后的增量值) | |
| 94 | + /// </summary> | |
| 95 | + [SugarColumn(ColumnName = "F_OvertimeLaborCost")] | |
| 96 | + public decimal? OvertimeLaborCost { get; set; } | |
| 97 | + | |
| 98 | + /// <summary> | |
| 75 | 99 | /// 是否有效 |
| 76 | 100 | /// </summary> |
| 77 | 101 | [SugarColumn(ColumnName = "F_IsEffective")] | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs
| ... | ... | @@ -63,7 +63,19 @@ namespace NCC.Extend.Entitys.lq_xh_pxmx |
| 63 | 63 | /// 项目次数 |
| 64 | 64 | /// </summary> |
| 65 | 65 | [SugarColumn(ColumnName = "F_ProjectNumber")] |
| 66 | - public int ProjectNumber { get; set; } | |
| 66 | + public decimal ProjectNumber { get; set; } | |
| 67 | + | |
| 68 | + /// <summary> | |
| 69 | + /// 原始项目次数(用户输入的原始值) | |
| 70 | + /// </summary> | |
| 71 | + [SugarColumn(ColumnName = "F_OriginalProjectNumber")] | |
| 72 | + public decimal? OriginalProjectNumber { get; set; } | |
| 73 | + | |
| 74 | + /// <summary> | |
| 75 | + /// 加班项目次数(加班计算后的增量值) | |
| 76 | + /// </summary> | |
| 77 | + [SugarColumn(ColumnName = "F_OvertimeProjectNumber")] | |
| 78 | + public decimal? OvertimeProjectNumber { get; set; } | |
| 67 | 79 | |
| 68 | 80 | /// <summary> |
| 69 | 81 | /// 来源类型 | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend/LqMdxxService.cs
| ... | ... | @@ -346,7 +346,7 @@ namespace NCC.Extend.LqMdxx |
| 346 | 346 | var entity = await _db.Queryable<LqMdxxEntity>().FirstAsync(p => p.Id == id); |
| 347 | 347 | _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); |
| 348 | 348 | //直接修改status为0 |
| 349 | - entity.Status = StatusEnum.删除.GetHashCode(); | |
| 349 | + entity.Status = StatusEnum.无效.GetHashCode(); | |
| 350 | 350 | var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); |
| 351 | 351 | if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001); |
| 352 | 352 | } | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
| ... | ... | @@ -305,6 +305,7 @@ namespace NCC.Extend.LqXhHyhk |
| 305 | 305 | public async Task Create([FromBody] LqXhHyhkCrInput input) |
| 306 | 306 | { |
| 307 | 307 | var userInfo = await _userManager.GetUserInfo(); |
| 308 | + //首先判断当前时间是否是加班时间 | |
| 308 | 309 | var entity = input.Adapt<LqXhHyhkEntity>(); |
| 309 | 310 | entity.Id = YitIdHelper.NextId().ToString(); |
| 310 | 311 | entity.Czry = _userManager.UserId; |
| ... | ... | @@ -312,6 +313,15 @@ namespace NCC.Extend.LqXhHyhk |
| 312 | 313 | entity.CreateTime = DateTime.Now; |
| 313 | 314 | entity.IsEffective = StatusEnum.有效.GetHashCode(); |
| 314 | 315 | entity.UpdateTime = DateTime.Now; |
| 316 | + entity.OvertimeCoefficient = input.overtimeCoefficient ?? 0; | |
| 317 | + entity.OriginalSgfy = entity.Sgfy; | |
| 318 | + if (entity.OvertimeCoefficient > 0) | |
| 319 | + { | |
| 320 | + //加班手工费 = 原始手工费 * 加班系数 | |
| 321 | + entity.OvertimeSgfy = entity.OriginalSgfy * entity.OvertimeCoefficient; | |
| 322 | + //最终手工费 = 原始手工费 + 加班手工费 | |
| 323 | + entity.Sgfy = entity.OriginalSgfy + entity.OvertimeSgfy; | |
| 324 | + } | |
| 315 | 325 | try |
| 316 | 326 | { |
| 317 | 327 | // 开启事务 | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs
| ... | ... | @@ -498,7 +498,6 @@ namespace NCC.Extend.LqXmzl |
| 498 | 498 | RefundAmount = refundData?.RefundAmount ?? 0, |
| 499 | 499 | RefundCount = refundData?.RefundCount ?? 0 |
| 500 | 500 | }; |
| 501 | - | |
| 502 | 501 | result.Add(output); |
| 503 | 502 | } |
| 504 | 503 | |
| ... | ... | @@ -691,9 +690,9 @@ namespace NCC.Extend.LqXmzl |
| 691 | 690 | { |
| 692 | 691 | public string ItemId { get; set; } |
| 693 | 692 | public decimal ConsumeAmount { get; set; } |
| 694 | - public int ConsumePurchaseCount { get; set; } | |
| 695 | - public int ConsumeGiftCount { get; set; } | |
| 696 | - public int ConsumeExperienceCount { get; set; } | |
| 693 | + public decimal ConsumePurchaseCount { get; set; } | |
| 694 | + public decimal ConsumeGiftCount { get; set; } | |
| 695 | + public decimal ConsumeExperienceCount { get; set; } | |
| 697 | 696 | } |
| 698 | 697 | |
| 699 | 698 | /// <summary> | ... | ... |
消耗功能加班需求分析.md
0 → 100644
| 1 | +# 消耗功能加班需求分析与设计方案 | |
| 2 | + | |
| 3 | +## 一、需求分析 | |
| 4 | + | |
| 5 | +### 核心需求 | |
| 6 | +1. **加班标识**:标识消耗单是否是加班单 | |
| 7 | +2. **加班系数**:记录加班系数(如 0.5、1、1.5 等) | |
| 8 | +3. **数据计算**:消耗单的项目数和手工费需要加上对应的系数 | |
| 9 | +4. **数据保留**:保留原始数据、加班数据、最终数据 | |
| 10 | + | |
| 11 | +### 影响范围 | |
| 12 | +- **项目数**:影响 `lq_xh_pxmx.F_ProjectNumber`(品项明细项目次数) | |
| 13 | +- **手工费**:影响 `lq_xh_hyhk.sgfy`(耗卡主表手工费用)和 `lq_xh_jksyj.F_LaborCost`(健康师业绩手工费)、`lq_xh_kjbsyj.F_LaborCost`(科技部老师业绩手工费) | |
| 14 | + | |
| 15 | +## 二、当前表结构分析 | |
| 16 | + | |
| 17 | +### 1. lq_xh_hyhk(耗卡主表) | |
| 18 | +- `xfje` - 消费金额(decimal) | |
| 19 | +- `sgfy` - 手工费用(decimal)**← 需要记录原始值、加班计算值、最终值** | |
| 20 | +- `hksj` - 耗卡时间 | |
| 21 | + | |
| 22 | +### 2. lq_xh_pxmx(耗卡品项明细表) | |
| 23 | +- `F_ProjectNumber` - 项目次数(int)**← 需要记录原始值、加班计算值、最终值** | |
| 24 | +- `F_TotalPrice` - 合计金额(decimal) | |
| 25 | +- `pxjg` - 品项价格(decimal) | |
| 26 | + | |
| 27 | +### 3. lq_xh_jksyj(耗卡健康师业绩表) | |
| 28 | +- `F_kdpxNumber` - 耗卡品项次数(decimal)**← 需要记录原始值、加班计算值、最终值** | |
| 29 | +- `F_LaborCost` - 手工费(decimal)**← 需要记录原始值、加班计算值、最终值** | |
| 30 | +- `jksyj` - 健康师业绩(decimal) | |
| 31 | + | |
| 32 | +### 4. lq_xh_kjbsyj(耗卡科技部老师业绩表) | |
| 33 | +- `F_hdpxNumber` - 耗卡品相次数(decimal)**← 需要记录原始值、加班计算值、最终值** | |
| 34 | +- `F_LaborCost` - 手工费(decimal)**← 需要记录原始值、加班计算值、最终值** | |
| 35 | +- `kjblsyj` - 科技部老师业绩(decimal) | |
| 36 | + | |
| 37 | +## 三、设计方案 | |
| 38 | + | |
| 39 | +### 方案概述 | |
| 40 | +采用 **主表标识 + 明细表计算** 的设计模式: | |
| 41 | +- 加班标识和加班系数存储在 **耗卡主表**(`lq_xh_hyhk`) | |
| 42 | +- 原始数据、加班计算后的数据、最终数据分别存储在相关表中 | |
| 43 | + | |
| 44 | +### 字段设计 | |
| 45 | + | |
| 46 | +#### 3.1 lq_xh_hyhk(耗卡主表)- 新增字段 | |
| 47 | +``` | |
| 48 | +F_OvertimeCoefficient DECIMAL(18,2) 加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5) | |
| 49 | +F_OriginalSgfy DECIMAL(18,2) 原始手工费(用户输入的原始值) | |
| 50 | +F_OvertimeSgfy DECIMAL(18,2) 加班手工费(加班计算后的增量值) | |
| 51 | +``` | |
| 52 | + | |
| 53 | +**说明:** | |
| 54 | +- `F_OvertimeCoefficient` 存储加班系数,用于判断是否为加班单: | |
| 55 | + - `NULL` 或 `0` → 非加班单 | |
| 56 | + - 大于 `0`(如 0.5、1、1.5)→ 加班单,系数值表示加倍的倍数 | |
| 57 | +- `F_OriginalSgfy` 存储用户输入的原始手工费 | |
| 58 | +- `F_OvertimeSgfy = F_OriginalSgfy * F_OvertimeCoefficient`(加班计算后的增量,仅当系数大于0时计算) | |
| 59 | +- `sgfy`(最终手工费)= `F_OriginalSgfy + F_OvertimeSgfy`(原始值 + 加班增量) | |
| 60 | + | |
| 61 | +#### 3.2 lq_xh_pxmx(耗卡品项明细表)- 新增字段 | |
| 62 | +``` | |
| 63 | +F_OriginalProjectNumber INT 原始项目次数(用户输入的原始值) | |
| 64 | +F_OvertimeProjectNumber DECIMAL(18,2) 加班项目次数(加班计算后的增量值) | |
| 65 | +``` | |
| 66 | + | |
| 67 | +**说明:** | |
| 68 | +- `F_OriginalProjectNumber` 存储用户输入的原始项目次数 | |
| 69 | +- `F_OvertimeProjectNumber = F_OriginalProjectNumber * F_OvertimeCoefficient`(从主表获取系数计算) | |
| 70 | +- `F_ProjectNumber`(最终项目次数)= `F_OriginalProjectNumber + F_OvertimeProjectNumber`(原始值 + 加班增量) | |
| 71 | + | |
| 72 | +#### 3.3 lq_xh_jksyj(耗卡健康师业绩表)- 新增字段 | |
| 73 | +``` | |
| 74 | +F_OriginalKdpxNumber DECIMAL(18,2) 原始耗卡品项次数(原始值) | |
| 75 | +F_OvertimeKdpxNumber DECIMAL(18,2) 加班耗卡品项次数(加班计算后的增量值) | |
| 76 | +F_OriginalLaborCost DECIMAL(18,2) 原始手工费(原始值) | |
| 77 | +F_OvertimeLaborCost DECIMAL(18,2) 加班手工费(加班计算后的增量值) | |
| 78 | +``` | |
| 79 | + | |
| 80 | +**说明:** | |
| 81 | +- `F_OriginalKdpxNumber` 存储原始耗卡品项次数 | |
| 82 | +- `F_OvertimeKdpxNumber = F_OriginalKdpxNumber * F_OvertimeCoefficient`(从主表获取系数计算) | |
| 83 | +- `F_kdpxNumber`(最终耗卡品项次数)= `F_OriginalKdpxNumber + F_OvertimeKdpxNumber` | |
| 84 | +- `F_OriginalLaborCost` 存储原始手工费 | |
| 85 | +- `F_OvertimeLaborCost = F_OriginalLaborCost * F_OvertimeCoefficient`(从主表获取系数计算) | |
| 86 | +- `F_LaborCost`(最终手工费)= `F_OriginalLaborCost + F_OvertimeLaborCost` | |
| 87 | + | |
| 88 | +#### 3.4 lq_xh_kjbsyj(耗卡科技部老师业绩表)- 新增字段 | |
| 89 | +``` | |
| 90 | +F_OriginalHdpxNumber DECIMAL(18,2) 原始耗卡品相次数(原始值) | |
| 91 | +F_OvertimeHdpxNumber DECIMAL(18,2) 加班耗卡品相次数(加班计算后的增量值) | |
| 92 | +F_OriginalLaborCost DECIMAL(18,2) 原始手工费(原始值) | |
| 93 | +F_OvertimeLaborCost DECIMAL(18,2) 加班手工费(加班计算后的增量值) | |
| 94 | +``` | |
| 95 | + | |
| 96 | +**说明:** | |
| 97 | +- `F_OriginalHdpxNumber` 存储原始耗卡品相次数 | |
| 98 | +- `F_OvertimeHdpxNumber = F_OriginalHdpxNumber * F_OvertimeCoefficient`(从主表获取系数计算) | |
| 99 | +- `F_hdpxNumber`(最终耗卡品相次数)= `F_OriginalHdpxNumber + F_OvertimeHdpxNumber` | |
| 100 | +- `F_OriginalLaborCost` 存储原始手工费 | |
| 101 | +- `F_OvertimeLaborCost = F_OriginalLaborCost * F_OvertimeCoefficient`(从主表获取系数计算) | |
| 102 | +- `F_LaborCost`(最终手工费)= `F_OriginalLaborCost + F_OvertimeLaborCost` | |
| 103 | + | |
| 104 | +## 四、数据计算逻辑 | |
| 105 | + | |
| 106 | +### 4.1 创建消耗单时的计算流程 | |
| 107 | + | |
| 108 | +**前提条件:** | |
| 109 | +- 如果用户输入加班系数(`F_OvertimeCoefficient`),且值大于 0,则视为加班单 | |
| 110 | +- 加班系数可以为 `NULL`、`0`(非加班单)或大于 `0` 的值(如 0.5、1、1.5) | |
| 111 | + | |
| 112 | +**计算步骤:** | |
| 113 | + | |
| 114 | +1. **耗卡主表(lq_xh_hyhk)** | |
| 115 | + ``` | |
| 116 | + 原始手工费(F_OriginalSgfy)= 用户输入的手工费 | |
| 117 | + 加班手工费(F_OvertimeSgfy)= F_OriginalSgfy * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) | |
| 118 | + 最终手工费(sgfy)= F_OriginalSgfy + F_OvertimeSgfy | |
| 119 | + ``` | |
| 120 | + | |
| 121 | +2. **耗卡品项明细表(lq_xh_pxmx)** | |
| 122 | + ``` | |
| 123 | + 原始项目次数(F_OriginalProjectNumber)= 用户输入的项目次数 | |
| 124 | + 加班项目次数(F_OvertimeProjectNumber)= F_OriginalProjectNumber * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) | |
| 125 | + 最终项目次数(F_ProjectNumber)= F_OriginalProjectNumber + F_OvertimeProjectNumber | |
| 126 | + ``` | |
| 127 | + | |
| 128 | +3. **健康师业绩表(lq_xh_jksyj)** | |
| 129 | + ``` | |
| 130 | + 原始耗卡品项次数(F_OriginalKdpxNumber)= 原始项目次数 | |
| 131 | + 加班耗卡品项次数(F_OvertimeKdpxNumber)= F_OriginalKdpxNumber * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) | |
| 132 | + 最终耗卡品项次数(F_kdpxNumber)= F_OriginalKdpxNumber + F_OvertimeKdpxNumber | |
| 133 | + | |
| 134 | + 原始手工费(F_OriginalLaborCost)= 该健康师的原始手工费 | |
| 135 | + 加班手工费(F_OvertimeLaborCost)= F_OriginalLaborCost * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) | |
| 136 | + 最终手工费(F_LaborCost)= F_OriginalLaborCost + F_OvertimeLaborCost | |
| 137 | + ``` | |
| 138 | + | |
| 139 | +4. **科技部老师业绩表(lq_xh_kjbsyj)** | |
| 140 | + ``` | |
| 141 | + 原始耗卡品相次数(F_OriginalHdpxNumber)= 原始项目次数 | |
| 142 | + 加班耗卡品相次数(F_OvertimeHdpxNumber)= F_OriginalHdpxNumber * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) | |
| 143 | + 最终耗卡品相次数(F_hdpxNumber)= F_OriginalHdpxNumber + F_OvertimeHdpxNumber | |
| 144 | + | |
| 145 | + 原始手工费(F_OriginalLaborCost)= 该科技部老师的原始手工费 | |
| 146 | + 加班手工费(F_OvertimeLaborCost)= F_OriginalLaborCost * F_OvertimeCoefficient(如果 F_OvertimeCoefficient > 0) | |
| 147 | + 最终手工费(F_LaborCost)= F_OriginalLaborCost + F_OvertimeLaborCost | |
| 148 | + ``` | |
| 149 | + | |
| 150 | +### 4.2 特殊情况处理 | |
| 151 | + | |
| 152 | +- **非加班单(F_OvertimeCoefficient IS NULL 或 F_OvertimeCoefficient = 0)**: | |
| 153 | + - 所有加班字段(`F_Overtime*`)都等于 `0` 或 `NULL` | |
| 154 | + - 最终值 = 原始值 | |
| 155 | + | |
| 156 | +- **加班系数为 0**: | |
| 157 | + - 加班增量 = 0,最终值 = 原始值(等同于非加班单) | |
| 158 | + | |
| 159 | +- **加班系数为 NULL**: | |
| 160 | + - 视为非加班单,不进行任何加班计算 | |
| 161 | + | |
| 162 | +## 五、数据查询与展示 | |
| 163 | + | |
| 164 | +### 5.1 查询时展示的数据 | |
| 165 | +- **原始数据**:所有 `F_Original*` 字段 | |
| 166 | +- **加班数据**:所有 `F_Overtime*` 字段 + `F_OvertimeCoefficient` | |
| 167 | +- **最终数据**:所有最终字段(`sgfy`、`F_ProjectNumber`、`F_kdpxNumber`、`F_LaborCost` 等) | |
| 168 | + | |
| 169 | +### 5.2 统计计算 | |
| 170 | +- 统计时可以分别统计: | |
| 171 | + - 原始数据总和 | |
| 172 | + - 加班数据总和(筛选条件:`F_OvertimeCoefficient > 0`) | |
| 173 | + - 最终数据总和 | |
| 174 | +- 查询加班单:`WHERE F_OvertimeCoefficient > 0` | |
| 175 | +- 查询非加班单:`WHERE F_OvertimeCoefficient IS NULL OR F_OvertimeCoefficient = 0` | |
| 176 | + | |
| 177 | +## 六、实施建议 | |
| 178 | + | |
| 179 | +### 6.1 数据库变更 | |
| 180 | +1. 执行 SQL 脚本添加所有新字段 | |
| 181 | +2. 为现有数据设置默认值: | |
| 182 | + - `F_OvertimeCoefficient = NULL`(所有现有数据默认为非加班) | |
| 183 | + - `F_OriginalSgfy = sgfy`(现有手工费作为原始值) | |
| 184 | + - `F_OvertimeSgfy = 0`(现有数据无加班增量) | |
| 185 | + - 类似处理其他原始值字段 | |
| 186 | + | |
| 187 | +### 6.2 代码变更 | |
| 188 | +1. **实体类(Entity)**:添加所有新字段属性 | |
| 189 | +2. **DTO 类**: | |
| 190 | + - `LqXhHyhkCrInput` - 添加 `F_OvertimeCoefficient`(加班系数)输入字段 | |
| 191 | + - `LqXhHyhkInfoOutput` - 添加加班相关输出字段(系数、原始值、加班值) | |
| 192 | + - `LqXhPxmxInfoOutput` - 添加加班相关输出字段(原始值、加班值) | |
| 193 | + - `LqXhJksyjInfoOutput` - 添加加班相关输出字段(原始值、加班值) | |
| 194 | + - `LqXhKjbsyjInfoOutput` - 添加加班相关输出字段(原始值、加班值) | |
| 195 | +3. **Service 层**: | |
| 196 | + - `Create` 方法:添加加班计算逻辑 | |
| 197 | + - `Update` 方法:添加加班计算逻辑 | |
| 198 | + - `GetInfo` 方法:返回加班相关字段 | |
| 199 | + | |
| 200 | +## 七、总结 | |
| 201 | + | |
| 202 | +本设计方案实现了: | |
| 203 | +✅ **原始数据保留**:所有原始值存储在 `F_Original*` 字段 | |
| 204 | +✅ **加班数据保留**:所有加班计算值存储在 `F_Overtime*` 字段 | |
| 205 | +✅ **最终数据展示**:最终值 = 原始值 + 加班增量 | |
| 206 | +✅ **数据可追溯**:可以查看任意时刻的原始值、加班值、最终值 | |
| 207 | +✅ **灵活扩展**:加班系数可配置,支持不同场景(0.5、1、1.5 等) | |
| 208 | +✅ **简化设计**:通过 `F_OvertimeCoefficient` 一个字段即可判断是否为加班单(NULL/0=非加班,>0=加班) | |
| 209 | + | ... | ... |
添加消耗功能加班字段.sql
0 → 100644
| 1 | +-- ============================================ | |
| 2 | +-- 为消耗功能添加加班相关字段 | |
| 3 | +-- ============================================ | |
| 4 | +-- 说明:此脚本为消耗功能添加加班标识、加班系数以及原始值、加班值、最终值的字段 | |
| 5 | +-- 执行顺序:按照表的主从关系依次执行 | |
| 6 | + | |
| 7 | +-- ============================================ | |
| 8 | +-- 1. lq_xh_hyhk(耗卡主表) - 添加加班相关字段 | |
| 9 | +-- ============================================ | |
| 10 | +-- 说明:F_OvertimeCoefficient 为 NULL 或 0 表示非加班单,大于 0 表示加班单 | |
| 11 | +ALTER TABLE lq_xh_hyhk | |
| 12 | +ADD COLUMN F_OvertimeCoefficient DECIMAL(18,2) NULL DEFAULT NULL COMMENT '加班系数(NULL或0表示非加班单,大于0表示加班单,如 0.5、1、1.5)' AFTER F_CancelRemark, | |
| 13 | +ADD COLUMN F_OriginalSgfy DECIMAL(18,2) NULL COMMENT '原始手工费(用户输入的原始值)' AFTER F_OvertimeCoefficient, | |
| 14 | +ADD COLUMN F_OvertimeSgfy DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班手工费(加班计算后的增量值)' AFTER F_OriginalSgfy; | |
| 15 | + | |
| 16 | +-- 为现有数据设置默认值 | |
| 17 | +UPDATE lq_xh_hyhk | |
| 18 | +SET F_OvertimeCoefficient = NULL, | |
| 19 | + F_OriginalSgfy = COALESCE(sgfy, 0), | |
| 20 | + F_OvertimeSgfy = 0 | |
| 21 | +WHERE F_OvertimeCoefficient IS NULL; | |
| 22 | + | |
| 23 | +-- ============================================ | |
| 24 | +-- 2. lq_xh_pxmx(耗卡品项明细表) - 添加加班相关字段 | |
| 25 | +-- ============================================ | |
| 26 | +ALTER TABLE lq_xh_pxmx | |
| 27 | +ADD COLUMN F_OriginalProjectNumber DECIMAL(18,2) NULL COMMENT '原始项目次数(用户输入的原始值)' AFTER F_ProjectNumber, | |
| 28 | +ADD COLUMN F_OvertimeProjectNumber DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班项目次数(加班计算后的增量值)' AFTER F_OriginalProjectNumber; | |
| 29 | + | |
| 30 | +-- 为现有数据设置默认值 | |
| 31 | +UPDATE lq_xh_pxmx | |
| 32 | +SET F_OriginalProjectNumber = COALESCE(F_ProjectNumber, 0), | |
| 33 | + F_OvertimeProjectNumber = 0 | |
| 34 | +WHERE F_OriginalProjectNumber IS NULL; | |
| 35 | + | |
| 36 | +-- ============================================ | |
| 37 | +-- 3. lq_xh_jksyj(耗卡健康师业绩表) - 添加加班相关字段 | |
| 38 | +-- ============================================ | |
| 39 | +ALTER TABLE lq_xh_jksyj | |
| 40 | +ADD COLUMN F_OriginalKdpxNumber DECIMAL(18,2) NULL COMMENT '原始耗卡品项次数(原始值)' AFTER F_kdpxNumber, | |
| 41 | +ADD COLUMN F_OvertimeKdpxNumber DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班耗卡品项次数(加班计算后的增量值)' AFTER F_OriginalKdpxNumber, | |
| 42 | +ADD COLUMN F_OriginalLaborCost DECIMAL(18,2) NULL COMMENT '原始手工费(原始值)' AFTER F_LaborCost, | |
| 43 | +ADD COLUMN F_OvertimeLaborCost DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班手工费(加班计算后的增量值)' AFTER F_OriginalLaborCost; | |
| 44 | + | |
| 45 | +-- 为现有数据设置默认值 | |
| 46 | +UPDATE lq_xh_jksyj | |
| 47 | +SET F_OriginalKdpxNumber = COALESCE(F_kdpxNumber, 0), | |
| 48 | + F_OvertimeKdpxNumber = 0, | |
| 49 | + F_OriginalLaborCost = COALESCE(F_LaborCost, 0), | |
| 50 | + F_OvertimeLaborCost = 0 | |
| 51 | +WHERE F_OriginalKdpxNumber IS NULL; | |
| 52 | + | |
| 53 | +-- ============================================ | |
| 54 | +-- 4. lq_xh_kjbsyj(耗卡科技部老师业绩表) - 添加加班相关字段 | |
| 55 | +-- ============================================ | |
| 56 | +ALTER TABLE lq_xh_kjbsyj | |
| 57 | +ADD COLUMN F_OriginalHdpxNumber DECIMAL(18,2) NULL COMMENT '原始耗卡品相次数(原始值)' AFTER F_hdpxNumber, | |
| 58 | +ADD COLUMN F_OvertimeHdpxNumber DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班耗卡品相次数(加班计算后的增量值)' AFTER F_OriginalHdpxNumber, | |
| 59 | +ADD COLUMN F_OriginalLaborCost DECIMAL(18,2) NULL COMMENT '原始手工费(原始值)' AFTER F_LaborCost, | |
| 60 | +ADD COLUMN F_OvertimeLaborCost DECIMAL(18,2) NULL DEFAULT 0 COMMENT '加班手工费(加班计算后的增量值)' AFTER F_OriginalLaborCost; | |
| 61 | + | |
| 62 | +-- 为现有数据设置默认值 | |
| 63 | +UPDATE lq_xh_kjbsyj | |
| 64 | +SET F_OriginalHdpxNumber = COALESCE(F_hdpxNumber, 0), | |
| 65 | + F_OvertimeHdpxNumber = 0, | |
| 66 | + F_OriginalLaborCost = COALESCE(F_LaborCost, 0), | |
| 67 | + F_OvertimeLaborCost = 0 | |
| 68 | +WHERE F_OriginalHdpxNumber IS NULL; | |
| 69 | + | |
| 70 | +-- ============================================ | |
| 71 | +-- 5. 创建索引(可选,用于优化查询) | |
| 72 | +-- ============================================ | |
| 73 | +-- 为加班系数创建索引,方便查询加班单(系数大于0的记录) | |
| 74 | +CREATE INDEX idx_xh_hyhk_overtime_coefficient ON lq_xh_hyhk(F_OvertimeCoefficient); | |
| 75 | + | |
| 76 | +-- ============================================ | |
| 77 | +-- 6. 验证字段创建 | |
| 78 | +-- ============================================ | |
| 79 | +-- 验证 lq_xh_hyhk 表 | |
| 80 | +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT | |
| 81 | +-- FROM INFORMATION_SCHEMA.COLUMNS | |
| 82 | +-- WHERE TABLE_NAME = 'lq_xh_hyhk' | |
| 83 | +-- AND (COLUMN_NAME LIKE 'F_%Overtime%' OR COLUMN_NAME LIKE 'F_Original%'); | |
| 84 | + | |
| 85 | +-- 验证 lq_xh_pxmx 表 | |
| 86 | +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT | |
| 87 | +-- FROM INFORMATION_SCHEMA.COLUMNS | |
| 88 | +-- WHERE TABLE_NAME = 'lq_xh_pxmx' | |
| 89 | +-- AND (COLUMN_NAME LIKE 'F_%Overtime%' OR COLUMN_NAME LIKE 'F_Original%'); | |
| 90 | + | |
| 91 | +-- 验证 lq_xh_jksyj 表 | |
| 92 | +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT | |
| 93 | +-- FROM INFORMATION_SCHEMA.COLUMNS | |
| 94 | +-- WHERE TABLE_NAME = 'lq_xh_jksyj' | |
| 95 | +-- AND (COLUMN_NAME LIKE 'F_%Overtime%' OR COLUMN_NAME LIKE 'F_Original%'); | |
| 96 | + | |
| 97 | +-- 验证 lq_xh_kjbsyj 表 | |
| 98 | +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT | |
| 99 | +-- FROM INFORMATION_SCHEMA.COLUMNS | |
| 100 | +-- WHERE TABLE_NAME = 'lq_xh_kjbsyj' | |
| 101 | +-- AND (COLUMN_NAME LIKE 'F_%Overtime%' OR COLUMN_NAME LIKE 'F_Original%'); | |
| 102 | + | ... | ... |