| | |
| | | using DTO; |
| | | using IServices; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.DependencyInjection; |
| | | using Microsoft.Extensions.Hosting; |
| | | using Microsoft.Extensions.Logging; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json.Linq; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Net.Http; |
| | | using System.Net.Http.Headers; |
| | | using System.Threading; |
| | | using System.Threading.Tasks; |
| | | using System.Transactions; |
| | |
| | | private readonly ICusFangwenjiluService _cusFangwenjiluService; |
| | | private readonly ILiaotianService _liaotianService; |
| | | private readonly IDtChannelArticleNewsService _dtChannelArticleNewsService; |
| | | private readonly IConfiguration _configuration; |
| | | private readonly IHttpClientFactory _clientFactory; |
| | | private readonly IAskService _askService; |
| | | private readonly IAdmEvaluateService _admEvaluateService; |
| | | |
| | | private readonly decimal jiabangongzibiaozhun = new decimal(21.5); |
| | | public TimedBackgroundService(ILogger<TimedBackgroundService> logger, IServiceScopeFactory factory) |
| | |
| | | _cusFangwenjiluService = factory.CreateScope().ServiceProvider.GetRequiredService<ICusFangwenjiluService>(); |
| | | _liaotianService = factory.CreateScope().ServiceProvider.GetRequiredService<ILiaotianService>(); |
| | | _dtChannelArticleNewsService = factory.CreateScope().ServiceProvider.GetRequiredService<IDtChannelArticleNewsService>(); |
| | | _configuration = factory.CreateScope().ServiceProvider.GetRequiredService<IConfiguration>(); |
| | | _clientFactory = factory.CreateScope().ServiceProvider.GetRequiredService<IHttpClientFactory>(); |
| | | _askService= factory.CreateScope().ServiceProvider.GetRequiredService<IAskService>(); |
| | | _admEvaluateService = factory.CreateScope().ServiceProvider.GetRequiredService<IAdmEvaluateService>(); |
| | | } |
| | | protected override async Task ExecuteAsync(CancellationToken stoppingToken) |
| | | { |
| | |
| | | //using (TransactionScope scope = new TransactionScope()) |
| | | //{ |
| | | this.jisuankaoqin(); |
| | | this.jisuangongzi(); |
| | | await this.jisuangongziAsync(); |
| | | //scope.Complete(); |
| | | //} |
| | | |
| | |
| | | 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) |
| | | { |
| | | DateTime overdate = admSignInDTO.OvertimeIn.Value; |
| | | if (admSignInDTO.OvertimeIn.Value< StratTimeOffworkEnd) |
| | | var admAskovertimeDTO = _askService.GetAskovertimeByUeridAndjiabantime(userList[a].Id, dateminkaoqin); |
| | | if(admAskovertimeDTO!=null&& !string.IsNullOrEmpty(admAskovertimeDTO.Id)) |
| | | { |
| | | overdate = StratTimeOffworkEnd; |
| | | 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(jiabanshijian * 60 / shangbanshijian, 2); |
| | | } |
| | | TimeSpan jiaban = admSignInDTO.OvertimeOut.Value.Subtract(overdate); |
| | | |
| | | Jiaban += Math.Round((decimal)(jiaban.Hours * 60) / (decimal)shangbanshijian, 2); |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | else |
| | | { |
| | | |
| | | //判断考勤时间的连续性 |
| | | |
| | | //判断早上是否迟到,判断早上是否早退,早退矿工处理 |
| | | DateTime? starttime = null; |
| | | DateTime? endttime = null; |
| | | bool kuanggong = false; |
| | | List<DateBiJiaoDTO> dateBiJiaoDTOs = new List<DateBiJiaoDTO>(); |
| | | if (admSignInDTO != null && admSignInDTO.MorningIn.HasValue && admSignInDTO.MorningOut.HasValue) |
| | | //判断今天是否公司要求加班 |
| | | var shifoujiaban = jiabanri.Exists(x => x.ValueStart <= dateminkaoqin && x.ValueEnd >= dateminkaoqin); |
| | | if (shifoujiaban) |
| | | { |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admSignInDTO.MorningIn; |
| | | dateBiJiaoDTO.EndTime = admSignInDTO.MorningOut; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | var jiabanbuka = admAskLeaveOffDTOMin.Where(x => x.Lavetype == "3").ToList(); |
| | | foreach (var admAskLeaveOff in jiabanbuka) |
| | | { |
| | | if (admAskLeaveOff.StratTime < StratTimeWorkingEnd) |
| | | |
| | | //判断考勤时间的连续性 |
| | | |
| | | //判断早上是否迟到,判断早上是否早退,早退矿工处理 |
| | | DateTime? starttime = null; |
| | | DateTime? endttime = null; |
| | | bool kuanggong = false; |
| | | List<DateBiJiaoDTO> dateBiJiaoDTOs = new List<DateBiJiaoDTO>(); |
| | | if (admSignInDTO != null && admSignInDTO.MorningIn.HasValue && admSignInDTO.MorningOut.HasValue) |
| | | { |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeaveOff.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeaveOff.EndTime; |
| | | dateBiJiaoDTO.StartTime = admSignInDTO.MorningIn; |
| | | dateBiJiaoDTO.EndTime = admSignInDTO.MorningOut; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | dateBiJiaoDTOs = dateBiJiaoDTOs.OrderBy(x => x.StartTime).ToList(); |
| | | if (dateBiJiaoDTOs.Count == 0) |
| | | { |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | | { |
| | | //判断上午考勤时间是否全覆盖 |
| | | for (int i = 0; i < dateBiJiaoDTOs.Count; i++) |
| | | foreach (var admAskLeave in admAskLeaveDTOMin) |
| | | { |
| | | if (i == 0) |
| | | if (admAskLeave.StratTime < StratTimeWorkingEnd) |
| | | { |
| | | starttime = dateBiJiaoDTOs[i].StartTime; |
| | | endttime = dateBiJiaoDTOs[i].EndTime; |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeave.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeave.EndTime; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | else |
| | | { |
| | | if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime) |
| | | { |
| | | kuanggong = true; |
| | | break; |
| | | } |
| | | else if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime) |
| | | { |
| | | endttime = dateBiJiaoDTOs[i].EndTime; |
| | | } |
| | | } |
| | | |
| | | } |
| | | if (kuanggong) |
| | | |
| | | foreach (var admAskLeaveOff in admAskLeaveOffDTOMin) |
| | | { |
| | | if (admAskLeaveOff.StratTime < StratTimeWorkingEnd) |
| | | { |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeaveOff.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeaveOff.EndTime; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | dateBiJiaoDTOs = dateBiJiaoDTOs.OrderBy(x => x.StartTime).ToList(); |
| | | if (dateBiJiaoDTOs.Count == 0) |
| | | { |
| | | Kuanggong += new decimal(0.5); |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | | { |
| | | decimal shangwukuanggong = 0; |
| | | if (starttime > StratTimeWorkingStart) |
| | | //判断上午考勤时间是否全覆盖 |
| | | for (int i = 0; i < dateBiJiaoDTOs.Count; i++) |
| | | { |
| | | TimeSpan chidao = starttime.Value.Subtract(StratTimeWorkingStart); |
| | | if (chidao.Days > 0 || (chidao.Hours * 60 + chidao.Minutes) > admAttendanceRuleDTO.Absenteeism) |
| | | if (i == 0) |
| | | { |
| | | if (shangwukuanggong == 0) |
| | | { |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | |
| | | starttime = dateBiJiaoDTOs[i].StartTime; |
| | | endttime = dateBiJiaoDTOs[i].EndTime; |
| | | } |
| | | else |
| | | { |
| | | Chidao += 1; |
| | | Shangwuchidaofenzhong = chidao.Hours * 60 + chidao.Minutes; |
| | | } |
| | | } |
| | | if (shangwukuanggong == 0 && endttime < StratTimeWorkingEnd) |
| | | { |
| | | TimeSpan zaotui = StratTimeWorkingEnd.Subtract(endttime.Value); |
| | | if (zaotui.Days > 0 || (zaotui.Hours * 60 + zaotui.Minutes) > admAttendanceRuleDTO.Absenteeism) |
| | | { |
| | | if (shangwukuanggong == 0) |
| | | if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime) |
| | | { |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | kuanggong = true; |
| | | break; |
| | | } |
| | | |
| | | else if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime) |
| | | { |
| | | endttime = dateBiJiaoDTOs[i].EndTime; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Zaotui += 1; |
| | | Shangwuzaotuifenzhong = zaotui.Hours * 60 + zaotui.Minutes; |
| | | } |
| | | |
| | | } |
| | | Kuanggongtianshu += shangwukuanggong; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | //判断下午是否迟到,判断下午是否早退,早退矿工处理 |
| | | |
| | | |
| | | starttime = null; |
| | | endttime = null; |
| | | kuanggong = false; |
| | | dateBiJiaoDTOs = new List<DateBiJiaoDTO>(); |
| | | if (admSignInDTO != null && admSignInDTO.AfternoonIn.HasValue && admSignInDTO.AfternoonOut.HasValue) |
| | | { |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admSignInDTO.AfternoonIn; |
| | | dateBiJiaoDTO.EndTime = admSignInDTO.AfternoonOut; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | var jiabanbukaxiawu = admAskLeaveOffDTOMin.Where(x => x.Lavetype == "3").ToList(); |
| | | foreach (var admAskLeaveOff in jiabanbukaxiawu) |
| | | { |
| | | if (admAskLeaveOff.EndTime > StratTimeOffworkStart) |
| | | { |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeaveOff.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeaveOff.EndTime; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | |
| | | } |
| | | |
| | | dateBiJiaoDTOs = dateBiJiaoDTOs.OrderBy(x => x.StartTime).ToList(); |
| | | if (dateBiJiaoDTOs.Count == 0) |
| | | { |
| | | //Kuanggong += new decimal(0.5); |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | | { |
| | | //判断上午考勤时间是否全覆盖 |
| | | for (int i = 0; i < dateBiJiaoDTOs.Count; i++) |
| | | { |
| | | if (i == 0) |
| | | if (kuanggong) |
| | | { |
| | | starttime = dateBiJiaoDTOs[i].StartTime; |
| | | endttime = dateBiJiaoDTOs[i].EndTime; |
| | | Kuanggong += new decimal(0.5); |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | | { |
| | | if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime) |
| | | decimal shangwukuanggong = 0; |
| | | if (starttime > StratTimeWorkingStart) |
| | | { |
| | | kuanggong = true; |
| | | break; |
| | | TimeSpan chidao = starttime.Value.Subtract(StratTimeWorkingStart); |
| | | if (chidao.Days > 0 || (chidao.Hours * 60 + chidao.Minutes) > admAttendanceRuleDTO.Absenteeism) |
| | | { |
| | | if (shangwukuanggong == 0) |
| | | { |
| | | shangwukuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | Chidao += 1; |
| | | Shangwuchidaofenzhong = chidao.Hours * 60 + chidao.Minutes; |
| | | } |
| | | } |
| | | else if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime) |
| | | if (shangwukuanggong == 0 && endttime < StratTimeWorkingEnd) |
| | | { |
| | | endttime = dateBiJiaoDTOs[i].EndTime; |
| | | TimeSpan zaotui = StratTimeWorkingEnd.Subtract(endttime.Value); |
| | | if (zaotui.Days > 0 || (zaotui.Hours * 60 + zaotui.Minutes) > admAttendanceRuleDTO.Absenteeism) |
| | | { |
| | | if (shangwukuanggong == 0) |
| | | { |
| | | shangwukuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | Zaotui += 1; |
| | | Shangwuzaotuifenzhong = zaotui.Hours * 60 + zaotui.Minutes; |
| | | } |
| | | |
| | | } |
| | | Kuanggongtianshu += shangwukuanggong; |
| | | } |
| | | } |
| | | if (kuanggong) |
| | | |
| | | |
| | | |
| | | //判断下午是否迟到,判断下午是否早退,早退矿工处理 |
| | | |
| | | |
| | | starttime = null; |
| | | endttime = null; |
| | | kuanggong = false; |
| | | dateBiJiaoDTOs = new List<DateBiJiaoDTO>(); |
| | | if (admSignInDTO != null && admSignInDTO.AfternoonIn.HasValue && admSignInDTO.AfternoonOut.HasValue) |
| | | { |
| | | //Kuanggong += new decimal(0.5); |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admSignInDTO.AfternoonIn; |
| | | dateBiJiaoDTO.EndTime = admSignInDTO.AfternoonOut; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | 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) |
| | | { |
| | | DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO(); |
| | | dateBiJiaoDTO.StartTime = admAskLeaveOff.StratTime; |
| | | dateBiJiaoDTO.EndTime = admAskLeaveOff.EndTime; |
| | | dateBiJiaoDTOs.Add(dateBiJiaoDTO); |
| | | } |
| | | |
| | | } |
| | | |
| | | dateBiJiaoDTOs = dateBiJiaoDTOs.OrderBy(x => x.StartTime).ToList(); |
| | | if (dateBiJiaoDTOs.Count == 0) |
| | | { |
| | | Kuanggong += new decimal(0.5); |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | | { |
| | | decimal xiawuwukuanggong = 0; |
| | | if (starttime > StratTimeOffworkStart) |
| | | //判断上午考勤时间是否全覆盖 |
| | | for (int i = 0; i < dateBiJiaoDTOs.Count; i++) |
| | | { |
| | | TimeSpan chidao = starttime.Value.Subtract(StratTimeOffworkStart); |
| | | if (chidao.Days > 0 || (chidao.Hours * 60 + chidao.Minutes) > admAttendanceRuleDTO.Absenteeism) |
| | | if (i == 0) |
| | | { |
| | | if (xiawuwukuanggong == 0) |
| | | { |
| | | xiawuwukuanggong += new decimal(0.5); |
| | | //Kuanggong += new decimal(0.5); |
| | | } |
| | | |
| | | starttime = dateBiJiaoDTOs[i].StartTime; |
| | | endttime = dateBiJiaoDTOs[i].EndTime; |
| | | } |
| | | else |
| | | { |
| | | Chidao += 1; |
| | | Xiawuchidaofenzhong = chidao.Hours * 60 + chidao.Minutes; |
| | | if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime) |
| | | { |
| | | kuanggong = true; |
| | | break; |
| | | } |
| | | else if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime) |
| | | { |
| | | endttime = dateBiJiaoDTOs[i].EndTime; |
| | | } |
| | | } |
| | | } |
| | | if (xiawuwukuanggong == 0 && endttime < StratTimeOffworkEnd) |
| | | if (kuanggong) |
| | | { |
| | | TimeSpan zaotui = StratTimeOffworkEnd.Subtract(endttime.Value); |
| | | if (zaotui.Days > 0 || (zaotui.Hours * 60 + zaotui.Minutes) > admAttendanceRuleDTO.Absenteeism) |
| | | Kuanggong += new decimal(0.5); |
| | | Kuanggongtianshu += new decimal(0.5); |
| | | } |
| | | else |
| | | { |
| | | decimal xiawuwukuanggong = 0; |
| | | if (starttime > StratTimeOffworkStart) |
| | | { |
| | | if (xiawuwukuanggong == 0) |
| | | TimeSpan chidao = starttime.Value.Subtract(StratTimeOffworkStart); |
| | | if (chidao.Days > 0 || (chidao.Hours * 60 + chidao.Minutes) > admAttendanceRuleDTO.Absenteeism) |
| | | { |
| | | xiawuwukuanggong += new decimal(0.5); |
| | | //Kuanggong += new decimal(0.5); |
| | | if (xiawuwukuanggong == 0) |
| | | { |
| | | xiawuwukuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | Chidao += 1; |
| | | Xiawuchidaofenzhong = chidao.Hours * 60 + chidao.Minutes; |
| | | } |
| | | } |
| | | if (xiawuwukuanggong == 0 && endttime < StratTimeOffworkEnd) |
| | | { |
| | | TimeSpan zaotui = StratTimeOffworkEnd.Subtract(endttime.Value); |
| | | if (zaotui.Days > 0 || (zaotui.Hours * 60 + zaotui.Minutes) > admAttendanceRuleDTO.Absenteeism) |
| | | { |
| | | if (xiawuwukuanggong == 0) |
| | | { |
| | | xiawuwukuanggong += new decimal(0.5); |
| | | Kuanggong += new decimal(0.5); |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | Zaotui += 1; |
| | | Xiawuzaotuifenzhong = zaotui.Hours * 60 + zaotui.Minutes; |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | Zaotui += 1; |
| | | Xiawuzaotuifenzhong = zaotui.Hours * 60 + zaotui.Minutes; |
| | | } |
| | | |
| | | Kuanggongtianshu += xiawuwukuanggong; |
| | | } |
| | | Kuanggongtianshu += xiawuwukuanggong; |
| | | } |
| | | |
| | | |
| | | //计算当天请假 |
| | | 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; |
| | | } |
| | | |
| | | |
| | | //计算当天加班天数 |
| | | Jiaban += (1 - Kuanggongtianshu ); |
| | | |
| | | Kuanggongtianshu = 0; |
| | | |
| | | //加班 |
| | | //计算加班时间 |
| | | if (admSignInDTO != null && admSignInDTO.OvertimeIn.HasValue && admSignInDTO.OvertimeOut.HasValue) |
| | | { |
| | | DateTime overdate = admSignInDTO.OvertimeIn.Value; |
| | | if (admSignInDTO.OvertimeIn.Value < StratTimeOffworkEnd) |
| | | var admAskovertimeDTO = _askService.GetAskovertimeByUeridAndjiabantime(userList[a].Id, dateminkaoqin); |
| | | if (admAskovertimeDTO != null && !string.IsNullOrEmpty(admAskovertimeDTO.Id)) |
| | | { |
| | | overdate = StratTimeOffworkEnd; |
| | | } |
| | | TimeSpan jiaban = admSignInDTO.OvertimeOut.Value.Subtract(overdate); |
| | | //如果当天是公司要求加班,则自己申请的加班从下班开始算 |
| | | DateTime overdate = admSignInDTO.OvertimeIn.Value; |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | //计算工资 |
| | | public void jisuangongzi() |
| | | public async Task jisuangongziAsync() |
| | | { |
| | | //查询所有的有效人员 |
| | | DateTime dateminkaoqin = new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 1); |
| | |
| | | searchEntity.AttendanceId = admAttendanceDTO.Id; |
| | | List<AdmAttendanceDtlDTO> admAttendanceDtlDTOs = _admAttendanceDtlService.GetList(searchEntity).OrderBy(x => x.SgninDate).ToList(); |
| | | |
| | | //查询是否有不称职的工作考评 |
| | | var admEvaluateDTOs = _admEvaluateService.GetListsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin).Where(x=>x.EvaluateValue == "03").ToList(); |
| | | //当月出勤率 |
| | | decimal chuqinlv = Math.Round(admAttendanceDTO.Shijichuqin / admAttendanceDTO.Yingchuqin,4); |
| | | decimal chuqinlv = Math.Round((admAttendanceDTO.Shijichuqin- admEvaluateDTOs.Count) / admAttendanceDTO.Yingchuqin,4); |
| | | |
| | | //查询当前员工职务的基本工资配置 |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | shiyongqichuqinlv = Math.Round(shiyongqichuqintianshu / admAttendanceDTO.Yingchuqin, 4); |
| | | |
| | | //查询是否有不称职的工作考评 |
| | | var admEvaluateDTOsshiyongqi = _admEvaluateService.GetListsalary(userList[i].Id, dateminkaoqin, userList[i].ShiyongDateEnd.Value.AddDays(1)).Where(x => x.EvaluateValue == "03").ToList(); |
| | | |
| | | |
| | | shiyongqichuqinlv = Math.Round((shiyongqichuqintianshu- admEvaluateDTOsshiyongqi.Count) / admAttendanceDTO.Yingchuqin, 4); |
| | | } |
| | | else |
| | | { |
| | |
| | | hrSalaryDTO.Dianhuafei = SimCost.bill_amount; |
| | | } |
| | | |
| | | if(admAttendanceDTO.Shijichuqin>=admAttendanceDTO.Yingchuqin) |
| | | { |
| | | hrSalaryDTO.Quanqinjiang = hrJibengongzi.Quanqingjiang; |
| | | } |
| | | else |
| | | { |
| | | hrSalaryDTO.Quanqinjiang = 0; |
| | | } |
| | | |
| | | |
| | | hrSalaryDTO.Quanqinjiang = hrJibengongzi.Quanqingjiang; |
| | | |
| | | if ("A".Equals(userList[i].Istravelsubsidy)) |
| | | { |
| | | hrSalaryDTO.Jiaotngbutie = hrJibengongzi.Jiaotongbutie; |
| | |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | #region 新增注册会员 |
| | | |
| | | //本月数量 |
| | | List<YaoQingYongHuDTO> zhucehuiyuansyue = new List<YaoQingYongHuDTO>(); |
| | | try |
| | | { |
| | | //var pltUserDTO = _userService.GetPltUserEntity(userList[i].Id); |
| | | string huiyuanurl = _configuration.GetSection("huiyuanurl").Value; |
| | | string GetYGYaoQingYonghu = _configuration.GetSection("GetYGYaoQingYonghu").Value; |
| | | Uri postUrl2 = new Uri(huiyuanurl + GetYGYaoQingYonghu); |
| | | |
| | | JObject questions2 = new JObject(); |
| | | questions2.Add("UserID", userList[i].Id); |
| | | questions2.Add("StartTime", dateminkaoqin.ToString("yyyy-MM-dd HH:mm:ss")); |
| | | questions2.Add("EndTime", datemaxkaoqin.ToString("yyyy-MM-dd HH:mm:ss")); |
| | | |
| | | string requestJson2 = questions2.ToString(); |
| | | string result2 = string.Empty; |
| | | |
| | | using (HttpContent httpContent = new StringContent(requestJson2)) |
| | | { |
| | | httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); |
| | | |
| | | var httpClient2 = _clientFactory.CreateClient(); |
| | | httpClient2.Timeout = new TimeSpan(0, 0, 10); |
| | | var Result2 = await httpClient2.PostAsync(postUrl2, httpContent); |
| | | result2 = Result2.Content.ReadAsStringAsync().Result; |
| | | } |
| | | |
| | | _logger.LogInformation("result2:" + result2); |
| | | JObject jobjectresult = (JObject)JsonConvert.DeserializeObject(result2); |
| | | |
| | | if (jobjectresult["code"] != null && jobjectresult["code"].ToString() == "1") |
| | | { |
| | | |
| | | zhucehuiyuansyue = JsonConvert.DeserializeObject<List<YaoQingYongHuDTO>>(jobjectresult["data"].ToString()); |
| | | |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | |
| | | |
| | | //var qianyueDTOsyue = _cooperatecustomCustomerService.GetListsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin); |
| | | if (zhucehuiyuansyue != null && zhucehuiyuansyue.Count > 0) |
| | | { |
| | | var jijianidddd = fiPiecerateDTOs.Where(x => x.Project == "新增注册会员").FirstOrDefault(); |
| | | if (jijianidddd != null) |
| | | { |
| | | var jixiaotichengfangan = hrJixiaotichengThis.Where(x => x.PiecerateId == jijianidddd.Id).OrderByDescending(x => x.Effecttime).FirstOrDefault(); |
| | | if (jixiaotichengfangan != null && jixiaotichengfangan.Ticheng.HasValue && jixiaotichengfangan.Renwu.HasValue) |
| | | { |
| | | if (jixiaotichengfangan.Renwustandard == "01") |
| | | { |
| | | decimal renwujishu = admAttendanceDTO.Yingchuqin * jixiaotichengfangan.Renwu.Value; |
| | | if (jixiaotichengfangan.Tichengstandard == "01") |
| | | { |
| | | decimal youxiaojijian = zhucehuiyuansyue.Count - renwujishu; |
| | | if (youxiaojijian > 0) |
| | | { |
| | | hrSalaryDTO.Jixiaoticheng += Math.Round(jixiaotichengfangan.Ticheng.Value * youxiaojijian, 2); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | else if (jixiaotichengfangan.Renwustandard == "02") |
| | | { |
| | | decimal renwujishu = jixiaotichengfangan.Renwu.Value; |
| | | if (jixiaotichengfangan.Tichengstandard == "01") |
| | | { |
| | | decimal youxiaojijian = zhucehuiyuansyue.Count - renwujishu; |
| | | if (youxiaojijian > 0) |
| | | { |
| | | hrSalaryDTO.Jixiaoticheng += Math.Round(jixiaotichengfangan.Ticheng.Value * youxiaojijian, 2); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | #region 新增签约客户 |
| | | |
| | |
| | | decimal jiucuo = hrSalaryDTO.Jiucuo.HasValue ? hrSalaryDTO.Jiucuo.Value : 0; |
| | | |
| | | //计算保底年薪 |
| | | if (userList[i].Indate.HasValue && userList[i].miniyearsalary.HasValue) |
| | | if (userList[i].Indate.HasValue && userList[i].miniyearsalary.HasValue && userList[i].miniyearsalary.Value>0) |
| | | { |
| | | DateTime jixinue = userList[i].Indate.Value; |
| | | if (userList[i].Indate.Value.Day != 1) |
| | |
| | | |
| | | hrSalaryDTO.Yufagongzi = userList[i].advancewages; |
| | | |
| | | if (userList[i].advancewages.HasValue) |
| | | if (userList[i].advancewages.HasValue && userList[i].advancewages.Value>0) |
| | | { |
| | | hrSalaryDTO.Yufagongziheji = 0; |
| | | HrSalaryDTO hrSalaryDTOlast = _hrSalaryService.GetListByUser(userList[i].Id, dateminkaoqin.AddMonths(-1).Year, dateminkaoqin.AddMonths(-1).Month); |
| | |
| | | hrSalaryDTO.Yufagongziheji = hrSalaryDTOlast.Yufagongziheji; |
| | | } |
| | | |
| | | hrSalaryDTO.Yufagongziheji += (hrSalaryDTO.Daozhanggongzi- hrSalaryDTO.Yufagongzi); |
| | | hrSalaryDTO.Yufagongziheji += (hrSalaryDTO.Yufagongzi - hrSalaryDTO.Daozhanggongzi ); |
| | | 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; |
| | | } |