username@email.com
2023-02-13 e26f08af87c158aeac41b9a94398636c1c580556
zhengcaioa/zhengcaioa/Timer/TimedBackgroundService.cs
@@ -51,6 +51,8 @@
        private readonly IAskService _askService;
        private readonly IAdmEvaluateService _admEvaluateService;
        private readonly IExpertService _expertService;
        private readonly zhengcaioaContext _context;
        private readonly zcUserInfoN_dbContext _zcUsercontext;
        private readonly decimal jiabangongzibiaozhun = new decimal(21.5);
        public TimedBackgroundService(ILogger<TimedBackgroundService> logger, IServiceScopeFactory factory)
@@ -85,6 +87,8 @@
            _askService= factory.CreateScope().ServiceProvider.GetRequiredService<IAskService>();
            _admEvaluateService = factory.CreateScope().ServiceProvider.GetRequiredService<IAdmEvaluateService>();
            _expertService = factory.CreateScope().ServiceProvider.GetRequiredService<IExpertService>();
            _context = factory.CreateScope().ServiceProvider.GetRequiredService<zhengcaioaContext>();
            _zcUsercontext = factory.CreateScope().ServiceProvider.GetRequiredService<zcUserInfoN_dbContext>();
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
@@ -134,6 +138,15 @@
                        {
                            jisuangonglinggongzi();
                        }
                        _logger.LogInformation("把超过90天还没有转化的档案客户的业务经理归为无");
                        this.ywjlguiling();
                        _logger.LogInformation("把超过90天还没有转化的档案客户的业务经理归为无执行结束");
                        _logger.LogInformation("把会员系统和oa系统手机号相同的客户关联起来");
                        this.huiyuanguanlian();
                        _logger.LogInformation("把会员系统和oa系统手机号相同的客户关联起来执行结束");
                    }
                    catch (Exception ex)
                    {
@@ -207,6 +220,65 @@
            return diwutian;
        }
        //把超过90天还没有转化的档案客户的业务经理归为无
        public void ywjlguiling()
        {
          var intentionCustomerDTOs  =  _intentionCustomerService.GetList().Where(x=>x.Ywjltime < DateTime.Now.AddDays(-90)).ToList();
            foreach(var intentionCustomerDTO in intentionCustomerDTOs)
            {
                intentionCustomerDTO.Ywjl = null;
                intentionCustomerDTO.Ywjltime = null;
                _intentionCustomerService.save(intentionCustomerDTO);
            }
        }
        //把会员系统和oa系统手机号相同的客户关联起来
        public void huiyuanguanlian()
        {
            var cooperatecustomCustomers = _context.CooperatecustomCustomers.Where(x => x.RecStatus == "A" && x.HuiyuanId == null).ToList();
            var frameworkUsers = _zcUsercontext.FrameworkUsers.Where(x => x.IsValid == true).ToList();
            if (cooperatecustomCustomers != null && cooperatecustomCustomers.Count > 0)
            {
                foreach (var cooperatecustomCustomer in cooperatecustomCustomers)
                {
                    if (!string.IsNullOrEmpty(cooperatecustomCustomer.Tel))
                    {
                        var frameworkUser = frameworkUsers.Where(x => x.Itcode == cooperatecustomCustomer.Tel).FirstOrDefault();
                        if (frameworkUser != null)
                        {
                            cooperatecustomCustomer.HuiyuanId = frameworkUser.Id.ToString();
                        }
                    }
                }
                _context.SaveChanges();
            }
            var intentionCustomers = _context.IntentionCustomers.Where(x => x.RecStatus == "A" && x.HuiyuanId == null).ToList();
            if (intentionCustomers != null && intentionCustomers.Count > 0)
            {
                foreach (var intentionCustomer in intentionCustomers)
                {
                    if (!string.IsNullOrEmpty(intentionCustomer.Tel))
                    {
                        var frameworkUser = frameworkUsers.Where(x => x.Itcode == intentionCustomer.Tel).FirstOrDefault();
                        if (frameworkUser != null)
                        {
                            intentionCustomer.HuiyuanId = frameworkUser.Id.ToString();
                        }
                    }
                }
                _context.SaveChanges();
            }
        }
        //计算考勤
        public void jisuankaoqin()
        {
@@ -238,14 +310,20 @@
            ResultEntity resultEntity = new ResultEntity();
            resultEntity.Result = false;
            var Month = DateTime.Now.Month - 1;
            var Year = DateTime.Now.Year;
            if (Month == 0)
            {
                Month = 12;
                Year = Year - 1;
            }
            //查询所有的有效人员
            List<PltUserDTO> userList = _userService.GetListjisuankaoqin(new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 1), new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 1).AddMonths(1));//.Where(x => x.UserSn == "yang").ToList();
            List<PltUserDTO> userList = _userService.GetListjisuankaoqin(new DateTime(Year, Month, 1), new DateTime(Year, Month, 1).AddMonths(1));//.Where(x => x.UserSn == "yang").ToList();
            for (int a = 0; a < userList.Count; a++)
            {
                _logger.LogInformation("开始计算" + userList[a].UserName + "考勤");
                //开始计算考勤
                DateTime dateminkaoqin = new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 1);
                DateTime dateminkaoqin = new DateTime(Year, Month, 1);
                DateTime datemaxkaoqin = dateminkaoqin.AddMonths(1);
                List<AdmAskLeaveDTO> admAskLeaveDTOs = _signinService.GetAskLeaveByUserId(userList[a].Id);
                List<AdmAskLeaveOffDTO> admAskLeaveOffDTOs = _signinService.GetAskLeaveOffByUserId(userList[a].Id);
