From efad4f05e52c89f3b42774e313144abd039370e4 Mon Sep 17 00:00:00 2001
From: username@email.com <yzy2002yzy@163.com>
Date: 星期五, 10 二月 2023 11:26:06 +0800
Subject: [PATCH] 考勤怎么加带薪假的计算

---
 zhengcaioa/zhengcaioa/Timer/TimedBackgroundService.cs |  613 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 529 insertions(+), 84 deletions(-)

diff --git a/zhengcaioa/zhengcaioa/Timer/TimedBackgroundService.cs b/zhengcaioa/zhengcaioa/Timer/TimedBackgroundService.cs
index 1444423..d200c1b 100644
--- a/zhengcaioa/zhengcaioa/Timer/TimedBackgroundService.cs
+++ b/zhengcaioa/zhengcaioa/Timer/TimedBackgroundService.cs
@@ -48,7 +48,11 @@
         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 zhengcaioaContext _context;
+        private readonly zcUserInfoN_dbContext _zcUsercontext;
 
         private readonly decimal jiabangongzibiaozhun = new decimal(21.5);
         public TimedBackgroundService(ILogger<TimedBackgroundService> logger, IServiceScopeFactory factory)
@@ -81,6 +85,10 @@
             _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>();
+            _context = factory.CreateScope().ServiceProvider.GetRequiredService<zhengcaioaContext>();
+            _zcUsercontext = factory.CreateScope().ServiceProvider.GetRequiredService<zcUserInfoN_dbContext>();
         }
         protected override async Task ExecuteAsync(CancellationToken stoppingToken)
         {
@@ -130,6 +138,15 @@
                         {
                             jisuangonglinggongzi();
                         }
+
+
+                        _logger.LogInformation("鎶婅秴杩�90澶╄繕娌℃湁杞寲鐨勬。妗堝鎴风殑涓氬姟缁忕悊褰掍负鏃�");
+                        this.ywjlguiling();
+                        _logger.LogInformation("鎶婅秴杩�90澶╄繕娌℃湁杞寲鐨勬。妗堝鎴风殑涓氬姟缁忕悊褰掍负鏃犳墽琛岀粨鏉�");
+
+                        _logger.LogInformation("鎶婁細鍛樼郴缁熷拰oa绯荤粺鎵嬫満鍙风浉鍚岀殑瀹㈡埛鍏宠仈璧锋潵");
+                        this.huiyuanguanlian();
+                        _logger.LogInformation("鎶婁細鍛樼郴缁熷拰oa绯荤粺鎵嬫満鍙风浉鍚岀殑瀹㈡埛鍏宠仈璧锋潵鎵ц缁撴潫");
                     }
                     catch (Exception ex)
                     {
@@ -203,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()
         {
@@ -234,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);
@@ -259,6 +341,7 @@
                     admAttendanceDTO.Qingjia = 0;
                     admAttendanceDTO.Jiaban = 0;
                     admAttendanceDTO.Xiaojia = 0;
+                    admAttendanceDTO.Daixinjia = 0;
                     admAttendanceDTO.Chidao = 0;
                     admAttendanceDTO.Zaotui = 0;
                     admAttendanceDTO.Kuanggong = 0;
@@ -284,6 +367,7 @@
                 decimal Zaotui = 0;
                 decimal Kuanggong = 0;
                 decimal Xiaojia = 0;
+                decimal Daixinjia = 0;
 
                 while (dateminkaoqin < datemaxkaoqin)
                 {
@@ -317,8 +401,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 +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();
                    
@@ -371,6 +455,8 @@
                     decimal Kuanggongtianshu = 0;
                     decimal dangtianqingjia = 0;
                     decimal dangtianxiaojia = 0;
+                    decimal dangtiandaixinjia = 0;
+
                     string Iswork = "D";
                     if (iswork)
                     {
@@ -445,6 +531,10 @@
                                     {
                                         endttime = dateBiJiaoDTOs[i].EndTime;
                                     }
+                                }
+                                if (endttime>= StratTimeWorkingEnd)
+                                {
+                                    break;
                                 }
                             }
                             if (kuanggong)
@@ -563,6 +653,10 @@
                                         endttime = dateBiJiaoDTOs[i].EndTime;
                                     }
                                 }
+                                if (endttime >= StratTimeOffworkEnd)
+                                {
+                                    break;
+                                }
                             }
                             if (kuanggong)
                             {
@@ -617,7 +711,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)
                         {
                             
@@ -678,6 +772,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);
 
@@ -754,10 +905,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 +1161,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)
                             {
 
@@ -1071,6 +1222,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);
 
@@ -1151,10 +1360,10 @@
                                 {
                                     jiabanshijian = admAskovertimeDTO.Overtime.Value;
                                 }
-
-
-
-
+                                if (jiabanshijian > new decimal(shangbanshijian) / 60)
+                                {
+                                    jiabanshijian = new decimal(shangbanshijian) / 60;
+                                }
                                 Jiaban += Math.Round(jiabanshijian * 60 / shangbanshijian, 2);
                             }
                         }
@@ -1182,7 +1391,7 @@
                         admAttendanceDtlDTO.OvertimeOut = admSignInDTO.OvertimeOut;
                         admAttendanceDtlDTO.Qingjia = dangtianqingjia;
                         admAttendanceDtlDTO.Xiaojia = dangtianxiaojia;
-                       
+                        admAttendanceDtlDTO.Daixinjia = dangtiandaixinjia;
 
 
 
@@ -1218,6 +1427,7 @@
                         admAttendanceDtlDTO.OvertimeIn = admSignInDTO.OvertimeIn;
                         admAttendanceDtlDTO.OvertimeOut = admSignInDTO.OvertimeOut;
                         admAttendanceDtlDTO.Qingjia = dangtianqingjia;
+                        admAttendanceDtlDTO.Daixinjia = dangtiandaixinjia;
                         admAttendanceDtlDTO.Xiaojia = dangtianxiaojia;
                         
 
@@ -1269,6 +1479,7 @@
 
 
                 admAttendanceDTO.Qingjia = Qingjia;
+                admAttendanceDTO.Daixinjia = Daixinjia;
                 admAttendanceDTO.Xiaojia = Xiaojia;
                 admAttendanceDTO.Chidao = Chidao;
                 admAttendanceDTO.Islock = "A";
@@ -1286,8 +1497,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 +1554,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 +1583,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 +1611,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 +1635,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 +1656,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 +1666,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 +1742,7 @@
 
                   
 
-                    //yingnashuie = BasicPrice - Shebaogeren - geshuiqizheng;
+                   
 
                     
                 }
@@ -1719,9 +1972,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 +1994,6 @@
 
 
 
-                hrSalaryDTO.Fakuan = 0;
                 //宸ヤ綔瀹夋帓缃氭
                 List<AdmMemoBookDTO> admMemoBookDTOs =  _DailyManageService.GetRemindsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin,"2");
                 if (admMemoBookDTOs.Count > 0)
@@ -1772,6 +2032,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 +2121,12 @@
                     }
                     #endregion
 
+
+
+                 
+
                     #region 瀹㈡埛璧勬枡褰曞叆
-                    
+
                     var _intentionCustomerDTOs = _intentionCustomerService.GetListsalary(userList[i].Id, dateminkaoqin, datemaxkaoqin);
                     if (_intentionCustomerDTOs!=null && _intentionCustomerDTOs.Count > 0)
                     {
@@ -3400,6 +3708,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 +3781,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 +3818,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 +3912,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 +3966,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 +3975,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 +3983,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 +3991,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 +3999,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";

--
Gitblit v1.9.1