Commit db08ff8c22d0617ed83b80b40eaa75b8a715d0c9
1 parent
c1bcfb6c
修复店长工资产品物料查询逻辑并添加成本字段显示
1. 修复产品物料查询逻辑: - 修改所有工资服务中的产品物料查询逻辑 - 从'11月特殊规则'改为'计算本月工资时使用上月数据' - 支持跨年处理(1月工资使用上一年12月数据) 2. 添加成本信息字段显示: - 在店长工资列表页面添加成本信息分组(销售业绩、产品物料、合作项目成本、店内支出、洗毛巾费用) - 在店长工资详情页面添加成本信息部分 - 在导出功能中添加成本相关字段 - 在导入功能中添加成本相关字段的处理逻辑 3. 修改的文件: - LqStoreManagerSalaryService.cs(店长工资服务) - LqDirectorSalaryService.cs(主任工资服务) - LqBusinessUnitManagerSalaryService.cs(事业部总经理/经理工资服务) - shop.vue(店长工资列表页面) - shop-detail-dialog.vue(店长工资详情页面) - LqBusinessUnitManagerSalaryStatisticsEntity.cs(实体类注释)
Showing
6 changed files
with
156 additions
and
62 deletions
antis-ncc-admin/src/views/wageManagement/shop-detail-dialog.vue
| @@ -131,6 +131,38 @@ | @@ -131,6 +131,38 @@ | ||
| 131 | </div> | 131 | </div> |
| 132 | </div> | 132 | </div> |
| 133 | 133 | ||
| 134 | + <!-- 成本信息 --> | ||
| 135 | + <div class="detail-section"> | ||
| 136 | + <div class="section-title"> | ||
| 137 | + <i class="el-icon-data-line"></i> | ||
| 138 | + <span>成本信息</span> | ||
| 139 | + </div> | ||
| 140 | + <div class="section-content"> | ||
| 141 | + <div class="info-row"> | ||
| 142 | + <div class="info-item"> | ||
| 143 | + <span class="label">销售业绩:</span> | ||
| 144 | + <span class="value">{{ formatMoney(detailData.SalesPerformance) }}</span> | ||
| 145 | + </div> | ||
| 146 | + <div class="info-item"> | ||
| 147 | + <span class="label">产品物料:</span> | ||
| 148 | + <span class="value">{{ formatMoney(detailData.ProductMaterial) }}</span> | ||
| 149 | + </div> | ||
| 150 | + <div class="info-item"> | ||
| 151 | + <span class="label">合作项目成本:</span> | ||
| 152 | + <span class="value">{{ formatMoney(detailData.CooperationCost) }}</span> | ||
| 153 | + </div> | ||
| 154 | + <div class="info-item"> | ||
| 155 | + <span class="label">店内支出:</span> | ||
| 156 | + <span class="value">{{ formatMoney(detailData.StoreExpense) }}</span> | ||
| 157 | + </div> | ||
| 158 | + <div class="info-item"> | ||
| 159 | + <span class="label">洗毛巾费用:</span> | ||
| 160 | + <span class="value">{{ formatMoney(detailData.LaundryCost) }}</span> | ||
| 161 | + </div> | ||
| 162 | + </div> | ||
| 163 | + </div> | ||
| 164 | + </div> | ||
| 165 | + | ||
| 134 | <!-- 提成信息 --> | 166 | <!-- 提成信息 --> |
| 135 | <div class="detail-section"> | 167 | <div class="detail-section"> |
| 136 | <div class="section-title"> | 168 | <div class="section-title"> |
antis-ncc-admin/src/views/wageManagement/shop.vue
| @@ -229,6 +229,35 @@ | @@ -229,6 +229,35 @@ | ||
| 229 | </el-table-column> | 229 | </el-table-column> |
| 230 | </el-table-column> | 230 | </el-table-column> |
| 231 | 231 | ||
| 232 | + <!-- 成本信息 --> | ||
| 233 | + <el-table-column label="成本信息" align="center"> | ||
| 234 | + <el-table-column prop="SalesPerformance" label="销售业绩" width="120" align="center"> | ||
| 235 | + <template slot-scope="scope"> | ||
| 236 | + <span>{{ formatMoney(scope.row.SalesPerformance) }}</span> | ||
| 237 | + </template> | ||
| 238 | + </el-table-column> | ||
| 239 | + <el-table-column prop="ProductMaterial" label="产品物料" width="120" align="center"> | ||
| 240 | + <template slot-scope="scope"> | ||
| 241 | + <span>{{ formatMoney(scope.row.ProductMaterial) }}</span> | ||
| 242 | + </template> | ||
| 243 | + </el-table-column> | ||
| 244 | + <el-table-column prop="CooperationCost" label="合作项目成本" width="140" align="center"> | ||
| 245 | + <template slot-scope="scope"> | ||
| 246 | + <span>{{ formatMoney(scope.row.CooperationCost) }}</span> | ||
| 247 | + </template> | ||
| 248 | + </el-table-column> | ||
| 249 | + <el-table-column prop="StoreExpense" label="店内支出" width="120" align="center"> | ||
| 250 | + <template slot-scope="scope"> | ||
| 251 | + <span>{{ formatMoney(scope.row.StoreExpense) }}</span> | ||
| 252 | + </template> | ||
| 253 | + </el-table-column> | ||
| 254 | + <el-table-column prop="LaundryCost" label="洗毛巾费用" width="120" align="center"> | ||
| 255 | + <template slot-scope="scope"> | ||
| 256 | + <span>{{ formatMoney(scope.row.LaundryCost) }}</span> | ||
| 257 | + </template> | ||
| 258 | + </el-table-column> | ||
| 259 | + </el-table-column> | ||
| 260 | + | ||
| 232 | <!-- 提成信息 --> | 261 | <!-- 提成信息 --> |
| 233 | <el-table-column label="提成信息" align="center"> | 262 | <el-table-column label="提成信息" align="center"> |
| 234 | <el-table-column prop="GrossProfit" label="毛利" width="120" align="center"> | 263 | <el-table-column prop="GrossProfit" label="毛利" width="120" align="center"> |
| @@ -799,6 +828,11 @@ export default { | @@ -799,6 +828,11 @@ export default { | ||
| 799 | '消耗是否达标', | 828 | '消耗是否达标', |
| 800 | '未达标指标数', | 829 | '未达标指标数', |
| 801 | '考核扣款', | 830 | '考核扣款', |
| 831 | + '销售业绩', | ||
| 832 | + '产品物料', | ||
| 833 | + '合作项目成本', | ||
| 834 | + '店内支出', | ||
| 835 | + '洗毛巾费用', | ||
| 802 | '毛利', | 836 | '毛利', |
| 803 | '提成比例', | 837 | '提成比例', |
| 804 | '提成金额', | 838 | '提成金额', |
| @@ -859,6 +893,11 @@ export default { | @@ -859,6 +893,11 @@ export default { | ||
| 859 | item.ConsumeReached || '否', | 893 | item.ConsumeReached || '否', |
| 860 | item.UnreachedIndicatorCount || '0', | 894 | item.UnreachedIndicatorCount || '0', |
| 861 | this.formatMoney(item.AssessmentDeduction), | 895 | this.formatMoney(item.AssessmentDeduction), |
| 896 | + this.formatMoney(item.SalesPerformance), | ||
| 897 | + this.formatMoney(item.ProductMaterial), | ||
| 898 | + this.formatMoney(item.CooperationCost), | ||
| 899 | + this.formatMoney(item.StoreExpense), | ||
| 900 | + this.formatMoney(item.LaundryCost), | ||
| 862 | this.formatMoney(item.GrossProfit), | 901 | this.formatMoney(item.GrossProfit), |
| 863 | this.formatPercent(item.CommissionRate), | 902 | this.formatPercent(item.CommissionRate), |
| 864 | this.formatMoney(item.CommissionAmount), | 903 | this.formatMoney(item.CommissionAmount), |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_business_unit_manager_salary_statistics/LqBusinessUnitManagerSalaryStatisticsEntity.cs
| @@ -78,7 +78,7 @@ namespace NCC.Extend.Entitys.lq_business_unit_manager_salary_statistics | @@ -78,7 +78,7 @@ namespace NCC.Extend.Entitys.lq_business_unit_manager_salary_statistics | ||
| 78 | public decimal SalesPerformance { get; set; } | 78 | public decimal SalesPerformance { get; set; } |
| 79 | 79 | ||
| 80 | /// <summary> | 80 | /// <summary> |
| 81 | - /// 产品物料(仓库领用金额,注意11月特殊规则:11月工资算10月数据) | 81 | + /// 产品物料(仓库领用金额,使用上月数据:计算本月工资时使用上月数据) |
| 82 | /// </summary> | 82 | /// </summary> |
| 83 | [SugarColumn(ColumnName = "F_ProductMaterial")] | 83 | [SugarColumn(ColumnName = "F_ProductMaterial")] |
| 84 | public decimal ProductMaterial { get; set; } | 84 | public decimal ProductMaterial { get; set; } |
netcore/src/Modularity/Extend/NCC.Extend/LqBusinessUnitManagerSalaryService.cs
| @@ -272,12 +272,18 @@ namespace NCC.Extend | @@ -272,12 +272,18 @@ namespace NCC.Extend | ||
| 272 | .GroupBy(x => x.Md) | 272 | .GroupBy(x => x.Md) |
| 273 | .ToDictionary(g => g.Key, g => g.Sum(x => x.ActualRefundAmount ?? x.Tkje ?? 0)); | 273 | .ToDictionary(g => g.Key, g => g.Sum(x => x.ActualRefundAmount ?? x.Tkje ?? 0)); |
| 274 | 274 | ||
| 275 | - // 1.7 产品物料统计(仓库领用金额,注意11月特殊规则) | 275 | + // 1.7 产品物料统计(仓库领用金额,使用上月数据) |
| 276 | + // 计算本月工资时,使用上月数据(如:计算12月工资,使用11月数据) | ||
| 276 | var queryMonth = monthStr; | 277 | var queryMonth = monthStr; |
| 277 | - if (month == 11) | 278 | + if (month == 1) |
| 278 | { | 279 | { |
| 279 | - // 11月工资算10月数据 | ||
| 280 | - queryMonth = $"{year}10"; | 280 | + // 1月工资使用上一年12月数据 |
| 281 | + queryMonth = $"{year - 1}12"; | ||
| 282 | + } | ||
| 283 | + else | ||
| 284 | + { | ||
| 285 | + // 其他月份使用上一个月数据 | ||
| 286 | + queryMonth = $"{year}{(month - 1):D2}"; | ||
| 281 | } | 287 | } |
| 282 | var productMaterialSql = $@" | 288 | var productMaterialSql = $@" |
| 283 | SELECT | 289 | SELECT |
netcore/src/Modularity/Extend/NCC.Extend/LqDirectorSalaryService.cs
| @@ -360,12 +360,18 @@ namespace NCC.Extend | @@ -360,12 +360,18 @@ namespace NCC.Extend | ||
| 360 | .ToListAsync(); | 360 | .ToListAsync(); |
| 361 | var attendanceDict = attendanceList.ToDictionary(x => x.UserId, x => x); | 361 | var attendanceDict = attendanceList.ToDictionary(x => x.UserId, x => x); |
| 362 | 362 | ||
| 363 | - // 1.9 产品物料统计(仓库领用金额,注意11月特殊规则) | 363 | + // 1.9 产品物料统计(仓库领用金额,使用上月数据) |
| 364 | + // 计算本月工资时,使用上月数据(如:计算12月工资,使用11月数据) | ||
| 364 | var queryMonth = monthStr; | 365 | var queryMonth = monthStr; |
| 365 | - if (month == 11) | 366 | + if (month == 1) |
| 366 | { | 367 | { |
| 367 | - // 11月工资算10月数据 | ||
| 368 | - queryMonth = $"{year}10"; | 368 | + // 1月工资使用上一年12月数据 |
| 369 | + queryMonth = $"{year - 1}12"; | ||
| 370 | + } | ||
| 371 | + else | ||
| 372 | + { | ||
| 373 | + // 其他月份使用上一个月数据 | ||
| 374 | + queryMonth = $"{year}{(month - 1):D2}"; | ||
| 369 | } | 375 | } |
| 370 | var productMaterialSql = $@" | 376 | var productMaterialSql = $@" |
| 371 | SELECT | 377 | SELECT |
| @@ -520,7 +526,7 @@ namespace NCC.Extend | @@ -520,7 +526,7 @@ namespace NCC.Extend | ||
| 520 | salary.SalesPerformance = billing - refund; | 526 | salary.SalesPerformance = billing - refund; |
| 521 | 527 | ||
| 522 | // 2.5 统计各项成本 | 528 | // 2.5 统计各项成本 |
| 523 | - // 产品物料(注意11月特殊规则已在查询时处理) | 529 | + // 产品物料(使用上月数据) |
| 524 | salary.ProductMaterial = productMaterialDict.ContainsKey(storeId) ? productMaterialDict[storeId] : 0; | 530 | salary.ProductMaterial = productMaterialDict.ContainsKey(storeId) ? productMaterialDict[storeId] : 0; |
| 525 | 531 | ||
| 526 | // 合作项目成本 | 532 | // 合作项目成本 |
netcore/src/Modularity/Extend/NCC.Extend/LqStoreManagerSalaryService.cs
| @@ -314,12 +314,18 @@ namespace NCC.Extend | @@ -314,12 +314,18 @@ namespace NCC.Extend | ||
| 314 | .ToListAsync(); | 314 | .ToListAsync(); |
| 315 | var attendanceDict = attendanceList.ToDictionary(x => x.UserId, x => x); | 315 | var attendanceDict = attendanceList.ToDictionary(x => x.UserId, x => x); |
| 316 | 316 | ||
| 317 | - // 1.9 产品物料统计(仓库领用金额,注意11月特殊规则) | 317 | + // 1.9 产品物料统计(仓库领用金额,使用上月数据) |
| 318 | + // 计算本月工资时,使用上月数据(如:计算12月工资,使用11月数据) | ||
| 318 | var queryMonth = monthStr; | 319 | var queryMonth = monthStr; |
| 319 | - if (month == 11) | 320 | + if (month == 1) |
| 320 | { | 321 | { |
| 321 | - // 11月工资算10月数据 | ||
| 322 | - queryMonth = $"{year}10"; | 322 | + // 1月工资使用上一年12月数据 |
| 323 | + queryMonth = $"{year - 1}12"; | ||
| 324 | + } | ||
| 325 | + else | ||
| 326 | + { | ||
| 327 | + // 其他月份使用上一个月数据 | ||
| 328 | + queryMonth = $"{year}{(month - 1):D2}"; | ||
| 323 | } | 329 | } |
| 324 | var productMaterialSql = $@" | 330 | var productMaterialSql = $@" |
| 325 | SELECT | 331 | SELECT |
| @@ -543,7 +549,7 @@ namespace NCC.Extend | @@ -543,7 +549,7 @@ namespace NCC.Extend | ||
| 543 | // 销售业绩 = 开单业绩 - 退款业绩 | 549 | // 销售业绩 = 开单业绩 - 退款业绩 |
| 544 | salary.SalesPerformance = salary.StoreTotalPerformance; | 550 | salary.SalesPerformance = salary.StoreTotalPerformance; |
| 545 | 551 | ||
| 546 | - // 产品物料(注意11月特殊规则已在查询时处理) | 552 | + // 产品物料(使用上月数据) |
| 547 | salary.ProductMaterial = productMaterialDict.ContainsKey(storeId) ? productMaterialDict[storeId] : 0; | 553 | salary.ProductMaterial = productMaterialDict.ContainsKey(storeId) ? productMaterialDict[storeId] : 0; |
| 548 | 554 | ||
| 549 | // 合作项目成本 | 555 | // 合作项目成本 |
| @@ -946,11 +952,11 @@ namespace NCC.Extend | @@ -946,11 +952,11 @@ namespace NCC.Extend | ||
| 946 | // 批量更新 | 952 | // 批量更新 |
| 947 | if (lockedCount > 0 || unlockedCount > 0) | 953 | if (lockedCount > 0 || unlockedCount > 0) |
| 948 | { | 954 | { |
| 949 | - var salariesToUpdate = salaries.Where(s => | ||
| 950 | - (input.IsLocked && s.IsLocked == 0) || | 955 | + var salariesToUpdate = salaries.Where(s => |
| 956 | + (input.IsLocked && s.IsLocked == 0) || | ||
| 951 | (!input.IsLocked && s.IsLocked == 1 && s.EmployeeConfirmStatus != 1) | 957 | (!input.IsLocked && s.IsLocked == 1 && s.EmployeeConfirmStatus != 1) |
| 952 | ).ToList(); | 958 | ).ToList(); |
| 953 | - | 959 | + |
| 954 | if (salariesToUpdate.Any()) | 960 | if (salariesToUpdate.Any()) |
| 955 | { | 961 | { |
| 956 | await _db.Updateable(salariesToUpdate) | 962 | await _db.Updateable(salariesToUpdate) |
| @@ -962,10 +968,10 @@ namespace NCC.Extend | @@ -962,10 +968,10 @@ namespace NCC.Extend | ||
| 962 | var action = input.IsLocked ? "锁定" : "解锁"; | 968 | var action = input.IsLocked ? "锁定" : "解锁"; |
| 963 | var count = input.IsLocked ? lockedCount : unlockedCount; | 969 | var count = input.IsLocked ? lockedCount : unlockedCount; |
| 964 | var message = $"{action}成功:{count}条"; | 970 | var message = $"{action}成功:{count}条"; |
| 965 | - | 971 | + |
| 966 | if (alreadyLockedCount > 0) | 972 | if (alreadyLockedCount > 0) |
| 967 | message += $",跳过{alreadyLockedCount}条(已是{action}状态)"; | 973 | message += $",跳过{alreadyLockedCount}条(已是{action}状态)"; |
| 968 | - | 974 | + |
| 969 | if (skippedCount > 0) | 975 | if (skippedCount > 0) |
| 970 | message += $",跳过{skippedCount}条(已确认的记录不能解锁)"; | 976 | message += $",跳过{skippedCount}条(已确认的记录不能解锁)"; |
| 971 | 977 | ||
| @@ -1004,7 +1010,7 @@ namespace NCC.Extend | @@ -1004,7 +1010,7 @@ namespace NCC.Extend | ||
| 1004 | { | 1010 | { |
| 1005 | if (file == null || file.Length == 0) | 1011 | if (file == null || file.Length == 0) |
| 1006 | throw NCCException.Oh("请选择要上传的Excel文件"); | 1012 | throw NCCException.Oh("请选择要上传的Excel文件"); |
| 1007 | - | 1013 | + |
| 1008 | var allowedExtensions = new[] { ".xlsx", ".xls" }; | 1014 | var allowedExtensions = new[] { ".xlsx", ".xls" }; |
| 1009 | var fileExtension = Path.GetExtension(file.FileName).ToLowerInvariant(); | 1015 | var fileExtension = Path.GetExtension(file.FileName).ToLowerInvariant(); |
| 1010 | if (!allowedExtensions.Contains(fileExtension)) | 1016 | if (!allowedExtensions.Contains(fileExtension)) |
| @@ -1054,7 +1060,7 @@ namespace NCC.Extend | @@ -1054,7 +1060,7 @@ namespace NCC.Extend | ||
| 1054 | 1060 | ||
| 1055 | var firstColumnValue = GetColumnValue(0); | 1061 | var firstColumnValue = GetColumnValue(0); |
| 1056 | bool isOldFormat = !string.IsNullOrWhiteSpace(firstColumnValue) && (firstColumnValue == "门店名称" || (!long.TryParse(firstColumnValue, out _) && firstColumnValue.Length > 20)); | 1062 | bool isOldFormat = !string.IsNullOrWhiteSpace(firstColumnValue) && (firstColumnValue == "门店名称" || (!long.TryParse(firstColumnValue, out _) && firstColumnValue.Length > 20)); |
| 1057 | - | 1063 | + |
| 1058 | int storeNameIndex = isOldFormat ? 0 : 1; | 1064 | int storeNameIndex = isOldFormat ? 0 : 1; |
| 1059 | int employeeNameIndex = isOldFormat ? 1 : 2; | 1065 | int employeeNameIndex = isOldFormat ? 1 : 2; |
| 1060 | int offset = isOldFormat ? 0 : 1; | 1066 | int offset = isOldFormat ? 0 : 1; |
| @@ -1088,7 +1094,7 @@ namespace NCC.Extend | @@ -1088,7 +1094,7 @@ namespace NCC.Extend | ||
| 1088 | { | 1094 | { |
| 1089 | existing = await _db.Queryable<LqStoreManagerSalaryStatisticsEntity>() | 1095 | existing = await _db.Queryable<LqStoreManagerSalaryStatisticsEntity>() |
| 1090 | .Where(x => x.Id == id).FirstAsync(); | 1096 | .Where(x => x.Id == id).FirstAsync(); |
| 1091 | - | 1097 | + |
| 1092 | if (existing != null && (existing.IsLocked == 1 || existing.EmployeeConfirmStatus == 1)) | 1098 | if (existing != null && (existing.IsLocked == 1 || existing.EmployeeConfirmStatus == 1)) |
| 1093 | { | 1099 | { |
| 1094 | skippedCount++; | 1100 | skippedCount++; |
| @@ -1124,50 +1130,55 @@ namespace NCC.Extend | @@ -1124,50 +1130,55 @@ namespace NCC.Extend | ||
| 1124 | entity.ConsumeReached = GetColumnValue(14 + offset); | 1130 | entity.ConsumeReached = GetColumnValue(14 + offset); |
| 1125 | entity.UnreachedIndicatorCount = ParseInt(GetColumnValue(15 + offset)); | 1131 | entity.UnreachedIndicatorCount = ParseInt(GetColumnValue(15 + offset)); |
| 1126 | entity.AssessmentDeduction = ParseDecimal(GetColumnValue(16 + offset)); | 1132 | entity.AssessmentDeduction = ParseDecimal(GetColumnValue(16 + offset)); |
| 1127 | - entity.GrossProfit = ParseDecimal(GetColumnValue(17 + offset)); | ||
| 1128 | - entity.CommissionRate = ParseDecimal(GetColumnValue(18 + offset)); | ||
| 1129 | - entity.CommissionAmount = ParseDecimal(GetColumnValue(19 + offset)); | ||
| 1130 | - entity.BaseSalary = ParseDecimal(GetColumnValue(20 + offset)); | ||
| 1131 | - entity.ActualBaseSalary = ParseDecimal(GetColumnValue(21 + offset)); | ||
| 1132 | - entity.GrossSalary = ParseDecimal(GetColumnValue(22 + offset)); | ||
| 1133 | - entity.WorkingDays = ParseInt(GetColumnValue(23 + offset)); | ||
| 1134 | - entity.LeaveDays = ParseInt(GetColumnValue(24 + offset)); | ||
| 1135 | - // Excel中的车补(25)、少休费(26)、全勤奖(27)字段在实体类中没有对应字段,跳过 | ||
| 1136 | - entity.MonthlyTrainingSubsidy = ParseDecimal(GetColumnValue(28 + offset)); | ||
| 1137 | - entity.MonthlyTransportSubsidy = ParseDecimal(GetColumnValue(29 + offset)); | ||
| 1138 | - entity.LastMonthTrainingSubsidy = ParseDecimal(GetColumnValue(30 + offset)); | ||
| 1139 | - entity.LastMonthTransportSubsidy = ParseDecimal(GetColumnValue(31 + offset)); | ||
| 1140 | - entity.TotalSubsidy = ParseDecimal(GetColumnValue(32 + offset)); | ||
| 1141 | - entity.MissingCard = ParseDecimal(GetColumnValue(33 + offset)); | ||
| 1142 | - entity.LateArrival = ParseDecimal(GetColumnValue(34 + offset)); | ||
| 1143 | - entity.LeaveDeduction = ParseDecimal(GetColumnValue(35 + offset)); | ||
| 1144 | - entity.SocialInsuranceDeduction = ParseDecimal(GetColumnValue(36 + offset)); | ||
| 1145 | - entity.RewardDeduction = ParseDecimal(GetColumnValue(37 + offset)); | ||
| 1146 | - entity.AccommodationDeduction = ParseDecimal(GetColumnValue(38 + offset)); | ||
| 1147 | - entity.StudyPeriodDeduction = ParseDecimal(GetColumnValue(39 + offset)); | ||
| 1148 | - entity.WorkClothesDeduction = ParseDecimal(GetColumnValue(40 + offset)); | ||
| 1149 | - entity.TotalDeduction = ParseDecimal(GetColumnValue(41 + offset)); | ||
| 1150 | - entity.Bonus = ParseDecimal(GetColumnValue(42 + offset)); | ||
| 1151 | - entity.ReturnPhoneDeposit = ParseDecimal(GetColumnValue(43 + offset)); | ||
| 1152 | - entity.ReturnAccommodationDeposit = ParseDecimal(GetColumnValue(44 + offset)); | ||
| 1153 | - entity.LastMonthSupplement = ParseDecimal(GetColumnValue(45 + offset)); | ||
| 1154 | - entity.ActualSalary = ParseDecimal(GetColumnValue(46 + offset)); | ||
| 1155 | - entity.MonthlyPaymentStatus = GetColumnValue(47 + offset); | ||
| 1156 | - entity.PaidAmount = ParseDecimal(GetColumnValue(48 + offset)); | ||
| 1157 | - entity.PendingAmount = ParseDecimal(GetColumnValue(49 + offset)); | ||
| 1158 | - entity.MonthlyTotalPayment = ParseDecimal(GetColumnValue(50 + offset)); | 1133 | + entity.SalesPerformance = ParseDecimal(GetColumnValue(17 + offset)); |
| 1134 | + entity.ProductMaterial = ParseDecimal(GetColumnValue(18 + offset)); | ||
| 1135 | + entity.CooperationCost = ParseDecimal(GetColumnValue(19 + offset)); | ||
| 1136 | + entity.StoreExpense = ParseDecimal(GetColumnValue(20 + offset)); | ||
| 1137 | + entity.LaundryCost = ParseDecimal(GetColumnValue(21 + offset)); | ||
| 1138 | + entity.GrossProfit = ParseDecimal(GetColumnValue(22 + offset)); | ||
| 1139 | + entity.CommissionRate = ParseDecimal(GetColumnValue(23 + offset)); | ||
| 1140 | + entity.CommissionAmount = ParseDecimal(GetColumnValue(24 + offset)); | ||
| 1141 | + entity.BaseSalary = ParseDecimal(GetColumnValue(25 + offset)); | ||
| 1142 | + entity.ActualBaseSalary = ParseDecimal(GetColumnValue(26 + offset)); | ||
| 1143 | + entity.GrossSalary = ParseDecimal(GetColumnValue(27 + offset)); | ||
| 1144 | + entity.WorkingDays = ParseInt(GetColumnValue(28 + offset)); | ||
| 1145 | + entity.LeaveDays = ParseInt(GetColumnValue(29 + offset)); | ||
| 1146 | + // Excel中的车补(30)、少休费(31)、全勤奖(32)字段在实体类中没有对应字段,跳过 | ||
| 1147 | + entity.MonthlyTrainingSubsidy = ParseDecimal(GetColumnValue(33 + offset)); | ||
| 1148 | + entity.MonthlyTransportSubsidy = ParseDecimal(GetColumnValue(34 + offset)); | ||
| 1149 | + entity.LastMonthTrainingSubsidy = ParseDecimal(GetColumnValue(35 + offset)); | ||
| 1150 | + entity.LastMonthTransportSubsidy = ParseDecimal(GetColumnValue(36 + offset)); | ||
| 1151 | + entity.TotalSubsidy = ParseDecimal(GetColumnValue(37 + offset)); | ||
| 1152 | + entity.MissingCard = ParseDecimal(GetColumnValue(38 + offset)); | ||
| 1153 | + entity.LateArrival = ParseDecimal(GetColumnValue(39 + offset)); | ||
| 1154 | + entity.LeaveDeduction = ParseDecimal(GetColumnValue(40 + offset)); | ||
| 1155 | + entity.SocialInsuranceDeduction = ParseDecimal(GetColumnValue(41 + offset)); | ||
| 1156 | + entity.RewardDeduction = ParseDecimal(GetColumnValue(42 + offset)); | ||
| 1157 | + entity.AccommodationDeduction = ParseDecimal(GetColumnValue(43 + offset)); | ||
| 1158 | + entity.StudyPeriodDeduction = ParseDecimal(GetColumnValue(44 + offset)); | ||
| 1159 | + entity.WorkClothesDeduction = ParseDecimal(GetColumnValue(45 + offset)); | ||
| 1160 | + entity.TotalDeduction = ParseDecimal(GetColumnValue(46 + offset)); | ||
| 1161 | + entity.Bonus = ParseDecimal(GetColumnValue(47 + offset)); | ||
| 1162 | + entity.ReturnPhoneDeposit = ParseDecimal(GetColumnValue(48 + offset)); | ||
| 1163 | + entity.ReturnAccommodationDeposit = ParseDecimal(GetColumnValue(49 + offset)); | ||
| 1164 | + entity.LastMonthSupplement = ParseDecimal(GetColumnValue(50 + offset)); | ||
| 1165 | + entity.ActualSalary = ParseDecimal(GetColumnValue(51 + offset)); | ||
| 1166 | + entity.MonthlyPaymentStatus = GetColumnValue(52 + offset); | ||
| 1167 | + entity.PaidAmount = ParseDecimal(GetColumnValue(53 + offset)); | ||
| 1168 | + entity.PendingAmount = ParseDecimal(GetColumnValue(54 + offset)); | ||
| 1169 | + entity.MonthlyTotalPayment = ParseDecimal(GetColumnValue(55 + offset)); | ||
| 1159 | // 处理门店分类(Excel中可能是"A类"、"B类"、"C类") | 1170 | // 处理门店分类(Excel中可能是"A类"、"B类"、"C类") |
| 1160 | - var storeCategoryStr = GetColumnValue(51 + offset); | 1171 | + var storeCategoryStr = GetColumnValue(56 + offset); |
| 1161 | if (!string.IsNullOrWhiteSpace(storeCategoryStr)) | 1172 | if (!string.IsNullOrWhiteSpace(storeCategoryStr)) |
| 1162 | { | 1173 | { |
| 1163 | if (storeCategoryStr.Contains("A") || storeCategoryStr == "1") entity.StoreCategory = 1; | 1174 | if (storeCategoryStr.Contains("A") || storeCategoryStr == "1") entity.StoreCategory = 1; |
| 1164 | else if (storeCategoryStr.Contains("B") || storeCategoryStr == "2") entity.StoreCategory = 2; | 1175 | else if (storeCategoryStr.Contains("B") || storeCategoryStr == "2") entity.StoreCategory = 2; |
| 1165 | else if (storeCategoryStr.Contains("C") || storeCategoryStr == "3") entity.StoreCategory = 3; | 1176 | else if (storeCategoryStr.Contains("C") || storeCategoryStr == "3") entity.StoreCategory = 3; |
| 1166 | } | 1177 | } |
| 1167 | - entity.IsNewStore = GetColumnValue(52 + offset) == "是" ? "是" : "否"; | ||
| 1168 | - entity.NewStoreProtectionStage = ParseInt(GetColumnValue(53 + offset)); | ||
| 1169 | - // 处理锁定状态(第55列,索引54) | ||
| 1170 | - var isLockedStr = GetColumnValue(54 + offset); | 1178 | + entity.IsNewStore = GetColumnValue(57 + offset) == "是" ? "是" : "否"; |
| 1179 | + entity.NewStoreProtectionStage = ParseInt(GetColumnValue(58 + offset)); | ||
| 1180 | + // 处理锁定状态(第60列,索引59) | ||
| 1181 | + var isLockedStr = GetColumnValue(59 + offset); | ||
| 1171 | if (isLockedStr == "已锁定" || isLockedStr == "1") entity.IsLocked = 1; | 1182 | if (isLockedStr == "已锁定" || isLockedStr == "1") entity.IsLocked = 1; |
| 1172 | else entity.IsLocked = 0; | 1183 | else entity.IsLocked = 0; |
| 1173 | 1184 | ||
| @@ -1189,7 +1200,7 @@ namespace NCC.Extend | @@ -1189,7 +1200,7 @@ namespace NCC.Extend | ||
| 1189 | if (!string.IsNullOrEmpty(user.Mdid) && string.IsNullOrWhiteSpace(storeName)) | 1200 | if (!string.IsNullOrEmpty(user.Mdid) && string.IsNullOrWhiteSpace(storeName)) |
| 1190 | entity.StoreId = user.Mdid; | 1201 | entity.StoreId = user.Mdid; |
| 1191 | } | 1202 | } |
| 1192 | - | 1203 | + |
| 1193 | if (!string.IsNullOrWhiteSpace(storeName) && string.IsNullOrEmpty(entity.StoreId)) | 1204 | if (!string.IsNullOrWhiteSpace(storeName) && string.IsNullOrEmpty(entity.StoreId)) |
| 1194 | { | 1205 | { |
| 1195 | var store = await _db.Queryable<LqMdxxEntity>() | 1206 | var store = await _db.Queryable<LqMdxxEntity>() |
| @@ -1198,7 +1209,7 @@ namespace NCC.Extend | @@ -1198,7 +1209,7 @@ namespace NCC.Extend | ||
| 1198 | } | 1209 | } |
| 1199 | } | 1210 | } |
| 1200 | } | 1211 | } |
| 1201 | - | 1212 | + |
| 1202 | entity.UpdateTime = DateTime.Now; | 1213 | entity.UpdateTime = DateTime.Now; |
| 1203 | if (existing != null) recordsToUpdate.Add(entity); | 1214 | if (existing != null) recordsToUpdate.Add(entity); |
| 1204 | else recordsToInsert.Add(entity); | 1215 | else recordsToInsert.Add(entity); |