zhengcaioa/zhengcaioa/Timer/TimedBackgroundService.cs
@@ -48,7 +48,9 @@
        private readonly IDtChannelArticleNewsService _dtChannelArticleNewsService;
        private readonly IConfiguration _configuration;
        private readonly IHttpClientFactory _clientFactory;
        private readonly IAskService _askService;
        private readonly IAskService _askService;
        private readonly IAdmEvaluateService _admEvaluateService;
        private readonly IExpertService _expertService;
        private readonly decimal jiabangongzibiaozhun = new decimal(21.5);
        public TimedBackgroundService(ILogger<TimedBackgroundService> logger, IServiceScopeFactory factory)
@@ -81,6 +83,8 @@
            _configuration = factory.CreateScope().ServiceProvider.GetRequiredService<IConfiguration>();
            _clientFactory = factory.CreateScope().ServiceProvider.GetRequiredService<IHttpClientFactory>();
            _askService= factory.CreateScope().ServiceProvider.GetRequiredService<IAskService>();
            _admEvaluateService = factory.CreateScope().ServiceProvider.GetRequiredService<IAdmEvaluateService>();
            _expertService = factory.CreateScope().ServiceProvider.GetRequiredService<IExpertService>();
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
@@ -100,6 +104,11 @@
                    try
                    {
                        _logger.LogInformation("把超过90天还没有转化的档案客户的业务经理归为无");
                        this.ywjlguiling();
                        _logger.LogInformation("把超过90天还没有转化的档案客户的业务经理归为无执行结束");
                        _logger.LogInformation("判断是否是第五个工作日结束");
                        DateTime diwutian = this.diwugongzuori();
                        //第五个工作日结束后开始计算
@@ -203,6 +212,20 @@
            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);
            }
        }
        //计算考勤
        public void jisuankaoqin()
        {
@@ -234,14 +257,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);
@@ -317,8 +346,8 @@
                            Offdays += 1;
                        }
                    }
                    if(userList[a].Outdate.HasValue && dateminkaoqin >=userList[a].Outdate   )
                    //离职当天计算考勤
                    if(userList[a].Zhiwustatus == "D" && userList[a].Outdate.HasValue && dateminkaoqin >userList[a].Outdate   )
                    {
                        dateminkaoqin = dateminkaoqin.AddDays(1);
                        continue;
@@ -337,7 +366,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();
                   
@@ -445,6 +474,10 @@
                                    {
                                        endttime = dateBiJiaoDTOs[i].EndTime;
                                    }
                                }
                                if (endttime>= StratTimeWorkingEnd)
                                {
                                    break;
                                }
                            }
                            if (kuanggong)
@@ -563,6 +596,10 @@
                                        endttime = dateBiJiaoDTOs[i].EndTime;
                                    }
                                }
                                if (endttime >= StratTimeOffworkEnd)
                                {
                                    break;
                                }
                            }
                            if (kuanggong)
                            {
@@ -617,7 +654,7 @@
                        //计算当天请假
                        List<DateBiJiaoDTO> qingjias = new List<DateBiJiaoDTO>();
                        var feichuqinjia = admAskLeaveDTOMin.Where(x => x.Lavetype != "4").ToList();
                        var feichuqinjia = admAskLeaveDTOMin.Where(x => x.Lavetype != "4" && x.Lavetype != "7" && x.Lavetype != "3" && x.Lavetype != "9").ToList();
                        foreach (var admAskLeave in feichuqinjia)
                        {
                            
@@ -754,10 +791,10 @@
                                {
                                    jiabanshijian = admAskovertimeDTO.Overtime.Value;
                                }
                                if (jiabanshijian > new decimal(shangbanshijian) / 60)
                                {
                                    jiabanshijian = new decimal(shangbanshijian) /60;
                                }
                                Jiaban += Math.Round(jiabanshijian * 60 / shangbanshijian, 2);
                            }
                            
@@ -1010,7 +1047,7 @@
                            //计算当天请假
                            List<DateBiJiaoDTO> qingjias = new List<DateBiJiaoDTO>();
                            var feichuqinjia = admAskLeaveDTOMin.Where(x => x.Lavetype != "4").ToList();
                            var feichuqinjia = admAskLeaveDTOMin.Where(x => x.Lavetype != "4" && x.Lavetype != "7" && x.Lavetype != "3" && x.Lavetype != "9").ToList();
                            foreach (var admAskLeave in feichuqinjia)
                            {
@@ -1151,10 +1188,10 @@
                                {
                                    jiabanshijian = admAskovertimeDTO.Overtime.Value;
                                }
                                if (jiabanshijian > new decimal(shangbanshijian) / 60)
                                {
                                    jiabanshijian = new decimal(shangbanshijian) / 60;
                                }
                                Jiaban += Math.Round(jiabanshijian * 60 / shangbanshijian, 2);
                            }
                        }