@@ -263,6 +341,7 @@
                    admAttendanceDTO.Qingjia = 0;
                    admAttendanceDTO.Jiaban = 0;
                    admAttendanceDTO.Xiaojia = 0;
                    admAttendanceDTO.Daixinjia = 0;
                    admAttendanceDTO.Chidao = 0;
                    admAttendanceDTO.Zaotui = 0;
                    admAttendanceDTO.Kuanggong = 0;
@@ -288,6 +367,7 @@
                decimal Zaotui = 0;
                decimal Kuanggong = 0;
                decimal Xiaojia = 0;
                decimal Daixinjia = 0;
                while (dateminkaoqin < datemaxkaoqin)
                {
@@ -341,7 +421,7 @@
                        admSignInDTO = new AdmSignInDTO();
                    }
                    //查询请假   请假时间不能重叠
                    List<AdmAskLeaveDTO> admAskLeaveDTOMin = admAskLeaveDTOs.Where(x =>x.Lavetype != "2" &&  x.StratTime < dateminkaoqin.AddDays(1) && x.EndTime > dateminkaoqin).OrderByDescending(x=>x.Createtime).ToList();
                    List<AdmAskLeaveDTO> admAskLeaveDTOMin = admAskLeaveDTOs.Where(x => x.Lavetype != "2" && x.StratTime < dateminkaoqin.AddDays(1) && x.EndTime > dateminkaoqin).OrderByDescending(x=>x.Createtime).ToList();
                    //查询销假   销假时间不能重叠
                    List<AdmAskLeaveOffDTO> admAskLeaveOffDTOMin = admAskLeaveOffDTOs.Where(x => x.StratTime < dateminkaoqin.AddDays(1) && x.EndTime > dateminkaoqin).OrderByDescending(x => x.Createtime).ToList();
                   
@@ -375,6 +455,8 @@
                    decimal Kuanggongtianshu = 0;
                    decimal dangtianqingjia = 0;
                    decimal dangtianxiaojia = 0;
                    decimal dangtiandaixinjia = 0;
                    string Iswork = "D";
                    if (iswork)
                    {
@@ -440,17 +522,18 @@
                                }
                                else
                                {
                                    if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime)
                                    {
                                        kuanggong = true;
                                        break;
                                    }
                                    else if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime)
                                    //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 (endttime>= StratTimeWorkingEnd)
                                if (endttime >= StratTimeWorkingEnd)
                                {
                                    break;
                                }
