username@email.com
2021-07-27 072169e3c5446f94e2cf4e570e5c7952bb5b15b9
zhengcaioa/zhengcaioa/Timer/TimedBackgroundService.cs
@@ -48,6 +48,7 @@
        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)
@@ -79,6 +80,7 @@
            _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)
        {
@@ -208,6 +210,7 @@
            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('.');
@@ -737,245 +740,423 @@
                        //计算加班时间
                        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);
                            }
                        }
                        
@@ -3401,6 +3582,10 @@
                    }
                    hrSalaryDTO.Yufagongziheji += (hrSalaryDTO.Daozhanggongzi- hrSalaryDTO.Yufagongzi);
                    if (hrSalaryDTO.Daozhanggongzi < hrSalaryDTO.Yufagongzi)
                    {
                        hrSalaryDTO.Daozhanggongzi = hrSalaryDTO.Yufagongzi;
                    }
                }
                hrSalaryDTO.RecStatus = "A";
                hrSalaryDTO.Islock = "D";
@@ -3448,6 +3633,8 @@
            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('.');
@@ -3557,9 +3744,11 @@
                    }
                    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)
                            {
@@ -3655,7 +3844,8 @@
                    {
                        //是否调休日  调休日需要上班
                        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)
                            {
@@ -3717,7 +3907,8 @@
                    {
                        //是否调休日  调休日需要上班
                        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;
                        }
@@ -3746,7 +3937,8 @@
                    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;
                        }