@@ -1286,8 +1323,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();
@@ -1336,18 +1380,27 @@
                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); 
                //查询当前员工职务的基本工资配置
               var hrJibengongzi = hrJibengongziDTOs.Where(x=>x.PostId == userList[i].HrPosition ).OrderByDescending(x=>x.Effecttime).FirstOrDefault();
                if (hrJibengongzi == null)
                {
                    _logger.LogInformation(userList[i].UserName + ": 职务所属资本工资为空");
                    continue;
                }
                var shebaoDTO = _JibengongziService.GetListShebao().FirstOrDefault();
                if (shebaoDTO == null)
                {
                    _logger.LogInformation(userList[i].UserName + ": 社保维护为空");
                    continue;
                }
                hrSalaryDTO.Jibengongzi = Math.Round( hrJibengongzi.Jibengongzi.Value * chuqinlv, 2);
                hrSalaryDTO.Baomifei = Math.Round(hrJibengongzi.Baomifei.Value * chuqinlv, 2);
                //是否在试用期
@@ -1356,15 +1409,27 @@
                {
                    geshuiqizheng = userList[i].geshuiqizheng.Value;
                }
                var Shebaodanwei = hrJibengongzi.Shebaodanwei.HasValue ? hrJibengongzi.Shebaodanwei.Value : 0;
                var Shebaogeren = hrJibengongzi.Shebaogeren.HasValue ? hrJibengongzi.Shebaogeren.Value : 0;
                var Shebaodanwei = shebaoDTO.Shebaodanwei.HasValue ? shebaoDTO.Shebaodanwei.Value : 0;
                var Shebaogeren = shebaoDTO.Shebaogeren.HasValue ? shebaoDTO.Shebaogeren.Value : 0;
                decimal yingnashuie = 0;
                hrSalaryDTO.Queqin = 0;
                hrSalaryDTO.Fakuan = 0;
                hrSalaryDTO.Gongzuobutie = 0;
                hrSalaryDTO.Jiabangongzi = 0;
                decimal shiyongqichuqintianshu = 0;
                decimal shiyongqichuqinlv = 0;
                decimal yingfaheji = 0;
                decimal BasicPrice = 0;
                if (!decimal.TryParse(userList[i].BasicPrice, out BasicPrice))
                {
                    _logger.LogInformation(userList[i].UserName + ": 员工没有维护工资");
                    continue;
                }
                if (userList[i].ShiyongDate.HasValue && userList[i].ShiyongDateEnd.HasValue && dateminkaoqin>= userList[i].ShiyongDate.Value && dateminkaoqin <= userList[i].ShiyongDateEnd.Value)
                {
                    if (!userList[i].ShiyongPrice.HasValue)
@@ -1372,6 +1437,10 @@
                        _logger.LogInformation(userList[i].UserName + ": 员工处于试用期,但是试用期工资为空");
                        continue;
                    }
                    //查询是否有不称职的工作考评
                    var admEvaluateDTOsshiyongqi = _admEvaluateService.GetListsalary(userList[i].Id, dateminkaoqin, userList[i].ShiyongDateEnd.Value.AddDays(1)).Where(x => x.EvaluateValue == "03").ToList();
                    //试用期的出勤率
                    shiyongqichuqinlv = chuqinlv;
                    if(userList[i].ShiyongDateEnd.Value< datemaxkaoqin.AddDays(-1))