@@ -561,12 +644,13 @@
                                }
                                else
                                {
                                    if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime)
                                    {
                                        kuanggong = true;
                                        break;
                                    }
                                    else if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime)
                                    //if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime)
                                    //{
                                    //    //kuanggong = true;
                                    //    break;
                                    //}
                                    //else
                                    if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime)
                                    {
                                        endttime = dateBiJiaoDTOs[i].EndTime;
                                    }
@@ -629,7 +713,7 @@
                        //计算当天请假
                        List<DateBiJiaoDTO> qingjias = new List<DateBiJiaoDTO>();
                        var feichuqinjia = admAskLeaveDTOMin.Where(x => x.Lavetype != "4" && x.Lavetype != "7" && x.Lavetype != "3").ToList();
                        var feichuqinjia = admAskLeaveDTOMin.Where(x => x.Lavetype != "4" && x.Lavetype != "7" && x.Lavetype != "3" && x.Lavetype != "9").ToList();
                        foreach (var admAskLeave in feichuqinjia)
                        {
                            
@@ -690,6 +774,63 @@
                        }
                        Qingjia += dangtianqingjia;
                        //计算当天带薪假
                        List<DateBiJiaoDTO> daixinjias = new List<DateBiJiaoDTO>();
                        var chauxndaixinjias = admAskLeaveDTOMin.Where(x => x.Lavetype == "4" || x.Lavetype == "7" || x.Lavetype == "3" || x.Lavetype == "9").ToList();
                        foreach (var admAskLeave in chauxndaixinjias)
                        {
                            DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO();
                            dateBiJiaoDTO.StartTime = admAskLeave.StratTime;
                            dateBiJiaoDTO.EndTime = admAskLeave.EndTime;
                            daixinjias.Add(dateBiJiaoDTO);
                        }
                        foreach (var daixinjia in daixinjias)
                        {
                            if (daixinjia.StartTime < StratTimeWorkingStart)
                            {
                                daixinjia.StartTime = StratTimeWorkingStart;
                            }
                            if (daixinjia.StartTime > StratTimeWorkingEnd && daixinjia.StartTime < StratTimeOffworkStart)
                            {
                                daixinjia.StartTime = StratTimeOffworkStart;
                            }
                            if (daixinjia.EndTime > StratTimeWorkingEnd && daixinjia.EndTime < StratTimeOffworkStart)
                            {
                                daixinjia.EndTime = StratTimeWorkingEnd;
                            }
                            if (daixinjia.EndTime > StratTimeOffworkEnd)
                            {
                                daixinjia.EndTime = StratTimeOffworkEnd;
                            }
                            TimeSpan daixinjiashiijan = daixinjia.EndTime.Value.Subtract(daixinjia.StartTime.Value);
                            if (daixinjia.StartTime <= StratTimeWorkingEnd && daixinjia.EndTime >= StratTimeOffworkStart)
                            {
                                TimeSpan wuxiushijian = StratTimeOffworkStart.Subtract(StratTimeWorkingEnd);
                                dangtiandaixinjia += Math.Round(((decimal)(daixinjiashiijan.Hours * 60 + daixinjiashiijan.Minutes - wuxiushijian.Hours * 60 - wuxiushijian.Minutes)) / ((decimal)shangbanshijian), 2);
                            }
                            else
                            {
                                dangtiandaixinjia += Math.Round(((decimal)(daixinjiashiijan.Hours * 60 + daixinjiashiijan.Minutes)) / ((decimal)shangbanshijian), 2);
                            }
                        }
                        Daixinjia += dangtiandaixinjia;
                        //计算当天出勤天数
                        Shijichuqin += (1 - Kuanggongtianshu - dangtianqingjia);
