Bladeren bron

计算工资 5.11

leiy 1 jaar geleden
bovenliggende
commit
682d69dd7b

+ 81 - 1
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -1,4 +1,6 @@
-using Autofac.Diagnostics;
+using Aspose.Cells;
+using Autofac.Diagnostics;
+using MathNet.Numerics.Statistics.Mcmc;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.AspNetCore.Mvc.RazorPages;
 using OASystem.API.OAMethodLib;
@@ -6,7 +8,10 @@ using OASystem.API.OAMethodLib.QiYeWeChatAPI;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.PersonnelModule;
 using OASystem.Domain.Dtos.QiYeWeChat;
+using OASystem.Domain.Entities.Business;
+using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.Entities.PersonnelModule;
+using OASystem.Domain.ViewModels.Business;
 using OASystem.Domain.ViewModels.JuHeExchangeRate;
 using OASystem.Domain.ViewModels.PersonnelModule;
 using OASystem.Domain.ViewModels.QiYeWeChat;
@@ -16,6 +21,8 @@ using StackExchange.Redis;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
+using System.IO;
+using System.Web;
 
 namespace OASystem.API.Controllers
 {
@@ -374,6 +381,79 @@ namespace OASystem.API.Controllers
            
             
         }
+
+
+
+        /// <summary>
+        /// 导出工资单
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> ExportWageCard(string yearMonth)
+        {
+            Result result = new Result();
+            Stopwatch sw = new Stopwatch();
+            sw.Start();
+
+            //参数处理
+            string ymFormat = "yyyy-MM";
+            DateTime yearMonthDt;
+            bool yearMonthDtIsValid = DateTime.TryParseExact(yearMonth, ymFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out yearMonthDt);
+
+            if (!yearMonthDtIsValid) return Ok(JsonView(false, "年月格式错误!正确时间格式:yyyy-MM  "));
+            //公司部门
+            string sql = string.Format(@"Select row_number() over(order by pm_ws.Id) as Row_Number,
+                                         	sc.Id as CompanyId,sc.CompanyName,sd.Id as DepId,sd.DepName, 
+                                         	sys_u1.CnName Name,sys_u2.CnName LastUpdateUserName,pm_ws.* 
+                                         From Pm_WageSheet pm_ws
+                                         Left Join Sys_Users sys_u1 On pm_ws.UserId = sys_u1.Id
+                                         Left Join Sys_Users sys_u2 On pm_ws.LastUpdateUserId = sys_u2.Id
+                                         Left Join Sys_Company sc On  sys_u1.companyId = sc.Id
+                                         Left Join Sys_Department sd On sys_u1.DepId = sd.Id
+                                         Where pm_ws.IsDel = 0 And pm_ws.YearMonth = '{0}'", yearMonth);
+            var wageSheetList = await _wageSheetRep._sqlSugar.SqlQueryable<ExportWageSheetItemView>(sql).ToListAsync();
+
+            if (wageSheetList.Count <= 0)
+            {
+                return Ok(JsonView(false, yearMonth + "暂无工资数据!"));
+            }
+
+            decimal SumPrice = 0.00M;
+            foreach (var item in wageSheetList)
+            {
+                SumPrice += item.AfterTax;
+            }
+
+            WorkbookDesigner designer = new WorkbookDesigner();
+            //string tepUrl = string.Format("http://132.232.92.186:24/Server/File/OA2023/Office/Excel/Template/工资详细清单.xlsx");
+            //designer.Workbook = new Workbook(tepUrl);
+            designer.Workbook = new Workbook(AppSettingsHelper.Get("ExcelBasePath") + "Template/工资详细清单.xlsx");
+
+            designer.SetDataSource("YearMonth", yearMonth);
+            designer.SetDataSource("StartEndDt", wageSheetList[0].StartDate +" - "+ wageSheetList[0].EndDate);
+            designer.SetDataSource("WorkDays", wageSheetList[0].WorkDays);
+            designer.SetDataSource("SumPrice", SumPrice);
+
+            designer.Process();
+            string fileName = "WageCard/" + HttpUtility.UrlEncode(yearMonth + "工资单") + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
+            string path = AppSettingsHelper.Get("ExcelBasePath");
+            designer.Workbook.Save(path + fileName);
+            designer = null;
+
+            string excelPath = AppSettingsHelper.Get("ExcelFtpPath") + fileName;
+            string url = AppSettingsHelper.Get("ExcelBaseUrl");
+
+            string fileUrl = url + excelPath;
+
+
+
+            sw.Stop();
+            return Ok(JsonView(true, "操作成功!耗时:" + (sw.ElapsedMilliseconds / 1000) + "s", new { FileUrl = fileUrl }));
+
+
+        }
+
         #endregion
 
     }

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

@@ -121,4 +121,5 @@
   "GrpFileBaseUrl": "http://132.232.92.186:24/",
   "GrpFileBasePath": "C:/Server/File/OA2023/Office/GrpFile/"
 
+
 }

+ 2 - 0
OASystem/OASystem.Domain/Dtos/PersonnelModule/WageSheetDto.cs

@@ -282,4 +282,6 @@ namespace OASystem.Domain.Dtos.PersonnelModule
         /// <summary>
        /// 其他扣款
        /// </summary>                                 
        public decimal OtherDeductions { get; set; }
 
     }
+
+   
 }

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

@@ -312,6 +312,96 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
     }
 
 
+    public class ExportWageSheetItemView:Pm_WageSheet
+    {
+        
+        /// <summary>
+        /// 公司Id
+        /// </summary>
+        public int CompanyId { get; set; }
+
+        /// <summary>
+        /// 公司名称
+        /// </summary>
+        public string? CompanyName { get; set; }
+
+        /// <summary>
+        /// 部门Id
+        /// </summary>
+        public int DepId { get; set; }
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string? DepName { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 年月
+        /// </summary>
+        public string? YearMonth { get; set; }
+
+        /// <summary>
+        /// 工资日期 起
+        /// </summary>
+        public string? StartDate { get; set; }
+
+        /// <summary>
+        /// 工资日期 止
+        /// </summary>
+        public string? EndDate { get; set; }
+
+        /// <summary>
+        /// 应出勤天数
+        /// </summary>
+        public int WorkDays { get; set; }
+
+        /// <summary>
+        /// 员工Id
+        /// </summary>
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 员工Name
+        /// </summary>
+        public string? Name { get; set; }
+
+
+        /// <summary>
+        /// 税前合计
+        /// </summary>
+        public decimal BeforeTax
+        {
+            get
+            {
+                return WithholdingTax + AfterTax;
+            }
+        }
+
+        /// <summary>
+        /// 税后工资
+        /// </summary>
+        public decimal AfterTax { get; set; }
+
+        /// <summary>
+        /// 最后操作人
+        /// </summary>
+        public int LastUpdateUserId { get; set; }
+
+        /// <summary>
+        /// 员工Name
+        /// </summary>
+        public string? LastUpdateUserName { get; set; }
+
+        /// <summary>
+        /// 最后操作时间
+        /// </summary>
+        public DateTime? LastUpdateDt { get; set; }
+    }
+
     /// <summary>
     /// 工资列表信息
     /// </summary>