| | |
| | | private readonly IDtChannelArticleNewsService _dtChannelArticleNewsService; |
| | | private readonly IConfiguration _configuration; |
| | | private readonly IHttpClientFactory _clientFactory; |
| | | private readonly IAskService _askService; |
| | | |
| | | private readonly decimal jiabangongzibiaozhun = new decimal(21.5); |
| | | public TimedBackgroundService(ILogger<TimedBackgroundService> logger, IServiceScopeFactory factory) |
| | |
| | | _dtChannelArticleNewsService = factory.CreateScope().ServiceProvider.GetRequiredService<IDtChannelArticleNewsService>(); |
| | | _configuration = factory.CreateScope().ServiceProvider.GetRequiredService<IConfiguration>(); |
| | | _clientFactory = factory.CreateScope().ServiceProvider.GetRequiredService<IHttpClientFactory>(); |
| | | _askService= factory.CreateScope().ServiceProvider.GetRequiredService<IAskService>(); |
| | | } |
| | | protected override async Task ExecuteAsync(CancellationToken stoppingToken) |
| | | { |
| | |
| | | AdmAttendanceRuleDTO admAttendanceRuleDTO = _attendanceRuleService.Get(""); |
| | | var jiejiari = admAttendanceRulesDtlDTOs.Where(x => x.Name == "jiejiari").ToList(); |
| | | var tiaoxiuri = admAttendanceRulesDtlDTOs.Where(x => x.Name == "tiaoxiuri").ToList(); |
| | | var jiabanri = admAttendanceRulesDtlDTOs.Where(x => x.Name == "jiabanri").ToList(); |
| | | |
| | | //每天的考勤时间点 |
| | | string[] WorkingStart = admAttendanceRuleDTO.WorkingStart.Split('.'); |
| | |
| | | //计算加班时间 |
| | | if (admSignInDTO != null && admSignInDTO.OvertimeIn.HasValue && admSignInDTO.OvertimeOut.HasValue) |
| | | { |
| | | var admAskovertimeDTO = _askService.GetAskovertimeByUeridAndjiabantime(userList[a].Id, dateminkaoqin); |
| | | if(admAskovertimeDTO!=null&& !string.IsNullOrEmpty(admAskovertimeDTO.Id)) |
| | | { |
| | | DateTime overdate = admSignInDTO.OvertimeIn.Value; |
| | | if (admSignInDTO.OvertimeIn.Value< StratTimeOffworkEnd) |
| | | { |
| | | overdate = StratTimeOffworkEnd; |
| | | } |
| | | TimeSpan jiaban = admSignInDTO.OvertimeOut.Value.Subtract(overdate); |
| | | decimal jiabanshijian = jiaban.Hours; |
| | | if(new decimal(jiaban.Hours) > admAskovertimeDTO.Overtime.Value) |
| | | { |
| | | jiabanshijian = admAskovertimeDTO.Overtime.Value; |
| | | } |
| | | |
| | | Jiaban += Math.Round((decimal)(jiaban.Hours * 60) / (decimal)shangbanshijian, 2); |
| | | |
| | | |
| | | |
| | | Jiaban += Math.Round(jiabanshijian * 60 / shangbanshijian, 2); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //判断今天是否公司要求加班 |
| | | var shifoujiaban = jiabanri.Exists(x => x.ValueStart <= dateminkaoqin && x.ValueEnd >= dateminkaoqin); |
| | | if (shifoujiaban) |
| | | { |
| | | |
| | | //判断考勤时间的连续性 |
| | |
| | | dateBiJiaoDTO.EndTime = admSignInDTO.MorningOut; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | var jiabanbuka = admAskLeaveOffDTOMin.Where(x => x.Lavetype == "3").ToList(); |
| | | foreach (var admAskLeaveOff in jiabanbuka) |
| | | foreach (var admAskLeave in admAskLeaveDTOMin) |
| | | { |
| | | if (admAskLeave.StratTime < StratTimeWorkingEnd) |
| | | { |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeave.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeave.EndTime; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | |
| | | } |
| | | |
| | | foreach (var admAskLeaveOff in admAskLeaveOffDTOMin) |
| | | { |
| | | if (admAskLeaveOff.StratTime < StratTimeWorkingEnd) |
| | | { |
| | |
| | | dateBiJiaoDTOs = dateBiJiaoDTOs.OrderBy(x => x.StartTime).ToList(); |
| | | if (dateBiJiaoDTOs.Count == 0) |
| | | { |
| | | Kuanggong += new decimal(0.5); |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | |
| | | } |
| | | if (kuanggong) |
| | | { |
| | | Kuanggong += new decimal(0.5); |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | |
| | | { |
| | | if (shangwukuanggong == 0) |
| | | { |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | shangwukuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | } |
| | | |
| | | } |
| | |
| | | { |
| | | if (shangwukuanggong == 0) |
| | | { |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | shangwukuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | } |
| | | |
| | | } |
| | |
| | | dateBiJiaoDTO.EndTime = admSignInDTO.AfternoonOut; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | var jiabanbukaxiawu = admAskLeaveOffDTOMin.Where(x => x.Lavetype == "3").ToList(); |
| | | foreach (var admAskLeaveOff in jiabanbukaxiawu) |
| | | foreach (var admAskLeave in admAskLeaveDTOMin) |
| | | { |
| | | if (admAskLeave.EndTime > StratTimeOffworkStart) |
| | | { |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeave.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeave.EndTime; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | |
| | | } |
| | | foreach (var admAskLeaveOff in admAskLeaveOffDTOMin) |
| | | { |
| | | if (admAskLeaveOff.EndTime > StratTimeOffworkStart) |
| | | { |
| | |
| | | dateBiJiaoDTOs = dateBiJiaoDTOs.OrderBy(x => x.StartTime).ToList(); |
| | | if (dateBiJiaoDTOs.Count == 0) |
| | | { |
| | | //Kuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | |
| | | } |
| | | if (kuanggong) |
| | | { |
| | | //Kuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | |
| | | if (xiawuwukuanggong == 0) |
| | | { |
| | | xiawuwukuanggong += new decimal(0.5); |
| | | //Kuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | } |
| | | |
| | | } |
| | |
| | | if (xiawuwukuanggong == 0) |
| | | { |
| | | xiawuwukuanggong += new decimal(0.5); |
| | | //Kuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | //计算当天加班天数 |
| | | Jiaban += (1 - Kuanggongtianshu ); |
| | | |
| | | Kuanggongtianshu = 0; |
| | | //计算当天请假 |
| | | List<DateBiJiaoDTO> qingjias = new List<DateBiJiaoDTO>(); |
| | | |
| | | var feichuqinjia = admAskLeaveDTOMin.Where(x => x.Lavetype != "4").ToList(); |
| | | foreach (var admAskLeave in feichuqinjia) |
| | | { |
| | | |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeave.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeave.EndTime; |
| | | qingjias.Add(dateBiJiaoDTO); |
| | | |
| | | } |
| | | |
| | | var feichuqinxiaojia = admAskLeaveOffDTOMin.Where(x => x.Lavetype == "2").ToList(); |
| | | foreach (var admAskLeaveOff in feichuqinxiaojia) |
| | | { |
| | | |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeaveOff.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeaveOff.EndTime; |
| | | qingjias.Add(dateBiJiaoDTO); |
| | | |
| | | } |
| | | |
| | | |
| | | foreach (var qingjia in qingjias) |
| | | { |
| | | if (qingjia.StartTime < StratTimeWorkingStart) |
| | | { |
| | | qingjia.StartTime = StratTimeWorkingStart; |
| | | } |
| | | if (qingjia.StartTime > StratTimeWorkingEnd && qingjia.StartTime < StratTimeOffworkStart) |
| | | { |
| | | qingjia.StartTime = StratTimeOffworkStart; |
| | | } |
| | | |
| | | |
| | | if (qingjia.EndTime > StratTimeWorkingEnd && qingjia.EndTime < StratTimeOffworkStart) |
| | | { |
| | | qingjia.EndTime = StratTimeWorkingEnd; |
| | | } |
| | | |
| | | |
| | | if (qingjia.EndTime > StratTimeOffworkEnd) |
| | | { |
| | | qingjia.EndTime = StratTimeOffworkEnd; |
| | | } |
| | | TimeSpan qingjiashiijan = qingjia.EndTime.Value.Subtract(qingjia.StartTime.Value); |
| | | if (qingjia.StartTime <= StratTimeWorkingEnd && qingjia.EndTime >= StratTimeOffworkStart) |
| | | { |
| | | TimeSpan wuxiushijian = StratTimeOffworkStart.Subtract(StratTimeWorkingEnd); |
| | | dangtianqingjia += Math.Round(((decimal)(qingjiashiijan.Hours * 60 + qingjiashiijan.Minutes - wuxiushijian.Hours * 60 - wuxiushijian.Minutes)) / ((decimal)shangbanshijian), 2); |
| | | } |
| | | else |
| | | { |
| | | dangtianqingjia += Math.Round(((decimal)(qingjiashiijan.Hours * 60 + qingjiashiijan.Minutes)) / ((decimal)shangbanshijian), 2); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | Qingjia += dangtianqingjia; |
| | | //计算当天出勤天数 |
| | | Jiaban += (1 - Kuanggongtianshu - dangtianqingjia); |
| | | |
| | | |
| | | //计算销假(出差,补卡) |
| | | List<DateBiJiaoDTO> xiaojias = new List<DateBiJiaoDTO>(); |
| | | |
| | | var xiaojiala = admAskLeaveOffDTOMin.Where(x => x.Lavetype != "2").ToList(); |
| | | foreach (var admAskLeaveOff in xiaojiala) |
| | | { |
| | | |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeaveOff.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeaveOff.EndTime; |
| | | xiaojias.Add(dateBiJiaoDTO); |
| | | |
| | | } |
| | | |
| | | foreach (var xiaojia in xiaojias) |
| | | { |
| | | if (xiaojia.StartTime < StratTimeWorkingStart) |
| | | { |
| | | xiaojia.StartTime = StratTimeWorkingStart; |
| | | } |
| | | if (xiaojia.StartTime > StratTimeWorkingEnd && xiaojia.StartTime < StratTimeOffworkStart) |
| | | { |
| | | xiaojia.StartTime = StratTimeOffworkStart; |
| | | } |
| | | |
| | | |
| | | if (xiaojia.EndTime > StratTimeWorkingEnd && xiaojia.EndTime < StratTimeOffworkStart) |
| | | { |
| | | xiaojia.EndTime = StratTimeWorkingEnd; |
| | | } |
| | | |
| | | |
| | | if (xiaojia.EndTime > StratTimeOffworkEnd) |
| | | { |
| | | xiaojia.EndTime = StratTimeOffworkEnd; |
| | | } |
| | | TimeSpan qingjiashiijan = xiaojia.EndTime.Value.Subtract(xiaojia.StartTime.Value); |
| | | if (xiaojia.StartTime <= StratTimeWorkingEnd && xiaojia.EndTime >= StratTimeOffworkStart) |
| | | { |
| | | TimeSpan wuxiushijian = StratTimeOffworkStart.Subtract(StratTimeWorkingEnd); |
| | | dangtianxiaojia += Math.Round(((decimal)(qingjiashiijan.Hours * 60 + qingjiashiijan.Minutes - wuxiushijian.Hours * 60 - wuxiushijian.Minutes)) / ((decimal)shangbanshijian), 2); |
| | | } |
| | | else |
| | | { |
| | | dangtianxiaojia += Math.Round(((decimal)(qingjiashiijan.Hours * 60 + qingjiashiijan.Minutes)) / ((decimal)shangbanshijian), 2); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | Xiaojia += dangtianxiaojia; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //加班 |
| | | //计算加班时间 |
| | | if (admSignInDTO != null && admSignInDTO.OvertimeIn.HasValue && admSignInDTO.OvertimeOut.HasValue) |
| | | { |
| | | var admAskovertimeDTO = _askService.GetAskovertimeByUeridAndjiabantime(userList[a].Id, dateminkaoqin); |
| | | if (admAskovertimeDTO != null && !string.IsNullOrEmpty(admAskovertimeDTO.Id)) |
| | | { |
| | | //如果当天是公司要求加班,则自己申请的加班从下班开始算 |
| | | DateTime overdate = admSignInDTO.OvertimeIn.Value; |
| | | if (admSignInDTO.OvertimeIn.Value < StratTimeOffworkEnd) |
| | | if (shifoujiaban && admSignInDTO.OvertimeIn.Value < StratTimeOffworkEnd) |
| | | { |
| | | overdate = StratTimeOffworkEnd; |
| | | } |
| | | TimeSpan jiaban = admSignInDTO.OvertimeOut.Value.Subtract(overdate); |
| | | decimal jiabanshijian = jiaban.Hours; |
| | | if (new decimal(jiaban.Hours) > admAskovertimeDTO.Overtime.Value) |
| | | { |
| | | jiabanshijian = admAskovertimeDTO.Overtime.Value; |
| | | } |
| | | |
| | | Jiaban += Math.Round((decimal)(jiaban.Hours * 60) / (decimal)shangbanshijian, 2); |
| | | |
| | | |
| | | |
| | | Jiaban += Math.Round(jiabanshijian * 60 / shangbanshijian, 2); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | hrSalaryDTO.Yufagongziheji += (hrSalaryDTO.Daozhanggongzi- hrSalaryDTO.Yufagongzi); |
| | | if (hrSalaryDTO.Daozhanggongzi < hrSalaryDTO.Yufagongzi) |
| | | { |
| | | hrSalaryDTO.Daozhanggongzi = hrSalaryDTO.Yufagongzi; |
| | | } |
| | | } |
| | | hrSalaryDTO.RecStatus = "A"; |
| | | hrSalaryDTO.Islock = "D"; |
| | |
| | | var jiejiari = admAttendanceRulesDtlDTOs.Where(x => x.Name == "jiejiari").ToList(); |
| | | |
| | | var tiaoxiuri = admAttendanceRulesDtlDTOs.Where(x => x.Name == "tiaoxiuri").ToList(); |
| | | |
| | | var jiabanri = admAttendanceRulesDtlDTOs.Where(x => x.Name == "jiabanri").ToList(); |
| | | |
| | | //每天的考勤时间点 |
| | | string[] WorkingStart = admAttendanceRuleDTO.WorkingStart.Split('.'); |
| | |
| | | else |
| | | { |
| | | |
| | | |
| | | //是否调休日 调休日需要上班 |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date) |
| | | || jiabanri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) |
| | | { |
| | | if (StratTime <= StratTimeWorkingStart) |
| | | { |
| | |
| | | { |
| | | |
| | | //是否调休日 调休日需要上班 |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= EndTime.Date && x.ValueEnd >= EndTime.Date)) |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= EndTime.Date && x.ValueEnd >= EndTime.Date) |
| | | || jiabanri.Exists(x => x.ValueStart <= EndTime.Date && x.ValueEnd >= EndTime.Date)) |
| | | { |
| | | if (EndTime >= EndTimeOffworkEnd) |
| | | { |
| | |
| | | { |
| | | |
| | | //是否调休日 调休日需要上班 |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= dateTimenow.Date && x.ValueEnd >= dateTimenow.Date) |
| | | || jiabanri.Exists(x => x.ValueStart <= dateTimenow.Date && x.ValueEnd >= dateTimenow.Date)) |
| | | { |
| | | LavehTime += shangbanshijian; |
| | | } |
| | |
| | | else |
| | | { |
| | | //是否调休日 调休日需要上班 |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date) |
| | | || jiabanri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) |
| | | { |
| | | LavehTime -= shangbanshijian; |
| | | } |