@@ -841,12 +982,13 @@
                                    }
                                    else
                                    {
                                        if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime)
                                        {
                                            kuanggong = true;
                                            break;
                                        }
                                        else if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime)
                                        //if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime)
                                        //{
                                        //    //kuanggong = true;
                                        //    break;
                                        //}
                                        //else
                                        if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime)
                                        {
                                            endttime = dateBiJiaoDTOs[i].EndTime;
                                        }
@@ -958,12 +1100,13 @@
                                    }
                                    else
                                    {
                                        if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime)
                                        {
                                            kuanggong = true;
                                            break;
                                        }
                                        else if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime)
                                        //if (dateBiJiaoDTOs[i].StartTime > dateBiJiaoDTOs[i - 1].EndTime)
                                        //{
                                        //    //kuanggong = true;
                                        //    break;
                                        //}
                                        //else
                                        if (dateBiJiaoDTOs[i].EndTime > dateBiJiaoDTOs[i - 1].EndTime)
                                        {
                                            endttime = dateBiJiaoDTOs[i].EndTime;
                                        }
@@ -1022,7 +1165,7 @@
                            //计算当天请假
                            List<DateBiJiaoDTO> qingjias = new List<DateBiJiaoDTO>();
                            var feichuqinjia = admAskLeaveDTOMin.Where(x => x.Lavetype != "4" && x.Lavetype != "7" && x.Lavetype != "3").ToList();
                            var feichuqinjia = admAskLeaveDTOMin.Where(x => x.Lavetype != "4" && x.Lavetype != "7" && x.Lavetype != "3" && x.Lavetype != "9").ToList();
                            foreach (var admAskLeave in feichuqinjia)
                            {
@@ -1083,6 +1226,64 @@
                            }
                            Qingjia += dangtianqingjia;
                            //计算当天带薪假
                            List<DateBiJiaoDTO> daixinjias = new List<DateBiJiaoDTO>();
                            var chauxndaixinjias = admAskLeaveDTOMin.Where(x => x.Lavetype == "4" || x.Lavetype == "7" || x.Lavetype == "3" || x.Lavetype == "9").ToList();
                            foreach (var admAskLeave in chauxndaixinjias)
                            {
                                DateBiJiaoDTO dateBiJiaoDTO = new DateBiJiaoDTO();
                                dateBiJiaoDTO.StartTime = admAskLeave.StratTime;
                                dateBiJiaoDTO.EndTime = admAskLeave.EndTime;
                                daixinjias.Add(dateBiJiaoDTO);
                            }
                            foreach (var daixinjia in daixinjias)
                            {
                                if (daixinjia.StartTime < StratTimeWorkingStart)
                                {
                                    daixinjia.StartTime = StratTimeWorkingStart;
                                }
                                if (daixinjia.StartTime > StratTimeWorkingEnd && daixinjia.StartTime < StratTimeOffworkStart)
                                {
                                    daixinjia.StartTime = StratTimeOffworkStart;
                                }
                                if (daixinjia.EndTime > StratTimeWorkingEnd && daixinjia.EndTime < StratTimeOffworkStart)
                                {
                                    daixinjia.EndTime = StratTimeWorkingEnd;
                                }
                                if (daixinjia.EndTime > StratTimeOffworkEnd)
                                {
                                    daixinjia.EndTime = StratTimeOffworkEnd;
                                }
                                TimeSpan daixinjiashiijan = daixinjia.EndTime.Value.Subtract(daixinjia.StartTime.Value);
                                if (daixinjia.StartTime <= StratTimeWorkingEnd && daixinjia.EndTime >= StratTimeOffworkStart)
                                {
                                    TimeSpan wuxiushijian = StratTimeOffworkStart.Subtract(StratTimeWorkingEnd);
                                    dangtiandaixinjia += Math.Round(((decimal)(daixinjiashiijan.Hours * 60 + daixinjiashiijan.Minutes - wuxiushijian.Hours * 60 - wuxiushijian.Minutes)) / ((decimal)shangbanshijian), 2);
                                }
                                else
                                {
                                    dangtiandaixinjia += Math.Round(((decimal)(daixinjiashiijan.Hours * 60 + daixinjiashiijan.Minutes)) / ((decimal)shangbanshijian), 2);
                                }
                            }
                            Daixinjia += dangtiandaixinjia;
                            //计算当天出勤天数
                            Jiaban += (1 - Kuanggongtianshu - dangtianqingjia);
