Browse Source

计算工资 5.15

lyyyi 1 year ago
parent
commit
dfca7a124f

+ 2 - 4
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -243,7 +243,7 @@ namespace OASystem.API.Controllers
             string preYearMonth = yearMonthDt.AddMonths(-1).ToString("yyyy-MM");
 
 
-            Result hoildays = await PayrollComputation.GetHoilDays(startDt, endDt);
+            Result hoildays = await PayrollComputation.GetWorkDays(startDt, endDt);
 
             //计算本月工资起止时间 比如是2月的1号-28号,那就是2月1号的零点到3月1号的零点 
             DateTime thisStartDt = startDt;
@@ -274,7 +274,7 @@ namespace OASystem.API.Controllers
 
             List<Pm_WageSheet> wageSheets = new List<Pm_WageSheet>();
 
-            _result = await PayrollComputation.SalaryCalculatorAsync(preWageSheetItems1, userNames,dto.UserId, thisYearMonth, thisStartDt, thisEndDt);
+            _result = await PayrollComputation.SalaryCalculatorAsync(preWageSheetItems1, userNames,dto.UserId, thisYearMonth, thisStartDt,      );
 
             #region 批量添加
 
@@ -385,8 +385,6 @@ namespace OASystem.API.Controllers
             
         }
 
-
-
         /// <summary>
         /// 导出工资单
         /// </summary>

+ 70 - 35
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -49,6 +49,10 @@ namespace OASystem.API.OAMethodLib
                 userNames = nameData.Data;
             }
 
+            //计算时间段内工作日
+
+            int work_days = GetWorkDays(startDt, endDt);
+
             //获取所有打卡数据
             CheckInView checkIn = await _qiYeWeChatApiService.GetCheckin_MonthDataAsync(startDt, endDt); //时间段内所有 打卡数据
             if (checkIn.errcode != 0)
@@ -112,8 +116,8 @@ namespace OASystem.API.OAMethodLib
                     Summary_Info? summary_Info = checkInData.summary_info;
                     if (summary_Info == null) { continue; }
 
-                    int work_days = summary_Info.work_days -1;   //应出勤天数 
-                    int regular_days = summary_Info.regular_days - 1;  //正常出勤天数
+                    //int work_days = summary_Info.work_days -1;   //应出勤天数 
+                    //int regular_days = summary_Info.regular_days - 1;  //正常出勤天数
 
                     meal_subsidy = work_days * 10; //应发放餐补
 
@@ -638,7 +642,7 @@ namespace OASystem.API.OAMethodLib
                     pm_wsInfo.StartDate = startDt.ToString("yyyy-MM-dd");
                     pm_wsInfo.EndDate = endDt.AddDays(-1).ToString("yyyy-MM-dd");
                     pm_wsInfo.WorkDays = work_days;        //当月应出勤天数
-                    pm_wsInfo.RegularDays = regular_days;  //当月正常出勤天数
+                    //pm_wsInfo.RegularDays = regular_days;  //当月正常出勤天数
 
                     pm_wsInfo.SickLeave = sickLeaveTotal;           //病假
                     pm_wsInfo.SomethingFalse = personalLeaveTotal;  //事假
@@ -1031,58 +1035,89 @@ namespace OASystem.API.OAMethodLib
         }
 
         /// <summary>
-        /// 获取时间段内节假日
+        /// 获取时间段内除周末 节假日外的 工作日
         /// </summary>
         /// <param name="startDt"></param>
         /// <param name="endDt"></param>
         /// <returns></returns>