@@ -1392,7 +1461,15 @@
                                    }
                            }
                        }
                        shiyongqichuqinlv = Math.Round(shiyongqichuqintianshu / admAttendanceDTO.Yingchuqin, 4);
                        //工作评价不合格罚款
                        hrSalaryDTO.Fakuan += Math.Round(userList[i].ShiyongPrice.Value * admEvaluateDTOsshiyongqi.Count / admAttendanceDTO.Yingchuqin + BasicPrice * (admEvaluateDTOs.Count - admEvaluateDTOsshiyongqi.Count) / admAttendanceDTO.Yingchuqin, 2);
                    }
                    else
                    {
@@ -1405,6 +1482,9 @@
                            }
                        }
                        hrSalaryDTO.Jiabangongzi += Math.Round((admAttendanceDTO.Jiaban / jiabangongzibiaozhun) * userList[i].ShiyongPrice.Value, 2);
                        //工作评价不合格罚款
                        hrSalaryDTO.Fakuan += Math.Round(userList[i].ShiyongPrice.Value * admEvaluateDTOs.Count / admAttendanceDTO.Yingchuqin, 2);
                    }
@@ -1412,24 +1492,23 @@
                    hrSalaryDTO.Gongzuobutie += Math.Round( (userList[i].ShiyongPrice.Value - hrJibengongzi.Baomifei.Value- hrJibengongzi.Jibengongzi.Value ) * shiyongqichuqinlv, 2);
                    //yingnashuie = userList[i].ShiyongPrice.Value - Shebaogeren - geshuiqizheng;
                }
                else
                {
                    //工作评价罚款
                    hrSalaryDTO.Fakuan += Math.Round(BasicPrice * admEvaluateDTOs.Count/ admAttendanceDTO.Yingchuqin , 2);
                }
                
                if(true)
                {
                    decimal BasicPrice = 0;
                    if(!decimal.TryParse(userList[i].BasicPrice,out BasicPrice))
                    {
                        _logger.LogInformation(userList[i].UserName + ": 员工没有维护工资");
                        continue;
                    }
                    //转正后的出勤率
                    decimal zhuanzhengchuqinlv = chuqinlv- shiyongqichuqinlv;
                    if (userList[i].ShiyongDate.HasValue && userList[i].ShiyongDateEnd.HasValue && userList[i].ShiyongDateEnd.Value >= dateminkaoqin && userList[i].ShiyongDateEnd.Value <= datemaxkaoqin.AddDays(-1))
@@ -1489,7 +1568,7 @@
                  
                    //yingnashuie = BasicPrice - Shebaogeren - geshuiqizheng;
                    
                }
@@ -1719,9 +1798,17 @@
                    hrSalaryDTO.Dianhuafei = SimCost.bill_amount;
                }
              
                if(admAttendanceDTO.Shijichuqin>=admAttendanceDTO.Yingchuqin
                    && hrSalaryDTO.Queqin <=0)
                {
                    hrSalaryDTO.Quanqinjiang = hrJibengongzi.Quanqingjiang;
                }
                else
                {
                    hrSalaryDTO.Quanqinjiang = 0;
                }
                hrSalaryDTO.Quanqinjiang = hrJibengongzi.Quanqingjiang;
                if ("A".Equals(userList[i].Istravelsubsidy))
                {
                    hrSalaryDTO.Jiaotngbutie = hrJibengongzi.Jiaotongbutie;
@@ -1733,7 +1820,6 @@
                hrSalaryDTO.Fakuan = 0;
                //工作安排罚款
                List<AdmMemoBookDTO> admMemoBookDTOs =  _DailyManageService.GetRemindsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin,"2");
                if (admMemoBookDTOs.Count > 0)
@@ -1772,6 +1858,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 采购项目录入
@@ -1817,8 +1947,12 @@
                    }
                    #endregion
                    #region 客户资料录入
                    var _intentionCustomerDTOs = _intentionCustomerService.GetListsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin);
                    if (_intentionCustomerDTOs!=null && _intentionCustomerDTOs.Count > 0)
                    {
@@ -3400,6 +3534,53 @@
                    #endregion
                    #region 专家录入
                    var zhuanjialuruDTOsyue = _expertService.GetListsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin);
                    if (zhuanjialuruDTOsyue != null && zhuanjialuruDTOsyue.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 = zhuanjialuruDTOsyue.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 = zhuanjialuruDTOsyue.Count - renwujishu;
                                        if (youxiaojijian > 0)
                                        {
                                            hrSalaryDTO.Jixiaoticheng += Math.Round(jixiaotichengfangan.Ticheng.Value * youxiaojijian, 2);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    #endregion
                }
@@ -3426,7 +3607,7 @@
                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)
