Commit 4b74fde5c0f9a59082ffba1b1955c69e8cc82c39
1 parent
da3042f7
Refactor overtime calculation logic to exclude 科技部 from overtime fees, ensuring …
…accurate computation based on 健康师's original labor costs. Added refund achievement tracking in daily report statistics for comprehensive performance analysis.
Showing
10 changed files
with
1272 additions
and
41 deletions
docs/加班系数逻辑说明及修改方案.md
| ... | ... | @@ -19,16 +19,19 @@ |
| 19 | 19 | |
| 20 | 20 | #### 📊 **主表(lq_xh_hyhk)计算** |
| 21 | 21 | |
| 22 | +**重要**:科技部老师不参与加班,主表加班手工费仅来自健康师。 | |
| 23 | + | |
| 22 | 24 | ``` |
| 23 | -加班手工费(F_OvertimeSgfy)= 原始手工费(F_OriginalSgfy)× 加班系数(F_OvertimeCoefficient) | |
| 25 | +加班手工费(F_OvertimeSgfy)= 健康师原始手工费之和 × 加班系数(F_OvertimeCoefficient) | |
| 24 | 26 | 最终手工费(sgfy)= 原始手工费(F_OriginalSgfy)+ 加班手工费(F_OvertimeSgfy) |
| 25 | 27 | ``` |
| 26 | 28 | |
| 27 | -**示例**: | |
| 28 | -- 原始手工费 = 100元 | |
| 29 | +**示例**(健康师12元 + 科技部40元 = 整单原始52元): | |
| 30 | +- 原始手工费 = 52元(健康师12 + 科技部40) | |
| 31 | +- 健康师原始手工费之和 = 12元 | |
| 29 | 32 | - 加班系数 = 0.5 |
| 30 | -- 加班手工费 = 100 × 0.5 = 50元 | |
| 31 | -- 最终手工费 = 100 + 50 = 150元 | |
| 33 | +- 加班手工费 = 12 × 0.5 = 6元(仅健康师参与) | |
| 34 | +- 最终手工费 = 52 + 6 = 58元(= 健康师18 + 科技部40) | |
| 32 | 35 | |
| 33 | 36 | --- |
| 34 | 37 | |
| ... | ... | @@ -94,8 +97,8 @@ LaborCost = ikjbs_tem.laborCost, |
| 94 | 97 | ┌─────────────────────────────────────────────────────────────┐ |
| 95 | 98 | │ lq_xh_hyhk(耗卡主表) │ |
| 96 | 99 | │ F_OvertimeCoefficient(加班系数) │ |
| 97 | -│ F_OriginalSgfy(原始手工费) │ | |
| 98 | -│ F_OvertimeSgfy(加班手工费)= OriginalSgfy × Coefficient │ | |
| 100 | +│ F_OriginalSgfy(原始手工费 = 健康师+科技部) │ | |
| 101 | +│ F_OvertimeSgfy(加班手工费)= Σ健康师原始手工费 × 系数 │ | |
| 99 | 102 | │ sgfy(最终手工费)= OriginalSgfy + OvertimeSgfy │ |
| 100 | 103 | └─────────────────────────────────────────────────────────────┘ |
| 101 | 104 | │ |
| ... | ... | @@ -127,11 +130,12 @@ LaborCost = ikjbs_tem.laborCost, |
| 127 | 130 | |
| 128 | 131 | **流程**: |
| 129 | 132 | 1. 接收 `LqXhHyhkCrInput` 参数,包含 `overtimeCoefficient` |
| 130 | -2. 计算主表加班字段: | |
| 133 | +2. 计算主表加班字段(科技部不参与加班,主表加班手工费 = 健康师加班手工费之和): | |
| 131 | 134 | ```csharp |
| 132 | 135 | entity.OvertimeCoefficient = input.overtimeCoefficient ?? 0; |
| 133 | 136 | entity.OriginalSgfy = input.sgfy; |
| 134 | - entity.OvertimeSgfy = entity.OriginalSgfy * entity.OvertimeCoefficient; | |
| 137 | + var jksOriginalLaborCostSum = input.lqXhPxmxList?.SelectMany(p => p.lqXhJksyjList ?? ...).Sum(j => j.laborCost ?? 0) ?? 0; | |
| 138 | + entity.OvertimeSgfy = (decimal)(jksOriginalLaborCostSum * entity.OvertimeCoefficient); | |
| 135 | 139 | entity.Sgfy = entity.OriginalSgfy + entity.OvertimeSgfy; |
| 136 | 140 | ``` |
| 137 | 141 | 3. 遍历品项明细,计算每个品项的加班字段: |
| ... | ... | @@ -236,7 +240,7 @@ LaborCost = ikjbs_tem.laborCost, |
| 236 | 240 | ``` |
| 237 | 241 | |
| 238 | 242 | 3. **计算逻辑**: |
| 239 | - - 主表:重新计算 `F_OvertimeSgfy` 和 `sgfy` | |
| 243 | + - 主表:重新计算 `F_OvertimeSgfy`(= 健康师原始手工费之和 × 系数)和 `sgfy`(科技部不参与加班) | |
| 240 | 244 | - 品项明细表:重新计算 `F_OvertimeProjectNumber` 和 `F_ProjectNumber` |
| 241 | 245 | - 健康师业绩表:重新计算 `F_OvertimeKdpxNumber`、`F_kdpxNumber`、`F_OvertimeLaborCost`、`F_LaborCost` |
| 242 | 246 | - 科技部老师业绩表:如果需要支持,重新计算相关字段 | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqDailyReport/TechTeacherDailyStatisticsOutput.cs
| ... | ... | @@ -47,6 +47,11 @@ namespace NCC.Extend.Entitys.Dto.LqDailyReport |
| 47 | 47 | /// 开单业绩 |
| 48 | 48 | /// </summary> |
| 49 | 49 | public decimal OrderAchievement { get; set; } |
| 50 | + | |
| 51 | + /// <summary> | |
| 52 | + /// 退卡业绩(用于计算净业绩:净业绩 = 耗卡业绩 - 退卡业绩) | |
| 53 | + /// </summary> | |
| 54 | + public decimal RefundAchievement { get; set; } | |
| 50 | 55 | } |
| 51 | 56 | } |
| 52 | 57 | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqReimbursementApplicationMapper.cs
| 1 | -using NCC.Common.Helper; | |
| 1 | +using NCC.Common.Helper; | |
| 2 | +using NCC.Extend.Entitys; | |
| 2 | 3 | using NCC.Extend.Entitys.Dto.LqReimbursementApplication; |
| 3 | 4 | using Mapster; |
| 4 | 5 | using System.Collections.Generic; |
| ... | ... | @@ -9,6 +10,9 @@ namespace NCC.Extend.Entitys.Mapper.LqReimbursementApplication |
| 9 | 10 | { |
| 10 | 11 | public void Register(TypeAdapterConfig config) |
| 11 | 12 | { |
| 13 | + // 确保 camelCase 的 workflowConfigId 正确映射到 Entity 的 WorkflowConfigId | |
| 14 | + config.NewConfig<LqReimbursementApplicationCrInput, LqReimbursementApplicationEntity>() | |
| 15 | + .Map(d => d.WorkflowConfigId, s => s.workflowConfigId); | |
| 12 | 16 | } |
| 13 | 17 | } |
| 14 | 18 | } | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs
| ... | ... | @@ -1159,6 +1159,7 @@ namespace NCC.Extend |
| 1159 | 1159 | /// - ConsumeProjectCount: 消耗项目数 |
| 1160 | 1160 | /// - ConsumeAchievement: 消耗业绩 |
| 1161 | 1161 | /// - OrderAchievement: 开单业绩 |
| 1162 | + /// - RefundAchievement: 退卡业绩(净业绩 = 耗卡业绩 - 退卡业绩) | |
| 1162 | 1163 | /// </remarks> |
| 1163 | 1164 | /// <param name="input">查询参数</param> |
| 1164 | 1165 | /// <returns>科技部老师统计列表</returns> |
| ... | ... | @@ -1193,6 +1194,13 @@ namespace NCC.Extend |
| 1193 | 1194 | teacherFilterForOrder = $"AND ord.kjbls IN ('{teacherIdsStr}')"; |
| 1194 | 1195 | } |
| 1195 | 1196 | |
| 1197 | + var teacherFilterForRefund = ""; | |
| 1198 | + if (input.TeacherIds != null && input.TeacherIds.Any()) | |
| 1199 | + { | |
| 1200 | + var teacherIdsStr = string.Join("','", input.TeacherIds); | |
| 1201 | + teacherFilterForRefund = $"AND refund.kjbls IN ('{teacherIdsStr}')"; | |
| 1202 | + } | |
| 1203 | + | |
| 1196 | 1204 | // SQL查询:统计科技部老师的消耗业绩、见客数、项目数 |
| 1197 | 1205 | // 注意:GROUP BY 中移除了 user.F_RealName,避免同一老师ID因姓名不同产生重复记录 |
| 1198 | 1206 | var consumeSql = $@" |
| ... | ... | @@ -1242,6 +1250,29 @@ namespace NCC.Extend |
| 1242 | 1250 | |
| 1243 | 1251 | var orderResult = await _db.Ado.SqlQueryAsync<dynamic>(orderSql); |
| 1244 | 1252 | |
| 1253 | + // 查询退卡业绩(与耗卡使用相同过滤条件:门店、时间、人员、科技部) | |
| 1254 | + var refundSql = $@" | |
| 1255 | + SELECT | |
| 1256 | + techDept.F_Id as TechDepartmentId, | |
| 1257 | + techDept.F_FullName as TechDepartmentName, | |
| 1258 | + refund.kjbls as TeacherId, | |
| 1259 | + MAX(user.F_RealName) as TeacherName, | |
| 1260 | + SUM(refund.kjblsyj) as RefundAchievement | |
| 1261 | + FROM lq_hytk_kjbsyj refund | |
| 1262 | + INNER JOIN lq_hytk_hytk hytk ON refund.gltkbh = hytk.F_Id | |
| 1263 | + INNER JOIN lq_mdxx store ON hytk.md = store.F_Id | |
| 1264 | + LEFT JOIN base_organize techDept ON store.kjb = techDept.F_Id | |
| 1265 | + LEFT JOIN BASE_USER user ON refund.kjbls = user.F_Id | |
| 1266 | + WHERE refund.F_IsEffective = 1 | |
| 1267 | + AND hytk.F_IsEffective = 1 | |
| 1268 | + AND DATE(hytk.tksj) >= '{startDate:yyyy-MM-dd}' | |
| 1269 | + AND DATE(hytk.tksj) <= '{endDate:yyyy-MM-dd}' | |
| 1270 | + {techFilter} | |
| 1271 | + {teacherFilterForRefund} | |
| 1272 | + GROUP BY techDept.F_Id, techDept.F_FullName, refund.kjbls"; | |
| 1273 | + | |
| 1274 | + var refundResult = await _db.Ado.SqlQueryAsync<dynamic>(refundSql); | |
| 1275 | + | |
| 1245 | 1276 | // 合并数据:按员工ID汇总,避免同一员工在多个科技部重复出现 |
| 1246 | 1277 | // 使用 TeacherId 作为唯一键,汇总所有科技部的数据 |
| 1247 | 1278 | var teacherDict = new Dictionary<string, TechTeacherDailyStatisticsOutput>(); |
| ... | ... | @@ -1287,7 +1318,8 @@ namespace NCC.Extend |
| 1287 | 1318 | CustomerCount = 0, |
| 1288 | 1319 | ConsumeProjectCount = 0, |
| 1289 | 1320 | ConsumeAchievement = 0, |
| 1290 | - OrderAchievement = 0 | |
| 1321 | + OrderAchievement = 0, | |
| 1322 | + RefundAchievement = 0 | |
| 1291 | 1323 | }; |
| 1292 | 1324 | } |
| 1293 | 1325 | |
| ... | ... | @@ -1334,7 +1366,8 @@ namespace NCC.Extend |
| 1334 | 1366 | CustomerCount = 0, |
| 1335 | 1367 | ConsumeProjectCount = 0, |
| 1336 | 1368 | ConsumeAchievement = 0, |
| 1337 | - OrderAchievement = 0 | |
| 1369 | + OrderAchievement = 0, | |
| 1370 | + RefundAchievement = 0 | |
| 1338 | 1371 | }; |
| 1339 | 1372 | } |
| 1340 | 1373 | else |
| ... | ... | @@ -1349,7 +1382,38 @@ namespace NCC.Extend |
| 1349 | 1382 | teacherDict[teacherId].OrderAchievement += orderAchievement; |
| 1350 | 1383 | } |
| 1351 | 1384 | |
| 1352 | - // 第三步:确定每个员工的主要科技部 | |
| 1385 | + // 第三步:处理退卡业绩,按员工ID汇总 | |
| 1386 | + foreach (var item in refundResult ?? Enumerable.Empty<dynamic>()) | |
| 1387 | + { | |
| 1388 | + var teacherId = item.TeacherId?.ToString(); | |
| 1389 | + var techDeptId = item.TechDepartmentId?.ToString(); | |
| 1390 | + var techDeptName = item.TechDepartmentName?.ToString(); | |
| 1391 | + var refundAchievement = Convert.ToDecimal(item.RefundAchievement); | |
| 1392 | + | |
| 1393 | + if (string.IsNullOrEmpty(teacherId)) | |
| 1394 | + continue; | |
| 1395 | + | |
| 1396 | + if (!teacherDict.ContainsKey(teacherId)) | |
| 1397 | + { | |
| 1398 | + // 仅有退卡数据、无消耗和开单时,也创建记录 | |
| 1399 | + teacherDict[teacherId] = new TechTeacherDailyStatisticsOutput | |
| 1400 | + { | |
| 1401 | + TechDepartmentId = techDeptId, | |
| 1402 | + TechDepartmentName = techDeptName, | |
| 1403 | + TeacherId = teacherId, | |
| 1404 | + TeacherName = item.TeacherName?.ToString(), | |
| 1405 | + CustomerCount = 0, | |
| 1406 | + ConsumeProjectCount = 0, | |
| 1407 | + ConsumeAchievement = 0, | |
| 1408 | + OrderAchievement = 0, | |
| 1409 | + RefundAchievement = 0 | |
| 1410 | + }; | |
| 1411 | + } | |
| 1412 | + | |
| 1413 | + teacherDict[teacherId].RefundAchievement += refundAchievement; | |
| 1414 | + } | |
| 1415 | + | |
| 1416 | + // 第四步:确定每个员工的主要科技部 | |
| 1353 | 1417 | // 优先按消耗业绩最多的科技部,如果消耗业绩为0,则按开单业绩最多的科技部 |
| 1354 | 1418 | foreach (var teacherId in teacherDict.Keys.ToList()) |
| 1355 | 1419 | { |
| ... | ... | @@ -1424,7 +1488,7 @@ namespace NCC.Extend |
| 1424 | 1488 | } |
| 1425 | 1489 | } |
| 1426 | 1490 | |
| 1427 | - // 第四步:重新计算见客数(去重,因为同一个客户可能在多个科技部被统计) | |
| 1491 | + // 第五步:重新计算见客数(去重,因为同一个客户可能在多个科技部被统计) | |
| 1428 | 1492 | // 由于已经汇总了数据,这里需要重新查询去重后的见客数 |
| 1429 | 1493 | var teacherIds = teacherDict.Keys.ToList(); |
| 1430 | 1494 | if (teacherIds.Any()) |
| ... | ... | @@ -1453,7 +1517,7 @@ namespace NCC.Extend |
| 1453 | 1517 | } |
| 1454 | 1518 | } |
| 1455 | 1519 | |
| 1456 | - // 第五步:统一查询所有用户名称,确保所有用户都能获取到名称 | |
| 1520 | + // 第六步:统一查询所有用户名称,确保所有用户都能获取到名称 | |
| 1457 | 1521 | var teacherNamesSql = $@" |
| 1458 | 1522 | SELECT |
| 1459 | 1523 | F_Id as TeacherId, | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend/LqReimbursementApplicationService.cs
| ... | ... | @@ -282,8 +282,8 @@ namespace NCC.Extend.LqReimbursementApplication |
| 282 | 282 | |
| 283 | 283 | // 先查询实体类中有CompletionTime字段且符合条件的申请ID |
| 284 | 284 | var entitiesWithCompletionTime = await _db.Queryable<LqReimbursementApplicationEntity>() |
| 285 | - .Where(x => x.CompletionTime.HasValue | |
| 286 | - && x.CompletionTime.Value >= startDate | |
| 285 | + .Where(x => x.CompletionTime.HasValue | |
| 286 | + && x.CompletionTime.Value >= startDate | |
| 287 | 287 | && x.CompletionTime.Value <= endDate) |
| 288 | 288 | .Select(x => x.Id) |
| 289 | 289 | .ToListAsync(); |
| ... | ... | @@ -528,11 +528,8 @@ namespace NCC.Extend.LqReimbursementApplication |
| 528 | 528 | } |
| 529 | 529 | } |
| 530 | 530 | |
| 531 | - // 2. 设置报销申请初始状态 | |
| 532 | - if (!string.IsNullOrEmpty(input.workflowConfigId)) | |
| 533 | - { | |
| 534 | - entity.WorkflowConfigId = input.workflowConfigId.Trim(); | |
| 535 | - } | |
| 531 | + // 2. 设置报销申请初始状态(含流程配置ID,确保入库) | |
| 532 | + entity.WorkflowConfigId = !string.IsNullOrEmpty(input.workflowConfigId) ? input.workflowConfigId.Trim() : null; | |
| 536 | 533 | entity.NodeCount = input.nodes.Count; |
| 537 | 534 | entity.CurrentNodeOrder = 0; |
| 538 | 535 | entity.ApprovalStatus = "待审批"; |
| ... | ... | @@ -546,8 +543,8 @@ namespace NCC.Extend.LqReimbursementApplication |
| 546 | 543 | entity.ApplicationUserName = userInfo.userName; |
| 547 | 544 | } |
| 548 | 545 | |
| 549 | - // 3. 保存报销申请表(不使用IgnoreColumns,确保新字段被保存) | |
| 550 | - var isOk = await _db.Insertable(entity).ExecuteCommandAsync(); | |
| 546 | + // 3. 保存报销申请表(ignoreNullColumn: false 确保 WorkflowConfigId 等可选字段能正确入库) | |
| 547 | + var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: false).ExecuteCommandAsync(); | |
| 551 | 548 | if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000); |
| 552 | 549 | |
| 553 | 550 | // 4. 创建节点配置 |
| ... | ... | @@ -825,8 +822,10 @@ namespace NCC.Extend.LqReimbursementApplication |
| 825 | 822 | .ExecuteCommandAsync(); |
| 826 | 823 | } |
| 827 | 824 | |
| 828 | - // 更新报销申请表(确保 purchaseRecordsId 字段被正确更新) | |
| 825 | + // 更新报销申请表(确保 purchaseRecordsId、WorkflowConfigId 等字段被正确更新) | |
| 829 | 826 | var entity = input.Adapt<LqReimbursementApplicationEntity>(); |
| 827 | + entity.Id = id; // 确保使用路由参数中的主键 | |
| 828 | + entity.WorkflowConfigId = !string.IsNullOrEmpty(input.workflowConfigId) ? input.workflowConfigId.Trim() : oldEntity?.WorkflowConfigId; | |
| 830 | 829 | var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); |
| 831 | 830 | if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001); |
| 832 | 831 | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
| ... | ... | @@ -1104,9 +1104,12 @@ namespace NCC.Extend.LqXhHyhk |
| 1104 | 1104 | entity.OvertimeCoefficient = input.overtimeCoefficient ?? 0; |
| 1105 | 1105 | entity.OriginalSgfy = input.sgfy; |
| 1106 | 1106 | entity.AppointmentId = input.appointmentId; |
| 1107 | - //加班手工费 = 原始手工费 * 加班系数 | |
| 1108 | - entity.OvertimeSgfy = entity.OriginalSgfy * entity.OvertimeCoefficient; | |
| 1109 | - //最终手工费 = 原始手工费 + 加班手工费 | |
| 1107 | + // 加班手工费 = 健康师原始手工费之和 × 加班系数(科技部不参与加班) | |
| 1108 | + var jksOriginalLaborCostSum = input.lqXhPxmxList? | |
| 1109 | + .SelectMany(p => p.lqXhJksyjList ?? Enumerable.Empty<LqXhJksyjCrInput>()) | |
| 1110 | + .Sum(j => j.laborCost ?? 0) ?? 0; | |
| 1111 | + entity.OvertimeSgfy = (decimal)(jksOriginalLaborCostSum * entity.OvertimeCoefficient); | |
| 1112 | + // 最终手工费 = 原始手工费 + 加班手工费 | |
| 1110 | 1113 | entity.Sgfy = entity.OriginalSgfy + entity.OvertimeSgfy; |
| 1111 | 1114 | try |
| 1112 | 1115 | { |
| ... | ... | @@ -1489,9 +1492,13 @@ namespace NCC.Extend.LqXhHyhk |
| 1489 | 1492 | throw NCCException.Oh(ErrorCode.COM1005, "耗卡记录不存在或已作废"); |
| 1490 | 1493 | } |
| 1491 | 1494 | entity.UpdateTime = DateTime.Now; |
| 1492 | - entity.OvertimeCoefficient = input.overtimeCoefficient; | |
| 1495 | + entity.OvertimeCoefficient = input.overtimeCoefficient ?? 0; | |
| 1493 | 1496 | entity.OriginalSgfy = input.sgfy; |
| 1494 | - entity.OvertimeSgfy = (decimal)(entity.OvertimeCoefficient * input.sgfy); | |
| 1497 | + // 加班手工费 = 健康师原始手工费之和 × 加班系数(科技部不参与加班) | |
| 1498 | + var jksOriginalLaborCostSum = input.lqXhPxmxList? | |
| 1499 | + .SelectMany(p => p.lqXhJksyjList ?? Enumerable.Empty<LqXhJksyjCrInput>()) | |
| 1500 | + .Sum(j => j.laborCost ?? 0) ?? 0; | |
| 1501 | + entity.OvertimeSgfy = (decimal)(jksOriginalLaborCostSum * (entity.OvertimeCoefficient ?? 0)); | |
| 1495 | 1502 | entity.Sgfy = entity.OriginalSgfy + entity.OvertimeSgfy; |
| 1496 | 1503 | entity.AppointmentId = input.appointmentId; |
| 1497 | 1504 | //更新会员耗卡记录 |
| ... | ... | @@ -1823,7 +1830,7 @@ namespace NCC.Extend.LqXhHyhk |
| 1823 | 1830 | /// |
| 1824 | 1831 | /// 计算逻辑: |
| 1825 | 1832 | /// 1. 主表(lq_xh_hyhk): |
| 1826 | - /// - 加班手工费 = 原始手工费 × 新加班系数 | |
| 1833 | + /// - 加班手工费 = 健康师原始手工费之和 × 新加班系数(科技部不参与加班) | |
| 1827 | 1834 | /// - 最终手工费 = 原始手工费 + 加班手工费 |
| 1828 | 1835 | /// |
| 1829 | 1836 | /// 2. 品项明细表(lq_xh_pxmx): |
| ... | ... | @@ -1881,11 +1888,26 @@ namespace NCC.Extend.LqXhHyhk |
| 1881 | 1888 | } |
| 1882 | 1889 | } |
| 1883 | 1890 | |
| 1884 | - // 2. 更新主表加班系数和相关字段 | |
| 1891 | + // 2. 查询健康师业绩,计算主表加班手工费(科技部不参与加班) | |
| 1892 | + var jksyjList = await _db.Queryable<LqXhJksyjEntity>() | |
| 1893 | + .Where(x => x.Glkdbh == id && x.IsEffective == StatusEnum.有效.GetHashCode()) | |
| 1894 | + .ToListAsync(); | |
| 1895 | + var jksOriginalLaborCostSum = jksyjList.Sum(j => | |
| 1896 | + { | |
| 1897 | + var original = j.OriginalLaborCost ?? 0; | |
| 1898 | + if (original == 0 && (j.LaborCost ?? 0) > 0) | |
| 1899 | + { | |
| 1900 | + original = (j.LaborCost ?? 0) - (j.OvertimeLaborCost ?? 0); | |
| 1901 | + if (original < 0) original = 0; | |
| 1902 | + } | |
| 1903 | + return original; | |
| 1904 | + }); | |
| 1905 | + | |
| 1906 | + // 3. 更新主表加班系数和相关字段 | |
| 1885 | 1907 | var newCoefficient = input.overtimeCoefficient ?? 0; |
| 1886 | 1908 | var originalSgfy = entity.OriginalSgfy ?? 0; |
| 1887 | 1909 | entity.OvertimeCoefficient = newCoefficient; |
| 1888 | - entity.OvertimeSgfy = (decimal)(originalSgfy * newCoefficient); | |
| 1910 | + entity.OvertimeSgfy = (decimal)(jksOriginalLaborCostSum * newCoefficient); | |
| 1889 | 1911 | entity.Sgfy = originalSgfy + (entity.OvertimeSgfy ?? 0); |
| 1890 | 1912 | entity.UpdateTime = DateTime.Now; |
| 1891 | 1913 | |
| ... | ... | @@ -1893,7 +1915,7 @@ namespace NCC.Extend.LqXhHyhk |
| 1893 | 1915 | .UpdateColumns(x => new { x.OvertimeCoefficient, x.OvertimeSgfy, x.Sgfy, x.UpdateTime }) |
| 1894 | 1916 | .ExecuteCommandAsync(); |
| 1895 | 1917 | |
| 1896 | - // 3. 查询所有品项明细,更新加班字段 | |
| 1918 | + // 4. 查询所有品项明细,更新加班字段 | |
| 1897 | 1919 | var pxmxList = await _db.Queryable<LqXhPxmxEntity>() |
| 1898 | 1920 | .Where(x => x.ConsumeInfoId == id && x.IsEffective == StatusEnum.有效.GetHashCode()) |
| 1899 | 1921 | .ToListAsync(); |
| ... | ... | @@ -1922,11 +1944,7 @@ namespace NCC.Extend.LqXhHyhk |
| 1922 | 1944 | .ExecuteCommandAsync(); |
| 1923 | 1945 | } |
| 1924 | 1946 | |
| 1925 | - // 4. 查询所有健康师业绩,更新加班字段 | |
| 1926 | - var jksyjList = await _db.Queryable<LqXhJksyjEntity>() | |
| 1927 | - .Where(x => x.Glkdbh == id && x.IsEffective == StatusEnum.有效.GetHashCode()) | |
| 1928 | - .ToListAsync(); | |
| 1929 | - | |
| 1947 | + // 5. 更新健康师业绩加班字段(jksyjList 已在步骤2查询) | |
| 1930 | 1948 | foreach (var jksyj in jksyjList) |
| 1931 | 1949 | { |
| 1932 | 1950 | // 如果原始耗卡品项次数为空,使用当前值作为原始值 |
| ... | ... | @@ -1969,7 +1987,7 @@ namespace NCC.Extend.LqXhHyhk |
| 1969 | 1987 | .ExecuteCommandAsync(); |
| 1970 | 1988 | } |
| 1971 | 1989 | |
| 1972 | - // 5. 科技部老师业绩表:当前代码中不参与加班计算,保持原值不变 | |
| 1990 | + // 6. 科技部老师业绩表:当前代码中不参与加班计算,保持原值不变 | |
| 1973 | 1991 | // 如果需要支持,可以取消注释以下代码 |
| 1974 | 1992 | /* |
| 1975 | 1993 | var kjbsyjList = await _db.Queryable<LqXhKjbsyjEntity>() | ... | ... |
netcore/src/Modularity/Message/NCC.Message.Entitys/D:/wesley/project/git/antis-food-alliance/netcore/src/Modularity/Message/NCC.Message.Entitys/NCC.Message.Entitys.xml
0 → 100644
| 1 | +<?xml version="1.0"?> | |
| 2 | +<doc> | |
| 3 | + <assembly> | |
| 4 | + <name>NCC.Message.Entitys</name> | |
| 5 | + </assembly> | |
| 6 | + <members> | |
| 7 | + <member name="P:NCC.Message.Entitys.Dto.IM.IMContentListOutput.id"> | |
| 8 | + <summary> | |
| 9 | + 主键 | |
| 10 | + </summary> | |
| 11 | + </member> | |
| 12 | + <member name="P:NCC.Message.Entitys.Dto.IM.IMContentListOutput.sendUserId"> | |
| 13 | + <summary> | |
| 14 | + 发送者 | |
| 15 | + </summary> | |
| 16 | + <returns></returns> | |
| 17 | + </member> | |
| 18 | + <member name="P:NCC.Message.Entitys.Dto.IM.IMContentListOutput.sendTime"> | |
| 19 | + <summary> | |
| 20 | + 发送时间 | |
| 21 | + </summary> | |
| 22 | + <returns></returns> | |
| 23 | + </member> | |
| 24 | + <member name="P:NCC.Message.Entitys.Dto.IM.IMContentListOutput.receiveUserId"> | |
| 25 | + <summary> | |
| 26 | + 接收者 | |
| 27 | + </summary> | |
| 28 | + <returns></returns> | |
| 29 | + </member> | |
| 30 | + <member name="P:NCC.Message.Entitys.Dto.IM.IMContentListOutput.receiveTime"> | |
| 31 | + <summary> | |
| 32 | + 接收时间 | |
| 33 | + </summary> | |
| 34 | + <returns></returns> | |
| 35 | + </member> | |
| 36 | + <member name="P:NCC.Message.Entitys.Dto.IM.IMContentListOutput.content"> | |
| 37 | + <summary> | |
| 38 | + 内容 | |
| 39 | + </summary> | |
| 40 | + <returns></returns> | |
| 41 | + </member> | |
| 42 | + <member name="P:NCC.Message.Entitys.Dto.IM.IMContentListOutput.contentType"> | |
| 43 | + <summary> | |
| 44 | + 内容类型:text、img、file | |
| 45 | + </summary> | |
| 46 | + </member> | |
| 47 | + <member name="P:NCC.Message.Entitys.Dto.IM.IMContentListOutput.state"> | |
| 48 | + <summary> | |
| 49 | + 状态(0:未读、1:已读) | |
| 50 | + </summary> | |
| 51 | + <returns></returns> | |
| 52 | + </member> | |
| 53 | + <member name="T:NCC.Message.Entitys.Dto.IM.MessageInput"> | |
| 54 | + <summary> | |
| 55 | + 消息接收类 | |
| 56 | + </summary> | |
| 57 | + </member> | |
| 58 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.sendClientId"> | |
| 59 | + <summary> | |
| 60 | + 发送发送客户端ID | |
| 61 | + </summary> | |
| 62 | + </member> | |
| 63 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.method"> | |
| 64 | + <summary> | |
| 65 | + 方法 | |
| 66 | + </summary> | |
| 67 | + </member> | |
| 68 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.mobileDevice"> | |
| 69 | + <summary> | |
| 70 | + 移动设备 | |
| 71 | + </summary> | |
| 72 | + </member> | |
| 73 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.token"> | |
| 74 | + <summary> | |
| 75 | + Token | |
| 76 | + </summary> | |
| 77 | + </member> | |
| 78 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.toUserId"> | |
| 79 | + <summary> | |
| 80 | + 发送者ID | |
| 81 | + </summary> | |
| 82 | + </member> | |
| 83 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.formUserId"> | |
| 84 | + <summary> | |
| 85 | + 接收者ID | |
| 86 | + </summary> | |
| 87 | + </member> | |
| 88 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.messageType"> | |
| 89 | + <summary> | |
| 90 | + 消息类型 | |
| 91 | + </summary> | |
| 92 | + </member> | |
| 93 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.messageContent"> | |
| 94 | + <summary> | |
| 95 | + 消息内容 | |
| 96 | + </summary> | |
| 97 | + </member> | |
| 98 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.currentPage"> | |
| 99 | + <summary> | |
| 100 | + 当前页数 | |
| 101 | + </summary> | |
| 102 | + </member> | |
| 103 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.pageSize"> | |
| 104 | + <summary> | |
| 105 | + 分页大小 | |
| 106 | + </summary> | |
| 107 | + </member> | |
| 108 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.sord"> | |
| 109 | + <summary> | |
| 110 | + 排序 | |
| 111 | + </summary> | |
| 112 | + </member> | |
| 113 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.keyword"> | |
| 114 | + <summary> | |
| 115 | + 关键字 | |
| 116 | + </summary> | |
| 117 | + </member> | |
| 118 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.RoomNo"> | |
| 119 | + <summary> | |
| 120 | + 房间号 | |
| 121 | + </summary> | |
| 122 | + </member> | |
| 123 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.RoomName"> | |
| 124 | + <summary> | |
| 125 | + 房间名称 | |
| 126 | + </summary> | |
| 127 | + </member> | |
| 128 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessageInput.IsRoom"> | |
| 129 | + <summary> | |
| 130 | + 是否群组/房间消息 | |
| 131 | + </summary> | |
| 132 | + </member> | |
| 133 | + <member name="T:NCC.Message.Entitys.Dto.IM.MessagetImageInput"> | |
| 134 | + <summary> | |
| 135 | + 信息图片输入 | |
| 136 | + </summary> | |
| 137 | + </member> | |
| 138 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessagetImageInput.name"> | |
| 139 | + <summary> | |
| 140 | + 64进制图片 | |
| 141 | + </summary> | |
| 142 | + </member> | |
| 143 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessagetImageInput.height"> | |
| 144 | + <summary> | |
| 145 | + 高度 | |
| 146 | + </summary> | |
| 147 | + </member> | |
| 148 | + <member name="P:NCC.Message.Entitys.Dto.IM.MessagetImageInput.width"> | |
| 149 | + <summary> | |
| 150 | + 宽度 | |
| 151 | + </summary> | |
| 152 | + </member> | |
| 153 | + <member name="T:NCC.Message.Entitys.Dto.IM.OnlineUserListOutput"> | |
| 154 | + <summary> | |
| 155 | + 在线用户 | |
| 156 | + 版 本:V1.20.15.0 | |
| 157 | + 版 权:Wesley(https://www.NCCsoft.com) | |
| 158 | + 作 者:NCC开发平台组 | |
| 159 | + 日 期:2017.09.20 | |
| 160 | + </summary> | |
| 161 | + </member> | |
| 162 | + <member name="P:NCC.Message.Entitys.Dto.IM.OnlineUserListOutput.userId"> | |
| 163 | + <summary> | |
| 164 | + 用户ID | |
| 165 | + </summary> | |
| 166 | + </member> | |
| 167 | + <member name="P:NCC.Message.Entitys.Dto.IM.OnlineUserListOutput.userAccount"> | |
| 168 | + <summary> | |
| 169 | + 用户账号 | |
| 170 | + </summary> | |
| 171 | + </member> | |
| 172 | + <member name="P:NCC.Message.Entitys.Dto.IM.OnlineUserListOutput.userName"> | |
| 173 | + <summary> | |
| 174 | + 用户名称 | |
| 175 | + </summary> | |
| 176 | + </member> | |
| 177 | + <member name="P:NCC.Message.Entitys.Dto.IM.OnlineUserListOutput.loginTime"> | |
| 178 | + <summary> | |
| 179 | + 登录时间 | |
| 180 | + </summary> | |
| 181 | + </member> | |
| 182 | + <member name="P:NCC.Message.Entitys.Dto.IM.OnlineUserListOutput.loginIPAddress"> | |
| 183 | + <summary> | |
| 184 | + 登录IP地址 | |
| 185 | + </summary> | |
| 186 | + </member> | |
| 187 | + <member name="P:NCC.Message.Entitys.Dto.IM.OnlineUserListOutput.loginPlatForm"> | |
| 188 | + <summary> | |
| 189 | + 登录平台设备 | |
| 190 | + </summary> | |
| 191 | + </member> | |
| 192 | + <member name="P:NCC.Message.Entitys.Dto.IM.OnlineUserListOutput.tenantId"> | |
| 193 | + <summary> | |
| 194 | + 租户ID | |
| 195 | + </summary> | |
| 196 | + </member> | |
| 197 | + <member name="P:NCC.Message.Entitys.Dto.IM.RoomIMContentListOutput.id"> | |
| 198 | + <summary> | |
| 199 | + 主键 | |
| 200 | + </summary> | |
| 201 | + </member> | |
| 202 | + <member name="P:NCC.Message.Entitys.Dto.IM.RoomIMContentListOutput.sendUserId"> | |
| 203 | + <summary> | |
| 204 | + 发送者 | |
| 205 | + </summary> | |
| 206 | + <returns></returns> | |
| 207 | + </member> | |
| 208 | + <member name="P:NCC.Message.Entitys.Dto.IM.RoomIMContentListOutput.sendTime"> | |
| 209 | + <summary> | |
| 210 | + 发送时间 | |
| 211 | + </summary> | |
| 212 | + <returns></returns> | |
| 213 | + </member> | |
| 214 | + <member name="P:NCC.Message.Entitys.Dto.IM.RoomIMContentListOutput.roomNo"> | |
| 215 | + <summary> | |
| 216 | + 房间 /群组好 | |
| 217 | + </summary> | |
| 218 | + <returns></returns> | |
| 219 | + </member> | |
| 220 | + <member name="P:NCC.Message.Entitys.Dto.IM.RoomIMContentListOutput.content"> | |
| 221 | + <summary> | |
| 222 | + 内容 | |
| 223 | + </summary> | |
| 224 | + <returns></returns> | |
| 225 | + </member> | |
| 226 | + <member name="P:NCC.Message.Entitys.Dto.IM.RoomIMContentListOutput.contentType"> | |
| 227 | + <summary> | |
| 228 | + 内容类型:text、img、file | |
| 229 | + </summary> | |
| 230 | + </member> | |
| 231 | + <member name="P:NCC.Message.Entitys.Dto.IM.RoomIMContentListOutput.state"> | |
| 232 | + <summary> | |
| 233 | + 状态(0:未读、1:已读) | |
| 234 | + </summary> | |
| 235 | + <returns></returns> | |
| 236 | + </member> | |
| 237 | + <member name="T:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput"> | |
| 238 | + <summary> | |
| 239 | + 聊天会话列表输出 | |
| 240 | + </summary> | |
| 241 | + </member> | |
| 242 | + <member name="F:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.id"> | |
| 243 | + <summary> | |
| 244 | + 主键 | |
| 245 | + </summary> | |
| 246 | + </member> | |
| 247 | + <member name="P:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.sendUserId"> | |
| 248 | + <summary> | |
| 249 | + 发送者 | |
| 250 | + </summary> | |
| 251 | + </member> | |
| 252 | + <member name="F:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.userId"> | |
| 253 | + <summary> | |
| 254 | + 接受者 | |
| 255 | + </summary> | |
| 256 | + </member> | |
| 257 | + <member name="F:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.realName"> | |
| 258 | + <summary> | |
| 259 | + 名称 | |
| 260 | + </summary> | |
| 261 | + </member> | |
| 262 | + <member name="F:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.headIcon"> | |
| 263 | + <summary> | |
| 264 | + 头像 | |
| 265 | + </summary> | |
| 266 | + </member> | |
| 267 | + <member name="F:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.latestMessage"> | |
| 268 | + <summary> | |
| 269 | + 最新消息 | |
| 270 | + </summary> | |
| 271 | + </member> | |
| 272 | + <member name="F:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.latestDate"> | |
| 273 | + <summary> | |
| 274 | + 最新时间 | |
| 275 | + </summary> | |
| 276 | + </member> | |
| 277 | + <member name="F:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.unreadMessage"> | |
| 278 | + <summary> | |
| 279 | + 未读消息 | |
| 280 | + </summary> | |
| 281 | + </member> | |
| 282 | + <member name="F:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.messageType"> | |
| 283 | + <summary> | |
| 284 | + 消息类型 | |
| 285 | + </summary> | |
| 286 | + </member> | |
| 287 | + <member name="F:NCC.Message.Entitys.Dto.ImReply.ImReplyListOutput.account"> | |
| 288 | + <summary> | |
| 289 | + 账号 | |
| 290 | + </summary> | |
| 291 | + </member> | |
| 292 | + <member name="T:NCC.Message.Entitys.Dto.ImReply.ImReplyObjectIdOutput"> | |
| 293 | + <summary> | |
| 294 | + 聊天会话对象ID | |
| 295 | + </summary> | |
| 296 | + </member> | |
| 297 | + <member name="P:NCC.Message.Entitys.Dto.ImReply.ImReplyObjectIdOutput.userId"> | |
| 298 | + <summary> | |
| 299 | + 对象id | |
| 300 | + </summary> | |
| 301 | + </member> | |
| 302 | + <member name="P:NCC.Message.Entitys.Dto.ImReply.ImReplyObjectIdOutput.latestDate"> | |
| 303 | + <summary> | |
| 304 | + 最新时间 | |
| 305 | + </summary> | |
| 306 | + </member> | |
| 307 | + <member name="P:NCC.Message.Entitys.Dto.Message.GroupMessageCrInput.name"> | |
| 308 | + <summary> | |
| 309 | + 标题 | |
| 310 | + </summary> | |
| 311 | + </member> | |
| 312 | + <member name="P:NCC.Message.Entitys.Dto.Message.GroupMessageCrInput.bodyText"> | |
| 313 | + <summary> | |
| 314 | + 正文内容 | |
| 315 | + </summary> | |
| 316 | + </member> | |
| 317 | + <member name="P:NCC.Message.Entitys.Dto.Message.GroupMessageCrInput.roomNo"> | |
| 318 | + <summary> | |
| 319 | + 房间号 | |
| 320 | + </summary> | |
| 321 | + </member> | |
| 322 | + <member name="P:NCC.Message.Entitys.Dto.Message.GroupMessageCrInput.description"> | |
| 323 | + <summary> | |
| 324 | + 描述 | |
| 325 | + </summary> | |
| 326 | + </member> | |
| 327 | + <member name="P:NCC.Message.Entitys.Dto.Message.GroupMessageCrInput.clientId"> | |
| 328 | + <summary> | |
| 329 | + 消息实例ID | |
| 330 | + </summary> | |
| 331 | + </member> | |
| 332 | + <member name="P:NCC.Message.Entitys.Dto.Message.GroupMessageCrInput.productId"> | |
| 333 | + <summary> | |
| 334 | + 商品ID | |
| 335 | + </summary> | |
| 336 | + </member> | |
| 337 | + <member name="P:NCC.Message.Entitys.Dto.Message.GroupMessageCrInput.shopId"> | |
| 338 | + <summary> | |
| 339 | + 店铺Id | |
| 340 | + </summary> | |
| 341 | + </member> | |
| 342 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageCrInput.title"> | |
| 343 | + <summary> | |
| 344 | + 标题 | |
| 345 | + </summary> | |
| 346 | + </member> | |
| 347 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageCrInput.bodyText"> | |
| 348 | + <summary> | |
| 349 | + 正文内容 | |
| 350 | + </summary> | |
| 351 | + </member> | |
| 352 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageInfoOutput.id"> | |
| 353 | + <summary> | |
| 354 | + id | |
| 355 | + </summary> | |
| 356 | + </member> | |
| 357 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageInfoOutput.title"> | |
| 358 | + <summary> | |
| 359 | + 标题 | |
| 360 | + </summary> | |
| 361 | + </member> | |
| 362 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageInfoOutput.bodyText"> | |
| 363 | + <summary> | |
| 364 | + 正文内容 | |
| 365 | + </summary> | |
| 366 | + </member> | |
| 367 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageInfoOutput.creatorUser"> | |
| 368 | + <summary> | |
| 369 | + 发送人员 | |
| 370 | + </summary> | |
| 371 | + </member> | |
| 372 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageInfoOutput.lastModifyTime"> | |
| 373 | + <summary> | |
| 374 | + 发送时间 | |
| 375 | + </summary> | |
| 376 | + </member> | |
| 377 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageInfoOutput.deleteMark"> | |
| 378 | + <summary> | |
| 379 | + | |
| 380 | + </summary> | |
| 381 | + </member> | |
| 382 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListInput.type"> | |
| 383 | + <summary> | |
| 384 | + 类型 | |
| 385 | + </summary> | |
| 386 | + </member> | |
| 387 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListOutput.id"> | |
| 388 | + <summary> | |
| 389 | + id | |
| 390 | + </summary> | |
| 391 | + </member> | |
| 392 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListOutput.title"> | |
| 393 | + <summary> | |
| 394 | + 标题 | |
| 395 | + </summary> | |
| 396 | + </member> | |
| 397 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListOutput.type"> | |
| 398 | + <summary> | |
| 399 | + 正文内容 | |
| 400 | + </summary> | |
| 401 | + </member> | |
| 402 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListOutput.creatorUser"> | |
| 403 | + <summary> | |
| 404 | + 发送人员 | |
| 405 | + </summary> | |
| 406 | + </member> | |
| 407 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListOutput.lastModifyTime"> | |
| 408 | + <summary> | |
| 409 | + 发送时间 | |
| 410 | + </summary> | |
| 411 | + </member> | |
| 412 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListOutput.isRead"> | |
| 413 | + <summary> | |
| 414 | + 是否已读(0-未读,1-已读) | |
| 415 | + </summary> | |
| 416 | + </member> | |
| 417 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListOutput.deleteMark"> | |
| 418 | + <summary> | |
| 419 | + | |
| 420 | + </summary> | |
| 421 | + </member> | |
| 422 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListOutput.enabledMark"> | |
| 423 | + <summary> | |
| 424 | + | |
| 425 | + </summary> | |
| 426 | + </member> | |
| 427 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageListOutput.userId"> | |
| 428 | + <summary> | |
| 429 | + | |
| 430 | + </summary> | |
| 431 | + </member> | |
| 432 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageNoticeOutput.id"> | |
| 433 | + <summary> | |
| 434 | + id | |
| 435 | + </summary> | |
| 436 | + </member> | |
| 437 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageNoticeOutput.title"> | |
| 438 | + <summary> | |
| 439 | + 标题 | |
| 440 | + </summary> | |
| 441 | + </member> | |
| 442 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageNoticeOutput.creatorUser"> | |
| 443 | + <summary> | |
| 444 | + 发布人员 | |
| 445 | + </summary> | |
| 446 | + </member> | |
| 447 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageNoticeOutput.lastModifyTime"> | |
| 448 | + <summary> | |
| 449 | + 发布时间 | |
| 450 | + </summary> | |
| 451 | + </member> | |
| 452 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageNoticeOutput.enabledMark"> | |
| 453 | + <summary> | |
| 454 | + 状态(0-存草稿,1-已发布) | |
| 455 | + </summary> | |
| 456 | + </member> | |
| 457 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageNoticeOutput.type"> | |
| 458 | + <summary> | |
| 459 | + 类型 | |
| 460 | + </summary> | |
| 461 | + </member> | |
| 462 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageNoticeOutput.deleteMark"> | |
| 463 | + <summary> | |
| 464 | + 删除标记 | |
| 465 | + </summary> | |
| 466 | + </member> | |
| 467 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageReadInfoOutput.id"> | |
| 468 | + <summary> | |
| 469 | + id | |
| 470 | + </summary> | |
| 471 | + </member> | |
| 472 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageReadInfoOutput.title"> | |
| 473 | + <summary> | |
| 474 | + 标题 | |
| 475 | + </summary> | |
| 476 | + </member> | |
| 477 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageReadInfoOutput.bodyText"> | |
| 478 | + <summary> | |
| 479 | + 正文内容 | |
| 480 | + </summary> | |
| 481 | + </member> | |
| 482 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageReadInfoOutput.creatorUser"> | |
| 483 | + <summary> | |
| 484 | + 发送人员 | |
| 485 | + </summary> | |
| 486 | + </member> | |
| 487 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageReadInfoOutput.lastModifyTime"> | |
| 488 | + <summary> | |
| 489 | + 发送时间 | |
| 490 | + </summary> | |
| 491 | + </member> | |
| 492 | + <member name="P:NCC.Message.Entitys.Dto.Message.MessageUpInput.id"> | |
| 493 | + <summary> | |
| 494 | + id | |
| 495 | + </summary> | |
| 496 | + </member> | |
| 497 | + <member name="T:NCC.Message.Entitys.RoomIMContentEntity"> | |
| 498 | + <summary> | |
| 499 | + 群组/房间 消息在线聊天 | |
| 500 | + 版 本:V1.20.15 | |
| 501 | + 版 权:Wesley(https://www.NCCsoft.com) | |
| 502 | + 作 者:NCC开发平台组 | |
| 503 | + 日 期:2022-03-16 | |
| 504 | + </summary> | |
| 505 | + </member> | |
| 506 | + <member name="P:NCC.Message.Entitys.RoomIMContentEntity.GroupId"> | |
| 507 | + <summary> | |
| 508 | + 群组/房间ID | |
| 509 | + </summary> | |
| 510 | + </member> | |
| 511 | + <member name="P:NCC.Message.Entitys.RoomIMContentEntity.SendUserId"> | |
| 512 | + <summary> | |
| 513 | + 发送者 | |
| 514 | + </summary> | |
| 515 | + <returns></returns> | |
| 516 | + </member> | |
| 517 | + <member name="P:NCC.Message.Entitys.RoomIMContentEntity.SendTime"> | |
| 518 | + <summary> | |
| 519 | + 发送时间 | |
| 520 | + </summary> | |
| 521 | + <returns></returns> | |
| 522 | + </member> | |
| 523 | + <member name="P:NCC.Message.Entitys.RoomIMContentEntity.RoomNo"> | |
| 524 | + <summary> | |
| 525 | + 房间号 | |
| 526 | + </summary> | |
| 527 | + <returns></returns> | |
| 528 | + </member> | |
| 529 | + <member name="P:NCC.Message.Entitys.RoomIMContentEntity.Content"> | |
| 530 | + <summary> | |
| 531 | + 内容 | |
| 532 | + </summary> | |
| 533 | + <returns></returns> | |
| 534 | + </member> | |
| 535 | + <member name="P:NCC.Message.Entitys.RoomIMContentEntity.ContentType"> | |
| 536 | + <summary> | |
| 537 | + 内容类型:text、img、file | |
| 538 | + </summary> | |
| 539 | + </member> | |
| 540 | + <member name="P:NCC.Message.Entitys.RoomIMContentEntity.State"> | |
| 541 | + <summary> | |
| 542 | + 状态(0:未读、1:已读) | |
| 543 | + </summary> | |
| 544 | + <returns></returns> | |
| 545 | + </member> | |
| 546 | + <member name="P:NCC.Message.Entitys.RoomIMContentEntity.ClientId"> | |
| 547 | + <summary> | |
| 548 | + 消息实例ID | |
| 549 | + </summary> | |
| 550 | + </member> | |
| 551 | + <member name="P:NCC.Message.Entitys.RoomIMContentEntity.MessageType"> | |
| 552 | + <summary> | |
| 553 | + 消息实例ID | |
| 554 | + </summary> | |
| 555 | + </member> | |
| 556 | + <member name="T:NCC.Message.Entitys.RoomMessageEntity"> | |
| 557 | + <summary> | |
| 558 | + 群组/房间消息 | |
| 559 | + 版 本:V1.20.15 | |
| 560 | + 版 权:Wesley(https://www.NCCsoft.com) | |
| 561 | + 作 者:NCC开发平台组 | |
| 562 | + 日 期:2022-03-16 | |
| 563 | + </summary> | |
| 564 | + </member> | |
| 565 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.Name"> | |
| 566 | + <summary> | |
| 567 | + 房间/群组名 | |
| 568 | + </summary> | |
| 569 | + </member> | |
| 570 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.BodyText"> | |
| 571 | + <summary> | |
| 572 | + 正文 | |
| 573 | + </summary> | |
| 574 | + </member> | |
| 575 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.PriorityLevel"> | |
| 576 | + <summary> | |
| 577 | + 优先 | |
| 578 | + </summary> | |
| 579 | + </member> | |
| 580 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.RoomNo"> | |
| 581 | + <summary> | |
| 582 | + 房间号 | |
| 583 | + </summary> | |
| 584 | + </member> | |
| 585 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.IsRead"> | |
| 586 | + <summary> | |
| 587 | + 是否阅读 | |
| 588 | + </summary> | |
| 589 | + </member> | |
| 590 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.Description"> | |
| 591 | + <summary> | |
| 592 | + 描述 | |
| 593 | + </summary> | |
| 594 | + </member> | |
| 595 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.SortCode"> | |
| 596 | + <summary> | |
| 597 | + 排序码 | |
| 598 | + </summary> | |
| 599 | + </member> | |
| 600 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.ClientId"> | |
| 601 | + <summary> | |
| 602 | + 消息实例ID | |
| 603 | + </summary> | |
| 604 | + </member> | |
| 605 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.ProductId"> | |
| 606 | + <summary> | |
| 607 | + 商品ID | |
| 608 | + </summary> | |
| 609 | + </member> | |
| 610 | + <member name="P:NCC.Message.Entitys.RoomMessageEntity.ShopId"> | |
| 611 | + <summary> | |
| 612 | + 店铺Id | |
| 613 | + </summary> | |
| 614 | + </member> | |
| 615 | + <member name="T:NCC.Message.Entitys.IMContentEntity"> | |
| 616 | + <summary> | |
| 617 | + 在线聊天 | |
| 618 | + 版 本:V1.20.15 | |
| 619 | + 版 权:Wesley(https://www.NCCsoft.com) | |
| 620 | + 作 者:NCC开发平台组 | |
| 621 | + 日 期:2022-03-16 | |
| 622 | + </summary> | |
| 623 | + </member> | |
| 624 | + <member name="P:NCC.Message.Entitys.IMContentEntity.SendUserId"> | |
| 625 | + <summary> | |
| 626 | + 发送者 | |
| 627 | + </summary> | |
| 628 | + <returns></returns> | |
| 629 | + </member> | |
| 630 | + <member name="P:NCC.Message.Entitys.IMContentEntity.SendTime"> | |
| 631 | + <summary> | |
| 632 | + 发送时间 | |
| 633 | + </summary> | |
| 634 | + <returns></returns> | |
| 635 | + </member> | |
| 636 | + <member name="P:NCC.Message.Entitys.IMContentEntity.ReceiveUserId"> | |
| 637 | + <summary> | |
| 638 | + 接收者 | |
| 639 | + </summary> | |
| 640 | + <returns></returns> | |
| 641 | + </member> | |
| 642 | + <member name="P:NCC.Message.Entitys.IMContentEntity.ReceiveTime"> | |
| 643 | + <summary> | |
| 644 | + 接收时间 | |
| 645 | + </summary> | |
| 646 | + <returns></returns> | |
| 647 | + </member> | |
| 648 | + <member name="P:NCC.Message.Entitys.IMContentEntity.Content"> | |
| 649 | + <summary> | |
| 650 | + 内容 | |
| 651 | + </summary> | |
| 652 | + <returns></returns> | |
| 653 | + </member> | |
| 654 | + <member name="P:NCC.Message.Entitys.IMContentEntity.ContentType"> | |
| 655 | + <summary> | |
| 656 | + 内容类型:text、img、file | |
| 657 | + </summary> | |
| 658 | + </member> | |
| 659 | + <member name="P:NCC.Message.Entitys.IMContentEntity.State"> | |
| 660 | + <summary> | |
| 661 | + 状态(0:未读、1:已读) | |
| 662 | + </summary> | |
| 663 | + <returns></returns> | |
| 664 | + </member> | |
| 665 | + <member name="T:NCC.Message.Entitys.ImReplyEntity"> | |
| 666 | + <summary> | |
| 667 | + 聊天会话 | |
| 668 | + </summary> | |
| 669 | + </member> | |
| 670 | + <member name="P:NCC.Message.Entitys.ImReplyEntity.UserId"> | |
| 671 | + <summary> | |
| 672 | + 发送者 | |
| 673 | + </summary> | |
| 674 | + <returns></returns> | |
| 675 | + </member> | |
| 676 | + <member name="P:NCC.Message.Entitys.ImReplyEntity.ReceiveUserId"> | |
| 677 | + <summary> | |
| 678 | + 接收用户 | |
| 679 | + </summary> | |
| 680 | + <returns></returns> | |
| 681 | + </member> | |
| 682 | + <member name="P:NCC.Message.Entitys.ImReplyEntity.ReceiveTime"> | |
| 683 | + <summary> | |
| 684 | + 接收用户时间 | |
| 685 | + </summary> | |
| 686 | + <returns></returns> | |
| 687 | + </member> | |
| 688 | + <member name="T:NCC.Message.Entitys.MessageEntity"> | |
| 689 | + <summary> | |
| 690 | + 消息实例 | |
| 691 | + 版 本:V1.20.15 | |
| 692 | + 版 权:Wesley(https://www.NCCsoft.com) | |
| 693 | + 作 者:NCC开发平台组 | |
| 694 | + 日 期:2022-03-16 | |
| 695 | + </summary> | |
| 696 | + </member> | |
| 697 | + <member name="P:NCC.Message.Entitys.MessageEntity.Type"> | |
| 698 | + <summary> | |
| 699 | + 类别:1-通知公告,2-系统消息、3-私信消息 | |
| 700 | + </summary> | |
| 701 | + </member> | |
| 702 | + <member name="P:NCC.Message.Entitys.MessageEntity.Title"> | |
| 703 | + <summary> | |
| 704 | + 标题 | |
| 705 | + </summary> | |
| 706 | + </member> | |
| 707 | + <member name="P:NCC.Message.Entitys.MessageEntity.BodyText"> | |
| 708 | + <summary> | |
| 709 | + 正文 | |
| 710 | + </summary> | |
| 711 | + </member> | |
| 712 | + <member name="P:NCC.Message.Entitys.MessageEntity.PriorityLevel"> | |
| 713 | + <summary> | |
| 714 | + 优先 | |
| 715 | + </summary> | |
| 716 | + </member> | |
| 717 | + <member name="P:NCC.Message.Entitys.MessageEntity.ToUserIds"> | |
| 718 | + <summary> | |
| 719 | + 收件用户 | |
| 720 | + </summary> | |
| 721 | + </member> | |
| 722 | + <member name="P:NCC.Message.Entitys.MessageEntity.IsRead"> | |
| 723 | + <summary> | |
| 724 | + 是否阅读 | |
| 725 | + </summary> | |
| 726 | + </member> | |
| 727 | + <member name="P:NCC.Message.Entitys.MessageEntity.Description"> | |
| 728 | + <summary> | |
| 729 | + 描述 | |
| 730 | + </summary> | |
| 731 | + </member> | |
| 732 | + <member name="P:NCC.Message.Entitys.MessageEntity.SortCode"> | |
| 733 | + <summary> | |
| 734 | + 排序码 | |
| 735 | + </summary> | |
| 736 | + </member> | |
| 737 | + <member name="T:NCC.Message.Entitys.MessageReceiveEntity"> | |
| 738 | + <summary> | |
| 739 | + 消息接收 | |
| 740 | + 版 本:V1.20.15 | |
| 741 | + 版 权:Wesley(https://www.NCCsoft.com) | |
| 742 | + 作 者:NCC开发平台组 | |
| 743 | + 日 期:2022-03-16 | |
| 744 | + </summary> | |
| 745 | + </member> | |
| 746 | + <member name="P:NCC.Message.Entitys.MessageReceiveEntity.MessageId"> | |
| 747 | + <summary> | |
| 748 | + 消息主键 | |
| 749 | + </summary> | |
| 750 | + </member> | |
| 751 | + <member name="P:NCC.Message.Entitys.MessageReceiveEntity.UserId"> | |
| 752 | + <summary> | |
| 753 | + 用户主键 | |
| 754 | + </summary> | |
| 755 | + </member> | |
| 756 | + <member name="P:NCC.Message.Entitys.MessageReceiveEntity.IsRead"> | |
| 757 | + <summary> | |
| 758 | + 是否阅读 | |
| 759 | + </summary> | |
| 760 | + </member> | |
| 761 | + <member name="P:NCC.Message.Entitys.MessageReceiveEntity.ReadTime"> | |
| 762 | + <summary> | |
| 763 | + 阅读时间 | |
| 764 | + </summary> | |
| 765 | + </member> | |
| 766 | + <member name="P:NCC.Message.Entitys.MessageReceiveEntity.ReadCount"> | |
| 767 | + <summary> | |
| 768 | + 阅读次数 | |
| 769 | + </summary> | |
| 770 | + </member> | |
| 771 | + <member name="P:NCC.Message.Entitys.Model.IM.IMUnreadNumModel.sendUserId"> | |
| 772 | + <summary> | |
| 773 | + 发送者Id | |
| 774 | + </summary> | |
| 775 | + </member> | |
| 776 | + <member name="P:NCC.Message.Entitys.Model.IM.IMUnreadNumModel.receiveUserId"> | |
| 777 | + <summary> | |
| 778 | + 接收者Id | |
| 779 | + </summary> | |
| 780 | + </member> | |
| 781 | + <member name="P:NCC.Message.Entitys.Model.IM.IMUnreadNumModel.unreadNum"> | |
| 782 | + <summary> | |
| 783 | + 未读数量 | |
| 784 | + </summary> | |
| 785 | + </member> | |
| 786 | + <member name="P:NCC.Message.Entitys.Model.IM.IMUnreadNumModel.defaultMessage"> | |
| 787 | + <summary> | |
| 788 | + 默认消息 | |
| 789 | + </summary> | |
| 790 | + </member> | |
| 791 | + <member name="P:NCC.Message.Entitys.Model.IM.IMUnreadNumModel.defaultMessageType"> | |
| 792 | + <summary> | |
| 793 | + 默认消息类型 | |
| 794 | + </summary> | |
| 795 | + </member> | |
| 796 | + <member name="P:NCC.Message.Entitys.Model.IM.IMUnreadNumModel.defaultMessageTime"> | |
| 797 | + <summary> | |
| 798 | + 默认消息时间 | |
| 799 | + </summary> | |
| 800 | + </member> | |
| 801 | + <member name="T:NCC.Message.Entitys.Model.IM.UserOnlineModel"> | |
| 802 | + <summary> | |
| 803 | + 在线用户模型 | |
| 804 | + </summary> | |
| 805 | + </member> | |
| 806 | + <member name="P:NCC.Message.Entitys.Model.IM.UserOnlineModel.connectionId"> | |
| 807 | + <summary> | |
| 808 | + 连接ID | |
| 809 | + </summary> | |
| 810 | + </member> | |
| 811 | + <member name="P:NCC.Message.Entitys.Model.IM.UserOnlineModel.userId"> | |
| 812 | + <summary> | |
| 813 | + 用户ID | |
| 814 | + </summary> | |
| 815 | + </member> | |
| 816 | + <member name="P:NCC.Message.Entitys.Model.IM.UserOnlineModel.lastTime"> | |
| 817 | + <summary> | |
| 818 | + 最后连接时间 | |
| 819 | + </summary> | |
| 820 | + </member> | |
| 821 | + <member name="P:NCC.Message.Entitys.Model.IM.UserOnlineModel.lastLoginIp"> | |
| 822 | + <summary> | |
| 823 | + 最后登录IP | |
| 824 | + </summary> | |
| 825 | + </member> | |
| 826 | + <member name="P:NCC.Message.Entitys.Model.IM.UserOnlineModel.lastLoginPlatForm"> | |
| 827 | + <summary> | |
| 828 | + 登录平台设备 | |
| 829 | + </summary> | |
| 830 | + </member> | |
| 831 | + <member name="P:NCC.Message.Entitys.Model.IM.UserOnlineModel.account"> | |
| 832 | + <summary> | |
| 833 | + 账号 | |
| 834 | + </summary> | |
| 835 | + </member> | |
| 836 | + <member name="P:NCC.Message.Entitys.Model.IM.UserOnlineModel.userName"> | |
| 837 | + <summary> | |
| 838 | + 用户名称 | |
| 839 | + </summary> | |
| 840 | + </member> | |
| 841 | + <member name="P:NCC.Message.Entitys.Model.IM.UserOnlineModel.tenantId"> | |
| 842 | + <summary> | |
| 843 | + 租户id | |
| 844 | + </summary> | |
| 845 | + </member> | |
| 846 | + <member name="T:NCC.Message.Entitys.Model.IM.WebSocketClient"> | |
| 847 | + <summary> | |
| 848 | + WebSocket客户端信息 | |
| 849 | + </summary> | |
| 850 | + </member> | |
| 851 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.ConnectionId"> | |
| 852 | + <summary> | |
| 853 | + 连接Id | |
| 854 | + </summary> | |
| 855 | + </member> | |
| 856 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.UserId"> | |
| 857 | + <summary> | |
| 858 | + 用户Id | |
| 859 | + </summary> | |
| 860 | + </member> | |
| 861 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.Account"> | |
| 862 | + <summary> | |
| 863 | + 用户账号 | |
| 864 | + </summary> | |
| 865 | + </member> | |
| 866 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.HeadIcon"> | |
| 867 | + <summary> | |
| 868 | + 头像 | |
| 869 | + </summary> | |
| 870 | + </member> | |
| 871 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.UserName"> | |
| 872 | + <summary> | |
| 873 | + 用户名称 | |
| 874 | + </summary> | |
| 875 | + </member> | |
| 876 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.LoginIpAddress"> | |
| 877 | + <summary> | |
| 878 | + 登录IP | |
| 879 | + </summary> | |
| 880 | + </member> | |
| 881 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.LoginPlatForm"> | |
| 882 | + <summary> | |
| 883 | + 登录设备 | |
| 884 | + </summary> | |
| 885 | + </member> | |
| 886 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.LoginTime"> | |
| 887 | + <summary> | |
| 888 | + 登录时间 | |
| 889 | + </summary> | |
| 890 | + </member> | |
| 891 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.TenantId"> | |
| 892 | + <summary> | |
| 893 | + 租户Id | |
| 894 | + </summary> | |
| 895 | + </member> | |
| 896 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.IsMobileDevice"> | |
| 897 | + <summary> | |
| 898 | + 移动端 | |
| 899 | + </summary> | |
| 900 | + </member> | |
| 901 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.WebSocket"> | |
| 902 | + <summary> | |
| 903 | + WebSocket对象 | |
| 904 | + </summary> | |
| 905 | + </member> | |
| 906 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.RoomNo"> | |
| 907 | + <summary> | |
| 908 | + 房间ID | |
| 909 | + </summary> | |
| 910 | + </member> | |
| 911 | + <member name="P:NCC.Message.Entitys.Model.IM.WebSocketClient.RoomName"> | |
| 912 | + <summary> | |
| 913 | + 房间名 | |
| 914 | + </summary> | |
| 915 | + </member> | |
| 916 | + <member name="M:NCC.Message.Entitys.Model.IM.WebSocketClient.SendMessageAsync(System.String)"> | |
| 917 | + <summary> | |
| 918 | + 发送消息 | |
| 919 | + </summary> | |
| 920 | + <param name="message"></param> | |
| 921 | + <returns></returns> | |
| 922 | + </member> | |
| 923 | + </members> | |
| 924 | +</doc> | ... | ... |
sql/修复消耗单主表加班手工费历史数据.sql
0 → 100644
| 1 | +-- ============================================ | |
| 2 | +-- 修复消耗单主表(lq_xh_hyhk)F_OvertimeSgfy 和 sgfy 历史数据 | |
| 3 | +-- ============================================ | |
| 4 | +-- 背景:主表加班手工费已改为「健康师原始手工费之和 × 加班系数」,科技部不参与加班。 | |
| 5 | +-- 本脚本修复历史数据,使 F_OvertimeSgfy 和 sgfy 符合新逻辑。 | |
| 6 | +-- | |
| 7 | +-- 修复逻辑: | |
| 8 | +-- F_OvertimeSgfy = 健康师原始手工费之和 × F_OvertimeCoefficient | |
| 9 | +-- sgfy = F_OriginalSgfy + F_OvertimeSgfy | |
| 10 | +-- | |
| 11 | +-- 健康师原始手工费:优先用 F_OriginalLaborCost,为空时用 F_LaborCost - F_OvertimeLaborCost | |
| 12 | +-- F_OriginalSgfy 为空时:用 健康师原始之和 + 科技部原始之和 补全 | |
| 13 | +-- | |
| 14 | +-- 执行前请先备份!建议在测试环境验证后再在生产环境执行。 | |
| 15 | + | |
| 16 | +-- ============================================ | |
| 17 | +-- 1. 预览:查看需要修复的记录(只读,可先执行验证) | |
| 18 | +-- ============================================ | |
| 19 | +/* | |
| 20 | +SELECT | |
| 21 | + h.F_Id, | |
| 22 | + h.F_OriginalSgfy AS 当前原始手工费, | |
| 23 | + h.F_OvertimeSgfy AS 当前加班手工费, | |
| 24 | + h.sgfy AS 当前最终手工费, | |
| 25 | + h.F_OvertimeCoefficient AS 加班系数, | |
| 26 | + COALESCE(j.jks_sum, 0) AS 健康师原始手工费之和, | |
| 27 | + COALESCE(j.jks_sum, 0) * COALESCE(h.F_OvertimeCoefficient, 0) AS 新加班手工费, | |
| 28 | + COALESCE(h.F_OriginalSgfy, COALESCE(j.jks_sum, 0) + COALESCE(k.kjb_sum, 0)) + (COALESCE(j.jks_sum, 0) * COALESCE(h.F_OvertimeCoefficient, 0)) AS 新最终手工费 | |
| 29 | +FROM lq_xh_hyhk h | |
| 30 | +LEFT JOIN ( | |
| 31 | + SELECT glkdbh, | |
| 32 | + SUM(COALESCE(F_OriginalLaborCost, GREATEST(0, COALESCE(F_LaborCost, 0) - COALESCE(F_OvertimeLaborCost, 0)))) AS jks_sum | |
| 33 | + FROM lq_xh_jksyj | |
| 34 | + WHERE F_IsEffective = 1 | |
| 35 | + GROUP BY glkdbh | |
| 36 | +) j ON h.F_Id = j.glkdbh | |
| 37 | +LEFT JOIN ( | |
| 38 | + SELECT glkdbh, | |
| 39 | + SUM(COALESCE(F_OriginalLaborCost, F_LaborCost)) AS kjb_sum | |
| 40 | + FROM lq_xh_kjbsyj | |
| 41 | + WHERE F_IsEffective = 1 | |
| 42 | + GROUP BY glkdbh | |
| 43 | +) k ON h.F_Id = k.glkdbh | |
| 44 | +WHERE h.F_IsEffective = 1 | |
| 45 | + AND ( | |
| 46 | + COALESCE(h.F_OvertimeSgfy, 0) != COALESCE(j.jks_sum, 0) * COALESCE(h.F_OvertimeCoefficient, 0) | |
| 47 | + OR COALESCE(h.sgfy, 0) != COALESCE(h.F_OriginalSgfy, COALESCE(j.jks_sum, 0) + COALESCE(k.kjb_sum, 0)) + (COALESCE(j.jks_sum, 0) * COALESCE(h.F_OvertimeCoefficient, 0)) | |
| 48 | + ) | |
| 49 | +LIMIT 50; | |
| 50 | +*/ | |
| 51 | + | |
| 52 | +-- ============================================ | |
| 53 | +-- 2. 执行修复:更新 F_OvertimeSgfy 和 sgfy | |
| 54 | +-- ============================================ | |
| 55 | +UPDATE lq_xh_hyhk h | |
| 56 | +INNER JOIN ( | |
| 57 | + SELECT glkdbh, | |
| 58 | + SUM(COALESCE(F_OriginalLaborCost, GREATEST(0, COALESCE(F_LaborCost, 0) - COALESCE(F_OvertimeLaborCost, 0)))) AS jks_sum | |
| 59 | + FROM lq_xh_jksyj | |
| 60 | + WHERE F_IsEffective = 1 | |
| 61 | + GROUP BY glkdbh | |
| 62 | +) j ON h.F_Id = j.glkdbh | |
| 63 | +LEFT JOIN ( | |
| 64 | + SELECT glkdbh, | |
| 65 | + SUM(COALESCE(F_OriginalLaborCost, F_LaborCost)) AS kjb_sum | |
| 66 | + FROM lq_xh_kjbsyj | |
| 67 | + WHERE F_IsEffective = 1 | |
| 68 | + GROUP BY glkdbh | |
| 69 | +) k ON h.F_Id = k.glkdbh | |
| 70 | +SET | |
| 71 | + h.F_OvertimeSgfy = COALESCE(j.jks_sum, 0) * COALESCE(h.F_OvertimeCoefficient, 0), | |
| 72 | + h.sgfy = COALESCE(h.F_OriginalSgfy, COALESCE(j.jks_sum, 0) + COALESCE(k.kjb_sum, 0)) + (COALESCE(j.jks_sum, 0) * COALESCE(h.F_OvertimeCoefficient, 0)) | |
| 73 | +WHERE h.F_IsEffective = 1; | |
| 74 | + | |
| 75 | +-- 说明:上述 UPDATE 使用 INNER JOIN j,因此仅更新「存在健康师业绩」的耗卡记录。 | |
| 76 | +-- 若耗卡仅有科技部、无健康师,则 j 子查询无结果,该记录不会被更新。 | |
| 77 | +-- 对于「仅科技部」的耗卡,正确逻辑应为:F_OvertimeSgfy=0,sgfy=F_OriginalSgfy,需单独处理。 | |
| 78 | + | |
| 79 | +-- ============================================ | |
| 80 | +-- 3. 补充修复:仅科技部、无健康师的耗卡(F_OvertimeSgfy 应为 0,sgfy = 原始手工费) | |
| 81 | +-- ============================================ | |
| 82 | +UPDATE lq_xh_hyhk h | |
| 83 | +LEFT JOIN ( | |
| 84 | + SELECT glkdbh | |
| 85 | + FROM lq_xh_jksyj | |
| 86 | + WHERE F_IsEffective = 1 | |
| 87 | + GROUP BY glkdbh | |
| 88 | +) j ON h.F_Id = j.glkdbh | |
| 89 | +LEFT JOIN ( | |
| 90 | + SELECT glkdbh, | |
| 91 | + SUM(COALESCE(F_OriginalLaborCost, F_LaborCost)) AS kjb_sum | |
| 92 | + FROM lq_xh_kjbsyj | |
| 93 | + WHERE F_IsEffective = 1 | |
| 94 | + GROUP BY glkdbh | |
| 95 | +) k ON h.F_Id = k.glkdbh | |
| 96 | +SET | |
| 97 | + h.F_OvertimeSgfy = 0, | |
| 98 | + h.sgfy = COALESCE(h.F_OriginalSgfy, COALESCE(k.kjb_sum, 0), h.sgfy) | |
| 99 | +WHERE h.F_IsEffective = 1 | |
| 100 | + AND j.glkdbh IS NULL | |
| 101 | + AND (COALESCE(h.F_OvertimeSgfy, 0) != 0); | |
| 102 | + | |
| 103 | +-- ============================================ | |
| 104 | +-- 4. 验证修复结果(可选) | |
| 105 | +-- ============================================ | |
| 106 | +-- 检查是否仍有不一致记录(应返回 0) | |
| 107 | +/* | |
| 108 | +SELECT COUNT(*) AS 仍不一致记录数 | |
| 109 | +FROM lq_xh_hyhk h | |
| 110 | +LEFT JOIN ( | |
| 111 | + SELECT glkdbh, | |
| 112 | + SUM(COALESCE(F_OriginalLaborCost, GREATEST(0, COALESCE(F_LaborCost, 0) - COALESCE(F_OvertimeLaborCost, 0)))) AS jks_sum | |
| 113 | + FROM lq_xh_jksyj | |
| 114 | + WHERE F_IsEffective = 1 | |
| 115 | + GROUP BY glkdbh | |
| 116 | +) j ON h.F_Id = j.glkdbh | |
| 117 | +LEFT JOIN ( | |
| 118 | + SELECT glkdbh, | |
| 119 | + SUM(COALESCE(F_OriginalLaborCost, F_LaborCost)) AS kjb_sum | |
| 120 | + FROM lq_xh_kjbsyj | |
| 121 | + WHERE F_IsEffective = 1 | |
| 122 | + GROUP BY glkdbh | |
| 123 | +) k ON h.F_Id = k.glkdbh | |
| 124 | +WHERE h.F_IsEffective = 1 | |
| 125 | + AND ( | |
| 126 | + COALESCE(h.F_OvertimeSgfy, 0) != COALESCE(j.jks_sum, 0) * COALESCE(h.F_OvertimeCoefficient, 0) | |
| 127 | + OR COALESCE(h.sgfy, 0) != COALESCE(h.F_OriginalSgfy, COALESCE(j.jks_sum, 0) + COALESCE(k.kjb_sum, 0)) + (COALESCE(j.jks_sum, 0) * COALESCE(h.F_OvertimeCoefficient, 0)) | |
| 128 | + ); | |
| 129 | +*/ | ... | ... |
test-get-tech-teacher-daily-statistics.sh
0 → 100755
| 1 | +#!/bin/bash | |
| 2 | +# GetTechTeacherDailyStatistics 接口测试脚本 | |
| 3 | +# 使用方式: ./test-get-tech-teacher-daily-statistics.sh [BASE_URL],默认 http://localhost:2011 | |
| 4 | +# 前置:API 需已启动且已重新编译(含 RefundAchievement 的 DTO 变更) | |
| 5 | + | |
| 6 | +BASE_URL="${1:-http://localhost:2011}" | |
| 7 | + | |
| 8 | +echo "=== 1. 获取 Token ===" | |
| 9 | +TOKEN=$(curl -s -X POST "$BASE_URL/api/oauth/Login" \ | |
| 10 | + -H "Content-Type: application/x-www-form-urlencoded" \ | |
| 11 | + -d "account=admin&password=e10adc3949ba59abbe56e057f20f883e" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('data',{}).get('token','') if d.get('code')==200 else '')" 2>/dev/null) | |
| 12 | +if [ -z "$TOKEN" ]; then | |
| 13 | + echo "获取 Token 失败,请检查 API 是否启动" | |
| 14 | + exit 1 | |
| 15 | +fi | |
| 16 | +echo "Token 获取成功" | |
| 17 | + | |
| 18 | +echo "" | |
| 19 | +echo "=== 2. 调用 GetTechTeacherDailyStatistics 接口 ===" | |
| 20 | +echo "时间范围: 2026-03-01 ~ 2026-03-16" | |
| 21 | +RESP=$(curl -s -X POST "$BASE_URL/api/Extend/LqDailyReport/get-tech-teacher-daily-statistics" \ | |
| 22 | + -H "Authorization: $TOKEN" \ | |
| 23 | + -H "Content-Type: application/json" \ | |
| 24 | + -d '{"startTime":"2026-03-01T00:00:00","endTime":"2026-03-16T23:59:59"}') | |
| 25 | +echo "$RESP" | python3 -m json.tool 2>/dev/null || echo "$RESP" | |
| 26 | + | |
| 27 | +CODE=$(echo "$RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('code',-1))" 2>/dev/null) | |
| 28 | +if [ "$CODE" != "200" ]; then | |
| 29 | + echo "" | |
| 30 | + echo "接口返回非 200,若为 500 且提示 set_RefundAchievement,请重启 API 服务后重试" | |
| 31 | + exit 1 | |
| 32 | +fi | |
| 33 | + | |
| 34 | +echo "" | |
| 35 | +echo "=== 3. 数据库验证 SQL(MCP MySQL 或手动执行)===" | |
| 36 | +echo "耗卡业绩汇总(lq_xh_kjbsyj + lq_xh_hyhk):" | |
| 37 | +echo "SELECT consume.kjbls as TeacherId, SUM(consume.kjblsyj) as ConsumeAchievement" | |
| 38 | +echo "FROM lq_xh_kjbsyj consume" | |
| 39 | +echo "INNER JOIN lq_xh_hyhk hyhk ON consume.glkdbh = hyhk.F_Id" | |
| 40 | +echo "WHERE consume.F_IsEffective = 1 AND hyhk.F_IsEffective = 1" | |
| 41 | +echo " AND DATE(hyhk.hksj) >= '2026-03-01' AND DATE(hyhk.hksj) <= '2026-03-16'" | |
| 42 | +echo "GROUP BY consume.kjbls;" | |
| 43 | +echo "" | |
| 44 | +echo "退卡业绩汇总(lq_hytk_kjbsyj + lq_hytk_hytk):" | |
| 45 | +echo "SELECT refund.kjbls as TeacherId, SUM(refund.kjblsyj) as RefundAchievement" | |
| 46 | +echo "FROM lq_hytk_kjbsyj refund" | |
| 47 | +echo "INNER JOIN lq_hytk_hytk hytk ON refund.gltkbh = hytk.F_Id" | |
| 48 | +echo "WHERE refund.F_IsEffective = 1 AND hytk.F_IsEffective = 1" | |
| 49 | +echo " AND DATE(hytk.tksj) >= '2026-03-01' AND DATE(hytk.tksj) <= '2026-03-16'" | |
| 50 | +echo "GROUP BY refund.kjbls;" | ... | ... |
test-xh-overtime-apis.sh
0 → 100644
| 1 | +#!/bin/bash | |
| 2 | +# 消耗单(会员耗卡)加班手工费接口测试脚本 | |
| 3 | +# 使用方式: ./test-xh-overtime-apis.sh [BASE_URL],默认 http://localhost:2011 | |
| 4 | +# 前置:API 需已启动 | |
| 5 | + | |
| 6 | +BASE_URL="${1:-http://localhost:2011}" | |
| 7 | + | |
| 8 | +echo "=== 1. 获取 Token ===" | |
| 9 | +TOKEN=$(curl -s -X POST "$BASE_URL/api/oauth/Login" \ | |
| 10 | + -H "Content-Type: application/x-www-form-urlencoded" \ | |
| 11 | + -d "account=admin&password=e10adc3949ba59abbe56e057f20f883e" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('data',{}).get('token','') if d.get('code')==200 else '')" 2>/dev/null) | |
| 12 | +if [ -z "$TOKEN" ]; then | |
| 13 | + echo "获取 Token 失败,请检查 API 是否启动" | |
| 14 | + exit 1 | |
| 15 | +fi | |
| 16 | +echo "Token 获取成功" | |
| 17 | + | |
| 18 | +echo "" | |
| 19 | +echo "=== 2. Create 消耗单(健康师12+科技部40=52,系数0.5)===" | |
| 20 | +echo "预期:F_OvertimeSgfy=6, sgfy=58" | |
| 21 | +CREATE_BODY='{"hy":"742276000326354181","md":"1649328471923847174","mdbh":"001","mdmc":"绿纤优品道店","hyzh":"17882541236","hymc":"咕噜","xfje":100,"sgfy":52,"hksj":"2026-03-16T10:00:00","overtimeCoefficient":0.5,"lqXhPxmxList":[{"px":"1","pxmc":"活动陪同","pxjg":100,"projectNumber":1,"sourceType":"耗卡","lqXhJksyjList":[{"jks":"13032810387","jksxm":"范时依","jkszh":"13032810387","jksyj":50,"laborCost":12,"kdpxNumber":1}],"lqXhKjbsyjList":[{"kjbls":"13110190690","kjblsxm":"刘雨佳","kjblszh":"13110190690","kjblsyj":50,"laborCost":40,"hdpxNumber":1}]}]}' | |
| 22 | +curl -s -X POST "$BASE_URL/api/Extend/LqXhHyhk" -H "Authorization: $TOKEN" -H "Content-Type: application/json" -d "$CREATE_BODY" | python3 -m json.tool 2>/dev/null || echo "请求失败" | |
| 23 | + | |
| 24 | +echo "" | |
| 25 | +echo "=== 3. 创建后需查库验证主表 F_OvertimeSgfy、sgfy ===" | |
| 26 | +echo "SQL: SELECT F_Id, sgfy, F_OriginalSgfy, F_OvertimeSgfy FROM lq_xh_hyhk WHERE hy='742276000326354181' ORDER BY F_CreateTime DESC LIMIT 1" | |
| 27 | + | |
| 28 | +echo "" | |
| 29 | +echo "=== 4. Update 消耗单(需替换 {id} 为实际耗卡ID,body 必须包含 id 字段)===" | |
| 30 | +echo "curl -X PUT \"$BASE_URL/api/Extend/LqXhHyhk/{id}\" -H \"Authorization: \$TOKEN\" -H \"Content-Type: application/json\" -d '{\"id\":\"{id}\",\"hy\":\"742276000326354181\",\"md\":\"1649328471923847174\",\"sgfy\":52,\"overtimeCoefficient\":0.5,\"lqXhPxmxList\":[...]}'" | |
| 31 | + | |
| 32 | +echo "" | |
| 33 | +echo "=== 5. UpdateOvertimeCoefficient(需替换 {id} 为实际耗卡ID)===" | |
| 34 | +echo "curl -X PUT \"$BASE_URL/api/Extend/LqXhHyhk/{id}/overtime-coefficient\" -H \"Authorization: \$TOKEN\" -H \"Content-Type: application/json\" -d '{\"overtimeCoefficient\":1.0}'" | ... | ... |