-        public static async  Task<Result> GetHoilDays(DateTime startDt,DateTime endDt) 
+        public static int GetWorkDays(DateTime startDt,DateTime endDt) 
         {
-            Result result = new Result();
-            
+              //{
+              //   "userId": 0,
+              //    "yearMonth": "2023-09",
+              //    "startDt": "2023-08-28",
+              //    "endDt": "2023-09-27"
+              //  }
+
+            string startYear = startDt.ToString("yyyy");
+            string endYear = endDt.ToString("yyyy");
+
+            var holidays = AppSettingsHelper.Get<HoliDaysDataSourceView>("HoliDayDataSource");
+            List<HoliDaysDataSourceView> holiDatas = new List<HoliDaysDataSourceView>();
+            if (startYear.Equals(endYear))
+            {
+                holiDatas.Add(holidays.Where(it => it.Year == startYear).FirstOrDefault());
+            }
+            else
+            {
+                holiDatas.Add(holidays.Where(it => it.Year == startYear).FirstOrDefault());
+                holiDatas.Add(holidays.Where(it => it.Year == endYear).FirstOrDefault());
+            }
 
-            HttpClient _httpClient = new HttpClient();
-            var res = await _httpClient.GetAsync("https://timor.tech/api/holiday/year/"+ startDt.ToString("yyyy"));
+            int _totalDays = (int)(endDt - startDt).TotalDays;
+            List<HolidaysInfo> _holidays = new List<HolidaysInfo>();
+            List<HolidaysInfo> _weekdys = new List<HolidaysInfo>();
+            List<HolidaysInfo> _workdays = new List<HolidaysInfo>();
+            string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
 
-            if (res.IsSuccessStatusCode)
+            for (int i = 0; i < _totalDays; i++)
             {
-                var stringResponse = await res.Content.ReadAsStringAsync();
-
-                HoiDaysRes obj = JsonConvert.DeserializeObject<HoiDaysRes>(stringResponse);
+                string thisYear = startDt.ToString("yyyy");
+                string thisDt = startDt.ToString("MM-dd");
+                string thisYMD = startDt.ToString("yyyy-MM-dd");
+                string thisWeek = Day[Convert.ToInt32(startDt.DayOfWeek.ToString("d"))].ToString();
 
 
-                
-                if (obj.code == 0)
+                HoliDaysDataSourceView holiDaysData = new HoliDaysDataSourceView();
+                holiDaysData = holiDatas.Where(it => it.Year == thisYear).FirstOrDefault();
+                //周末
+                if (thisWeek.Equals("星期六") || thisWeek.Equals("星期日"))
                 {
-                    int hoilDays = 0;
-                    while (true)
+                    HolidaysInfo holidaysInfo = new HolidaysInfo();
+                    holidaysInfo = holiDaysData.Holidays.Where(it => it.HoliDate == thisDt).FirstOrDefault();
+                    if (holidaysInfo != null)
                     {
-                        string dt = startDt.ToString("MM-dd");
-
-                        if (startDt == endDt)
+                        if (holidaysInfo.HoliName.Equals("工作日"))
                         {
+                            _workdays.Add(new HolidaysInfo { HoliDate = thisYMD, HoliName = Day[Convert.ToInt32(startDt.DayOfWeek.ToString("d"))].ToString() });
+                            startDt = startDt.AddDays(1);
                             continue;
                         }
-                        startDt.AddDays(1);
                     }
-
-                    result.Code = 0;
-                    result.Data = hoilDays;
+                    _weekdys.Add(new HolidaysInfo { HoliDate = thisYMD, HoliName = thisWeek });
+                    startDt = startDt.AddDays(1);
+                    continue;
                 }
-                int code = obj.code;
                 
-            }
-
-            return result;
-
-
-        }
+                //节假日
+                if (holiDaysData != null)
+                {
+                    HolidaysInfo holidaysInfo = new HolidaysInfo();
+                    holidaysInfo = holiDaysData.Holidays.Where(it => it.HoliDate == thisDt).FirstOrDefault();
+                    if (holidaysInfo != null)
+                    {
+                        _holidays.Add(new HolidaysInfo { HoliDate = thisYMD, HoliName = holidaysInfo.HoliName });
+                        startDt = startDt.AddDays(1);
+                        continue;
+                    }
+                }
+                //工作日
+                _workdays.Add(new HolidaysInfo { HoliDate = thisYMD, HoliName = Day[Convert.ToInt32(startDt.DayOfWeek.ToString("d"))].ToString() });
 
-        public class HoiDaysRes
-        {
-            public int code { get; set; }
+                startDt = startDt.AddDays(1);
+            }
 
-            public object holiday { get; set; }
+            return _workdays.Count();
         }
     }
 }

+ 67 - 1
OASystem/OASystem.Api/appsettings.json

@@ -119,6 +119,72 @@
   "WordFtpPath": "Office/Word/",
 
   "GrpFileBaseUrl": "http://132.232.92.186:24/",
-  "GrpFileBasePath": "C:/Server/File/OA2023/Office/GrpFile/"
+  "GrpFileBasePath": "C:/Server/File/OA2023/Office/GrpFile/",
+  //节假日
+  "HoliDayDataSource": [
+    {
+      "Year": "2023",
+      "Holidays": [
+        {
+          "HoliDate": "09-29",
+          "HoliName": "中秋"
+        },
+        {
+          "HoliDate": "09-30",
+          "HoliName": "中秋"
+        },
+        {
+          "HoliDate": "10-01",
+          "HoliName": "国庆"
+        },
+        {
+          "HoliDate": "10-02",
+          "HoliName": "国庆"
+        },
+        {
+          "HoliDate": "10-03",
+          "HoliName": "国庆"
+        },
+        {
+          "HoliDate": "10-04",
+          "HoliName": "国庆"
+        },
+        {
+          "HoliDate": "10-05",
+          "HoliName": "国庆"
+        },
+        {
+          "HoliDate": "10-06",
+          "HoliName": "国庆"
+        },
+        {
+          "HoliDate": "10-07",
+          "HoliName": "工作日"
+        },
+        {
+          "HoliDate": "10-08",
+          "HoliName": "工作日"
+        },
+        {
+          "HoliDate": "12-30",
+          "HoliName": "元旦"
+        },
+        {
+          "HoliDate": "12-31",
+          "HoliName": "元旦"
+        }
+      ]
+    },
+    {
+      "Year": "2024",
+      "Holidays": [
+        {
+          "HoliDate": "01-01",
+          "HoliName": "元旦"
+        }
+      ]
+    }
+
+  ]
 
 }

+ 25 - 0
OASystem/OASystem.Domain/ViewModels/PersonnelModule/WageSheetView.cs

@@ -473,4 +473,29 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
     }
 
     #endregion
+
+    #region 法定节假日
+
+    public class HoliDaysDataSourceView
+    {
+        /// <summary>
+        /// 年
+        /// </summary>
+        public string Year { get; set; }
+
+        public List<HolidaysInfo> Holidays { get; set; }
+    }
+    public class HolidaysInfo
+    {
+        /// <summary>
+        /// 节假日期
+        /// </summary>
+        public string HoliDate { get; set; }
+
+        /// <summary>
+        /// 节假日 
+        /// </summary>
+        public string HoliName { get; set; }
+    }
+    #endregion
 }