@@ -3463,21 +3644,90 @@
                                decimal peichang1 = hrSalaryDTO1.Peichang.HasValue ? hrSalaryDTO1.Peichang.Value : 0;
                                decimal jiucuo1 = hrSalaryDTO1.Jiucuo.HasValue ? hrSalaryDTO1.Jiucuo.Value : 0;
                                baodinianxin += jibengongzi1 + baomifei1 + gongzuobutie1 + jiabangongzi1 + shebao1 + quanqinjiang1 + jiaotngbutie1 + jixiaoticheng1 + jiangjin1 + bufagongzi1 + jiucuo1;
                                baodinianxin += jibengongzi1 + baomifei1 + gongzuobutie1 + jiabangongzi1 + shebao1 + quanqinjiang1 + jiaotngbutie1 + jixiaoticheng1 + jiangjin1 + bufagongzi1 + jiucuo1+ peichang1;
                            }
                        }
                        baodinianxin += jibengongzi + baomifei + gongzuobutie + jiabangongzi + shebao + quanqinjiang + jiaotngbutie + jixiaoticheng + jiangjin + bufagongzi + jiucuo;
                        if(baodinianxin < userList[i].miniyearsalary.Value)
                        baodinianxin += jibengongzi + baomifei + gongzuobutie + jiabangongzi + shebao + quanqinjiang + jiaotngbutie + jixiaoticheng + jiangjin + bufagongzi + jiucuo + peichang;
                        if (baodinianxin < userList[i].miniyearsalary.Value)
                        {
                            jiucuo = userList[i].miniyearsalary.Value - baodinianxin;
                        }
                    }    
                }
                yingfaheji = jibengongzi + baomifei + gongzuobutie + jiabangongzi + shebao + quanqinjiang + jiaotngbutie + jixiaoticheng + jiangjin + bufagongzi - shebaokou + ((dianhuabutie - dianhuafei) <= 0 ? (dianhuabutie - dianhuafei) : 0) - queqin - fakuan + peichang + jiucuo;
                hrSalaryDTO.Yufagongzi = userList[i].advancewages;
                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);
                    if (hrSalaryDTOlast != null && hrSalaryDTOlast.Yufagongziheji.HasValue)
                    {
                        hrSalaryDTO.Yufagongziheji = hrSalaryDTOlast.Yufagongziheji;
                    }
                    if (hrSalaryDTO.Yufagongziheji > 0)
                    {
                        if (yingfaheji < (hrSalaryDTO.Yufagongzi+shebao- shebaokou))
                        {
                            hrSalaryDTO.Yufagongziheji += (hrSalaryDTO.Yufagongzi + shebao - shebaokou - yingfaheji);
                            yingfaheji = (hrSalaryDTO.Yufagongzi.Value + shebao - shebaokou);
                        }
                        else if (yingfaheji > (hrSalaryDTO.Yufagongzi + shebao - shebaokou))
                        {
                            if (hrSalaryDTO.Yufagongziheji >= (yingfaheji - (hrSalaryDTO.Yufagongzi + shebao - shebaokou)))
                            {
                                hrSalaryDTO.Yufagongziheji += ((hrSalaryDTO.Yufagongzi + shebao - shebaokou) - yingfaheji);
                                yingfaheji = (hrSalaryDTO.Yufagongzi.Value + shebao - shebaokou);
                            }
                            else
                            {
                                yingfaheji -= hrSalaryDTO.Yufagongziheji.Value;
                                hrSalaryDTO.Yufagongziheji = 0;
                            }
                        }
                    }
                    else if (hrSalaryDTO.Yufagongziheji == 0)
                    {
                        hrSalaryDTO.Yufagongziheji += ((hrSalaryDTO.Yufagongzi + shebao - shebaokou) - yingfaheji);
                        if (yingfaheji < (hrSalaryDTO.Yufagongzi + shebao - shebaokou))
                        {
                            yingfaheji = (hrSalaryDTO.Yufagongzi.Value + shebao - shebaokou);
                        }
                    }
                    else if (hrSalaryDTO.Yufagongziheji < 0)
                    {
                        if (yingfaheji < (hrSalaryDTO.Yufagongzi.Value + shebao - shebaokou))
                        {
                            if (-hrSalaryDTO.Yufagongziheji >= ((hrSalaryDTO.Yufagongzi.Value + shebao - shebaokou) - yingfaheji))
                            {
                                hrSalaryDTO.Yufagongziheji += ((hrSalaryDTO.Yufagongzi.Value + shebao - shebaokou) - yingfaheji);
                                yingfaheji = (hrSalaryDTO.Yufagongzi.Value + shebao - shebaokou);
                            }
                            else
                            {
                                yingfaheji += hrSalaryDTO.Yufagongziheji.Value;
                                hrSalaryDTO.Yufagongziheji = 0;
                            }
                        }
                    }
                }
                yingnashuie = jibengongzi + baomifei + gongzuobutie + jiabangongzi + shebao  + quanqinjiang + jiaotngbutie + jixiaoticheng + jiangjin + bufagongzi - shebaokou + ( (dianhuabutie - dianhuafei)<=0? (dianhuabutie - dianhuafei) : 0) - queqin - fakuan - peichang + jiucuo - geshuiqizheng;
                yingnashuie = yingfaheji - geshuiqizheng;
                hrSalaryDTO.Geshui = 0;