@@ -1194,7 +1395,7 @@
                        admAttendanceDtlDTO.OvertimeOut = admSignInDTO.OvertimeOut;
                        admAttendanceDtlDTO.Qingjia = dangtianqingjia;
                        admAttendanceDtlDTO.Xiaojia = dangtianxiaojia;
                        admAttendanceDtlDTO.Daixinjia = dangtiandaixinjia;
@@ -1230,6 +1431,7 @@
                        admAttendanceDtlDTO.OvertimeIn = admSignInDTO.OvertimeIn;
                        admAttendanceDtlDTO.OvertimeOut = admSignInDTO.OvertimeOut;
                        admAttendanceDtlDTO.Qingjia = dangtianqingjia;
                        admAttendanceDtlDTO.Daixinjia = dangtiandaixinjia;
                        admAttendanceDtlDTO.Xiaojia = dangtianxiaojia;
                        
@@ -1281,6 +1483,7 @@
                admAttendanceDTO.Qingjia = Qingjia;
                admAttendanceDTO.Daixinjia = Daixinjia;
                admAttendanceDTO.Xiaojia = Xiaojia;
                admAttendanceDTO.Chidao = Chidao;
                admAttendanceDTO.Islock = "A";
@@ -1298,8 +1501,15 @@
        //计算工资
        public async Task jisuangongziAsync()
        {
            var Month = DateTime.Now.Month - 1;
            var Year = DateTime.Now.Year;
            if (Month == 0)
            {
                Month = 12;
                Year = Year - 1;
            }
            //查询所有的有效人员
            DateTime dateminkaoqin = new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 1);
            DateTime dateminkaoqin = new DateTime(Year, Month, 1);
            DateTime datemaxkaoqin = dateminkaoqin.AddMonths(1);
            List<PltUserDTO> userList = _userService.GetListjisuankaoqin(dateminkaoqin, datemaxkaoqin);//.Where(x => x.UserSn == "yang").ToList();
            List<HrJibengongziDTO> hrJibengongziDTOs = _JibengongziService.GetList().Where(x=>  x.Effecttime < datemaxkaoqin).ToList();
@@ -1827,6 +2037,50 @@
                    //var feijijiandengji = fiPiecerateDTOs.Where(x => x.Standard == "A");
                    //var  jijiandengji =    fiPiecerateDTOs.Where(x => x.Standard == "A");
                    #region 采购公告录入
                    var caigougonggaoDTOsyue = _projectService.GetcaigougonggaoListsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin);
                    if (caigougonggaoDTOsyue != null && caigougonggaoDTOsyue.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 = caigougonggaoDTOsyue.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 = caigougonggaoDTOsyue.Count - renwujishu;
                                        if (youxiaojijian > 0)
                                        {
                                            hrSalaryDTO.Jixiaoticheng += Math.Round(jixiaotichengfangan.Ticheng.Value * youxiaojijian, 2);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    #endregion
                    #region 采购项目录入
                    var projectDTOsyue = _projectService.GetListsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin);
@@ -1871,8 +2125,12 @@
                    }
                    #endregion
                    #region 客户资料录入
                    var _intentionCustomerDTOs = _intentionCustomerService.GetListsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin);
                    if (_intentionCustomerDTOs!=null && _intentionCustomerDTOs.Count > 0)
                    {