using NCC.Common.Configuration; using NCC.Common.Core.Manager; using NCC.Common.Enum; using NCC.Common.Extension; using NCC.Common.Filter; using NCC.Common.Helper; using NCC.Common.Model.NPOI; using NCC.DataEncryption; using NCC.Dependency; using NCC.DynamicApiController; using NCC.Extend.Entitys.common_extend; using NCC.Extend.Entitys.Dto.Employee; using NCC.FriendlyException; using NCC.LinqBuilder; using NCC.System.Interfaces.Common; using Mapster; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SqlSugar; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace NCC.Extend { ///     /// 职员管理(导入导出)     /// 版 本:V1.20.15     /// 版 权:Wesley(https://www.NCCsoft.com)     /// 作 者:NCC开发平台组     /// 日 期:2022-03-16     /// [ApiDescriptionSettings(Tag = "Extend", Name = "Employee", Order = 600)] [Route("api/extend/[controller]")] public class EmployeeService : IDynamicApiController, ITransient { private readonly ISqlSugarRepository _employeeRepository; private readonly IFileService _fileService; private readonly IUserManager _userManager; /// /// /// /// /// /// public EmployeeService(ISqlSugarRepository employeeRepository, IFileService fileService, IUserManager userManager) { _employeeRepository = employeeRepository; _fileService = fileService; _userManager = userManager; } #region GET /// /// 列表 /// /// 请求参数 /// [HttpGet("")] public async Task GetList([FromQuery] EmployeeListQuery input) { var whereLambda = LinqExpression.And(); whereLambda = whereLambda.And(x => x.DeleteMark == null); if (input.condition.IsNotEmptyOrNull() && input.keyword.IsNotEmptyOrNull()) { string propertyName = input.condition; string propertyValue = input.keyword; switch (propertyName) { case "EnCode": //工号 whereLambda = whereLambda.And(t => t.EnCode.Contains(propertyValue)); break; case "FullName": //姓名 whereLambda = whereLambda.And(t => t.FullName.Contains(propertyValue)); break; case "Telephone": //电话 whereLambda = whereLambda.And(t => t.Telephone.Contains(propertyValue)); break; case "DepartmentName": //部门 whereLambda = whereLambda.And(t => t.DepartmentName.Contains(propertyValue)); break; case "PositionName": //职位 whereLambda = whereLambda.And(t => t.PositionName.Contains(propertyValue)); break; default: break; } } var list = await _employeeRepository.Entities.Where(whereLambda).OrderBy(x => x.CreatorTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize); var pageList = new SqlSugarPagedList() { list = list.list.Adapt>(), pagination = list.pagination }; return PageResult.SqlSugarPageResult(pageList); } /// /// 信息 /// /// 主键值 /// [HttpGet("{id}")] public async Task GetInfo(string id) { var data = await _employeeRepository.FirstOrDefaultAsync(x => x.Id == id && x.DeleteMark == null); return data; } /// /// 导入预览 /// /// [HttpGet("ImportPreview")] public dynamic ImportPreview(string fileName) { try { var filePath = FileVariable.TemporaryFilePath; var savePath = filePath + fileName; //得到数据 var excelData = ExcelImportHelper.ToDataTable(savePath); foreach (var item in excelData.Columns) { excelData.Columns[item.ToString()].ColumnName = GetFiledEncode(item.ToString()); } //删除文件 FileHelper.DeleteFile(savePath); //返回结果 return new { dataRow = excelData }; } catch (Exception e) { throw NCCException.Oh(ErrorCode.D1801); } } #endregion #region POST /// /// 新建 /// /// 实体对象 /// [HttpPost("")] public async Task Create(EmployeeEntity entity) { await _employeeRepository.Context.Insertable(entity).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync(); } /// /// 更新 /// /// 主键值 /// 实体对象 /// [HttpPut("{id}")] public async Task Update(string id, EmployeeEntity entity) { await _employeeRepository.Context.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandAsync(); } /// /// 删除 /// /// 主键值 /// [HttpDelete("{id}")] public async Task Delete(string id) { var entity = await _employeeRepository.FirstOrDefaultAsync(x=>x.Id==id&& x.DeleteMark==null); await _employeeRepository.Context.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.Delete()).ExecuteCommandAsync(); } /// /// 导出 /// [HttpGet("ExportExcelData")] public async Task ExportExcelData([FromQuery] EmployeeListQuery input) { var dataList = new List(); if (input.dataType == "0") { dataList = await GetPageListData(input); } else { dataList = await GetListData(); } ExcelConfig excelconfig = new ExcelConfig(); excelconfig.FileName = "职员信息.xls"; excelconfig.HeadFont = "微软雅黑"; excelconfig.HeadPoint = 10; excelconfig.IsAllSizeColumn = true; excelconfig.ColumnModel = new List(); var filedList = input.selectKey.Split(","); foreach (var item in filedList) { var column = StringHelper.FunctionStr(item); var excelColumn = GetFiledName(item); excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = column, ExcelColumn = excelColumn }); } var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; ExcelExportHelper.Export(dataList, excelconfig, addPath); return new { name = excelconfig.FileName, url = "/api/file/Download?encryption=" + DESCEncryption.Encrypt(_userManager.UserId + "|" + excelconfig.FileName+"|"+ addPath, "NCC") }; } /// /// 上传文件 /// /// [HttpPost("Uploader")] public async Task Uploader(IFormFile file) { return await _fileService.Uploader("", file); } /// /// 导入数据 /// /// 请求参数 /// [HttpPost("ImportData")] public async Task ImportData_Api([FromBody] ImportDataInput input) { var output = new ImportDataOutput(); foreach (var item in input.list) { try { var entity = item.Adapt(); var isOk = await _employeeRepository.Context.Insertable(entity).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync(); if (isOk<1) { output.failResult.Add(item); output.fnum++; } output.snum++; } catch (Exception) { output.failResult.Add(item); output.fnum++; } } if (output.snum == input.list.Count) { output.resultType = 0; } return output; } /// /// 模板下载 /// [HttpGet("TemplateDownload")] public dynamic TemplateDownload() { var filePath = FileVariable.TemplateFilePath + "employee_import_template.xlsx";//模板路径 var addFilePath = FileVariable.TemporaryFilePath + "职员信息模板.xlsx";//保存路径 if (!FileHelper.IsExistFile(addFilePath)) { List templateList = new List(); ExcelExportHelper.Export(templateList, filePath, addFilePath); } return new { name = "职员信息模板.xlsx", url = "/api/file/Download?encryption=" + DESCEncryption.Encrypt(_userManager.UserId + "|职员信息模板.xlsx","NCC") }; } #endregion #region PrivateMethod /// /// 列表 /// /// private async Task> GetListData() { return await _employeeRepository.Entities.Where(x => x.DeleteMark == null).OrderBy(x => x.CreatorTime, OrderByType.Desc).ToListAsync(); } /// /// 分页列表 /// /// /// private async Task> GetPageListData(EmployeeListQuery input) { var whereLambda = LinqExpression.And(); whereLambda = whereLambda.And(x => x.DeleteMark == null); if (input.condition.IsNotEmptyOrNull() && input.keyword.IsNotEmptyOrNull()) { string propertyName = input.condition; string propertyValue = input.keyword; switch (propertyName) { case "EnCode": //工号 whereLambda = whereLambda.And(t => t.EnCode.Contains(propertyValue)); break; case "FullName": //姓名 whereLambda = whereLambda.And(t => t.FullName.Contains(propertyValue)); break; case "Telephone": //电话 whereLambda = whereLambda.And(t => t.Telephone.Contains(propertyValue)); break; case "DepartmentName": //部门 whereLambda = whereLambda.And(t => t.DepartmentName.Contains(propertyValue)); break; case "PositionName": //职位 whereLambda = whereLambda.And(t => t.PositionName.Contains(propertyValue)); break; default: break; } } var list = await _employeeRepository.Entities.Where(whereLambda).OrderBy(x => x.CreatorTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize); return list.list.Adapt>(); } /// /// 获取字段编码 /// /// /// private string GetFiledEncode(string filed) { switch (filed) { case "工号": return "enCode"; case "姓名": return "fullName"; case "性别": return "gender"; case "部门": return "departmentName"; case "岗位": return "positionName"; case "用工性质": return "workingNature"; case "身份证号": return "idNumber"; case "联系电话": return "telephone"; case "出生年月": return "birthday"; case "参加工作": return "attendWorkTime"; case "最高学历": return "education"; case "所学专业": return "major"; case "毕业院校": return "graduationAcademy"; case "毕业时间": return "graduationTime"; case "创建时间": return "creatorTime"; default: return ""; } } /// /// 获取字段名称 /// /// /// private string GetFiledName(string filed) { switch (filed) { case "enCode": return "工号"; case "fullName": return "姓名"; case "gender": return "性别"; case "departmentName": return "部门"; case "positionName": return "岗位"; case "workingNature": return "用工性质"; case "idNumber": return "身份证号"; case "telephone": return "联系电话"; case "birthday": return "出生年月"; case "attendWorkTime": return "参加工作"; case "education": return "最高学历"; case "major": return "所学专业"; case "graduationAcademy": return "毕业院校"; case "graduationTime": return "毕业时间"; case "creatorTime": return "创建时间"; default: return ""; } } #endregion } }