@@ -3488,32 +3738,53 @@
                    decimal yingnashuie3 = 0;
                    decimal yingnashuie4 = 0;
                    decimal yingnashuie5 = 0;
                    if (yingnashuie > 39250)
                    decimal yingnashuie6 = 0;
                    decimal yingnashuie7 = 0;
                    if (yingnashuie > 80000)
                    {
                        yingnashuie1 = 4750;
                        yingnashuie2 = (9250 - 4750);
                        yingnashuie3 = (25250 - 9250);
                        yingnashuie4 = (39250 - 25250);
                        yingnashuie5 = (yingnashuie - 39250);
                        yingnashuie1 = 3000;
                        yingnashuie2 = (12000 - 3000);
                        yingnashuie3 = (25000 - 12000);
                        yingnashuie4 = (35000 - 25000);
                        yingnashuie5 = (55000 - 35000);
                        yingnashuie6 = (80000 - 55000);
                        yingnashuie7 = (yingnashuie - 55000);
                    }
                    else if (yingnashuie > 25250)
                    if (yingnashuie > 55000)
                    {
                        yingnashuie1 = 4750;
                        yingnashuie2 = (9250 - 4750);
                        yingnashuie3 = (25250 - 9250);
                        yingnashuie4 = (yingnashuie - 25250);
                        yingnashuie1 = 3000;
                        yingnashuie2 = (12000 - 3000);
                        yingnashuie3 = (25000 - 12000);
                        yingnashuie4 = (35000 - 25000);
                        yingnashuie5 = (55000 - 35000);
                        yingnashuie6 = (yingnashuie - 55000);
                    }
                    if (yingnashuie > 35000)
                    {
                        yingnashuie1 = 3000;
                        yingnashuie2 = (12000 - 3000);
                        yingnashuie3 = (25000 - 12000);
                        yingnashuie4 = (35000 - 25000);
                        yingnashuie5 = (yingnashuie - 35000);
                    }
                    else if (yingnashuie > 25000)
                    {
                        yingnashuie1 = 3000;
                        yingnashuie2 = (12000 - 3000);
                        yingnashuie3 = (25000 - 12000);
                        yingnashuie4 = (yingnashuie - 25000);
                    }
                    else if (yingnashuie > 9250)
                    else if (yingnashuie > 12000)
                    {
                        yingnashuie1 = 4750;
                        yingnashuie2 = (9250 - 4750);
                        yingnashuie3 = (yingnashuie - 9250);
                        yingnashuie1 = 3000;
                        yingnashuie2 = (12000 - 3000);
                        yingnashuie3 = (yingnashuie - 12000);
                    }
                    else if (yingnashuie > 4750)
                    else if (yingnashuie > 3000)
                    {
                        yingnashuie1 = 4750;
                        yingnashuie2 = (yingnashuie - 4750);
                        yingnashuie1 = 3000;
                        yingnashuie2 = (yingnashuie - 3000);
                    }
                    else
                    {
@@ -3521,7 +3792,7 @@
                    }
                    if (yingnashuie1 > 0)
                    {
                        var yingjiao1 = Math.Round(yingnashuie1 * new decimal(0.05) - 0, 2);
                        var yingjiao1 = Math.Round(yingnashuie1 * new decimal(0.03) - 0, 2);
                        if (yingjiao1 > 0)
                        {
                            hrSalaryDTO.Geshui += yingjiao1;
@@ -3530,7 +3801,7 @@
                    }
                    if (yingnashuie2 > 0)
                    {
                        var yingjiao2 = Math.Round(yingnashuie2 * new decimal(0.1) - 250, 2);
                        var yingjiao2 = Math.Round(yingnashuie2 * new decimal(0.1) - 0, 2);
                        if (yingjiao2 > 0)
                        {
                            hrSalaryDTO.Geshui += yingjiao2;
@@ -3538,7 +3809,7 @@
                    }
                    if (yingnashuie3 > 0)
                    {
                        var yingjiao3 = Math.Round(yingnashuie3 * new decimal(0.2) - 1250, 2);
                        var yingjiao3 = Math.Round(yingnashuie3 * new decimal(0.2) - 0, 2);
                        if (yingjiao3 > 0)
                        {
                            hrSalaryDTO.Geshui += yingjiao3;
@@ -3546,7 +3817,7 @@
                    }
                    if (yingnashuie4 > 0)
                    {
                        var yingjiao4 = Math.Round(yingnashuie4 * new decimal(0.3) - 4250, 2);
                        var yingjiao4 = Math.Round(yingnashuie4 * new decimal(0.25) - 0, 2);
                        if (yingjiao4 > 0)
                        {
                            hrSalaryDTO.Geshui += yingjiao4;
@@ -3554,39 +3825,39 @@
                    }
                    if (yingnashuie5 > 0)
                    {
                        var yingjiao5 = Math.Round(yingnashuie5 * new decimal(0.35) - 6750, 2);
                        var yingjiao5 = Math.Round(yingnashuie5 * new decimal(0.30) - 0, 2);
                        if (yingjiao5 > 0)
                        {
                            hrSalaryDTO.Geshui += yingjiao5;
                        }
                    }
                    if (yingnashuie6 > 0)
                    {
                        var yingjiao6 = Math.Round(yingnashuie6 * new decimal(0.35) - 0, 2);
                        if (yingjiao6 > 0)
                        {
                            hrSalaryDTO.Geshui += yingjiao6;
                        }
                    }
                    if (yingnashuie7 > 0)
                    {
                        var yingjiao7 = Math.Round(yingnashuie7 * new decimal(0.45) - 0, 2);
                        if (yingjiao7 > 0)
                        {
                            hrSalaryDTO.Geshui += yingjiao7;
                        }
                    }
                }
                decimal geshui = hrSalaryDTO.Geshui.HasValue ? hrSalaryDTO.Geshui.Value : 0;
                hrSalaryDTO.Daozhanggongzi += jibengongzi + baomifei + gongzuobutie + jiabangongzi + shebao  + quanqinjiang + jiaotngbutie + jixiaoticheng + jiangjin + bufagongzi - shebaokou - geshui + ((dianhuabutie - dianhuafei) <= 0 ? (dianhuabutie - dianhuafei) : 0) - queqin - fakuan - peichang + jiucuo;
                hrSalaryDTO.Daozhanggongzi = yingfaheji - geshui;
                hrSalaryDTO.Yufagongzi = userList[i].advancewages;
                if (userList[i].advancewages.HasValue)
                {
                    hrSalaryDTO.Yufagongziheji = 0;
                    HrSalaryDTO hrSalaryDTOlast = _hrSalaryService.GetListByUser(userList[i].Id, dateminkaoqin.AddMonths(-1).Year, dateminkaoqin.AddMonths(-1).Month);
                    if(hrSalaryDTOlast!=null && hrSalaryDTOlast.Yufagongziheji.HasValue)
                    {
                        hrSalaryDTO.Yufagongziheji = hrSalaryDTOlast.Yufagongziheji;
                    }
                    hrSalaryDTO.Yufagongziheji += (hrSalaryDTO.Daozhanggongzi- hrSalaryDTO.Yufagongzi);
                    if (hrSalaryDTO.Daozhanggongzi < hrSalaryDTO.Yufagongzi)
                    {
                        hrSalaryDTO.Daozhanggongzi = hrSalaryDTO.Yufagongzi;
                    }
                }
                hrSalaryDTO.RecStatus = "A";
                hrSalaryDTO.Islock = "D";
                hrSalaryDTO.Creater = "1";