FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Enums/Common/EnumValidationTypes.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/FlexJobApi.Core.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/EditEnterpriseEmployeeCommand.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/ImportEnterpriseEmployeesCommand.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Utils/DateTimeUtils/DateTimeUtils.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Utils/StringUtils/StringUtils.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs
@@ -61,6 +61,11 @@ public EnumUserGender? Gender { get; set; } /// <summary> /// 生日 /// </summary> public DateTime? Birthday { get; set; } /// <summary> /// 年龄 /// </summary> public int? Age { get; set; } FlexJobApi.Core/Enums/Common/EnumValidationTypes.cs
New file @@ -0,0 +1,27 @@ using Furion.DataValidation; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 验证类型 /// </summary> [ValidationType] public enum EnumValidationTypes { /// <summary> /// 手机号 /// </summary> [ValidationItemMetadata(@"^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$", "手机号格式不正确")] PhoneNumber, /// <summary> /// 身份证号 /// </summary> [ValidationItemMetadata(@"^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\d{3}(\d|X|x)$", "身份证号格式不正确")] Identity, } } FlexJobApi.Core/FlexJobApi.Core.xml
@@ -1460,6 +1460,11 @@ 性别 </summary> </member> <member name="P:FlexJobApi.Core.EnterpriseEmployee.Birthday"> <summary> 生日 </summary> </member> <member name="P:FlexJobApi.Core.EnterpriseEmployee.Age"> <summary> 年龄 @@ -2635,6 +2640,21 @@ <summary> 818钱包开通 验证码${code},用户您好,您正在进行平台钱包开通,该验证码5分钟内有效,请勿泄露于他人。 </summary> </member> <member name="T:FlexJobApi.Core.EnumValidationTypes"> <summary> 验证类型 </summary> </member> <member name="F:FlexJobApi.Core.EnumValidationTypes.PhoneNumber"> <summary> 手机号 </summary> </member> <member name="F:FlexJobApi.Core.EnumValidationTypes.Identity"> <summary> 身份证号 </summary> </member> <member name="T:FlexJobApi.Core.EnumBillingMethod"> @@ -5802,11 +5822,25 @@ <summary> 手机号 </summary> <remarks>联系电话</remarks> </member> <member name="P:FlexJobApi.Core.ImportEnterpriseEmployeesCommandModel.Identity"> <summary> 身份证号 </summary> </member> <member name="P:FlexJobApi.Core.ImportEnterpriseEmployeesCommandModel.Birthday"> <summary> 生日 </summary> </member> <member name="P:FlexJobApi.Core.ImportEnterpriseEmployeesCommandModel.Age"> <summary> 年龄 </summary> </member> <member name="P:FlexJobApi.Core.ImportEnterpriseEmployeesCommandModel.Gender"> <summary> 性别 </summary> </member> <member name="T:FlexJobApi.Core.ImportEnterpriseEmployeesCommandResult"> @@ -5829,7 +5863,7 @@ 失败数量 </summary> </member> <member name="P:FlexJobApi.Core.ImportEnterpriseEmployeesCommandResult.MyProperty"> <member name="P:FlexJobApi.Core.ImportEnterpriseEmployeesCommandResult.Errors"> <summary> 错误信息 </summary> @@ -8815,6 +8849,13 @@ <param name="date">时间</param> <returns>日期</returns> </member> <member name="M:FlexJobApi.Core.DateTimeUtils.GetAge(System.Nullable{System.DateTime})"> <summary> 获取年龄 </summary> <param name="birthday"></param> <returns></returns> </member> <member name="M:FlexJobApi.Core.DateTimeUtils.TryToDateTimeRange(System.String,FlexJobApi.Core.DateTimeRange@)"> <summary> 获取时间范围选择器 @@ -9816,6 +9857,27 @@ <param name="singularName"></param> <returns></returns> </member> <member name="M:FlexJobApi.Core.StringUtils.GetGender(System.String)"> <summary> 获取性别 </summary> <param name="identity"></param> <returns></returns> </member> <member name="M:FlexJobApi.Core.StringUtils.GetBirthday(System.String)"> <summary> 获取生日 </summary> <param name="identity"></param> <returns></returns> </member> <member name="M:FlexJobApi.Core.StringUtils.GetAge(System.String)"> <summary> 获取年龄 </summary> <param name="identity"></param> <returns></returns> </member> <member name="T:FlexJobApi.Core.WxmpOptions"> <summary> 微信小程序配置 FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/EditEnterpriseEmployeeCommand.cs
@@ -1,6 +1,7 @@ using MediatR; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -16,17 +17,22 @@ /// <summary> /// 姓名 /// </summary> [Required] public string Name { get; set; } /// <summary> /// 身份证号 /// </summary> [Required] [DataValidation(EnumValidationTypes.Identity)] public string Identity { get; set; } /// <summary> /// 手机号 /// </summary> /// <remarks>联系电话</remarks> [Required] [DataValidation(EnumValidationTypes.PhoneNumber)] public string ContactPhoneNumber { get; set; } /// <summary> FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/ImportEnterpriseEmployeesCommand.cs
@@ -36,13 +36,30 @@ /// <summary> /// 手机号 /// </summary> /// <remarks>联系电话</remarks> public string ContactPhoneNumber { get; set; } /// <summary> /// 身份证号 /// </summary> public string Identity { get; set; } /// <summary> /// 生日 /// </summary> [JsonIgnore] public DateTime? Birthday { get; set; } /// <summary> /// 年龄 /// </summary> [JsonIgnore] public int? Age { get; set; } /// <summary> /// 性别 /// </summary> [JsonIgnore] public EnumUserGender? Gender { get; set; } } /// <summary> @@ -50,22 +67,30 @@ /// </summary> public class ImportEnterpriseEmployeesCommandResult { public ImportEnterpriseEmployeesCommandResult() { Errors = []; } /// <summary> /// 总数 /// </summary> public int TotalCount { get; set; } /// <summary> /// 成功数量 /// </summary> public int SuccessCount { get; set; } /// <summary> /// 失败数量 /// </summary> public int FailCount { get; set; } /// <summary> /// 错误信息 /// </summary> public List<ImportEnterpriseEmployeesCommandResultError> MyProperty { get; set; } public List<ImportEnterpriseEmployeesCommandResultError> Errors { get; set; } } /// <summary> FlexJobApi.Core/Utils/DateTimeUtils/DateTimeUtils.cs
@@ -83,6 +83,22 @@ } /// <summary> /// 获取年龄 /// </summary> /// <param name="birthday"></param> /// <returns></returns> public static int? GetAge(this DateTime? birthday) { if (birthday == null) return null; var age = DateTime.Now.Year - birthday.Value.Year; if (birthday.Value.Date > DateTime.Today.AddYears(-age)) { age--; } return age; } /// <summary> /// 获取时间范围选择器 /// </summary> /// <param name="str"></param> FlexJobApi.Core/Utils/StringUtils/StringUtils.cs
@@ -1,4 +1,5 @@ using Furion.FriendlyException; using Furion.DataValidation; using Furion.FriendlyException; using Mapster.Utils; using System; using System.Collections.Generic; @@ -77,5 +78,68 @@ return singularName + "s"; } } public static bool CheckIsIdentityNumber18(this string identity) { return identity.IsNotNull() && identity.TryValidate(EnumValidationTypes.Identity).IsValid && identity.Length == 18; } /// <summary> /// 获取性别 /// </summary> /// <param name="identity"></param> /// <returns></returns> public static EnumUserGender? GetGender(this string identity) { if (identity.CheckIsIdentityNumber18()) { return identity[16] % 2 == 0 ? EnumUserGender.Female : EnumUserGender.Male; } else { return null; } } /// <summary> /// 获取生日 /// </summary> /// <param name="identity"></param> /// <returns></returns> public static DateTime? GetBirthday(this string identity) { if (identity.CheckIsIdentityNumber18()) { return new DateTime( identity.Substring(6, 4).ToInt()!.Value, identity.Substring(10, 2).ToInt()!.Value, identity.Substring(12, 2).ToInt()!.Value); } else { return null; } } /// <summary> /// 获取年龄 /// </summary> /// <param name="identity"></param> /// <returns></returns> public static int? GetAge(this string identity) { if (identity.CheckIsIdentityNumber18()) { var birthday = identity.GetBirthday(); return birthday.GetAge(); } else { return null; } } } } FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
@@ -1,6 +1,7 @@ using FlexJobApi.Core; using Furion; using Furion.DatabaseAccessor; using Furion.DataValidation; using Furion.FriendlyException; using Furion.HttpRemote; using Mapster; @@ -11,6 +12,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Security.Principal; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -36,20 +38,91 @@ /// <returns></returns> public async Task<ImportEnterpriseEmployeesCommandResult> Handle(ImportEnterpriseEmployeesCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var result = new ImportEnterpriseEmployeesCommandResult(); var models = await request.ExcelUrl.ImportExcelFromOSS<ImportEnterpriseEmployeesCommandModel>(); var identities = models.DistinctSelect(it => it.Identity); var enterpriseEmployees = await rep.AsQueryable() .Where(it => it.EnterpriseId == logier.EnterpriseId && identities.Contains(it.Identity)) .ToListAsync(); foreach (var model in models) { var error = new ImportEnterpriseEmployeesCommandResultError(); var errors = new List<string>(); if (model.Name.IsNull()) { errors.Add("请填写姓名"); } if (model.ContactPhoneNumber.IsNull()) { error.ErrorMessage += "请填写手机号"; errors.Add("请填写手机号"); } else if (!Regex.IsMatch(model.ContactPhoneNumber, @"^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$")) else if (!model.ContactPhoneNumber.TryValidate(EnumValidationTypes.PhoneNumber).IsValid) { error.ErrorMessage += "手机号格式不正确"; errors.Add("手机号格式不正确"); } if (model.Identity.IsNull()) { errors.Add("请填写身份证号"); } else if (!model.Identity.TryValidate(EnumValidationTypes.Identity).IsValid) { errors.Add("身份证号格式不正确"); } else if (models.Any(it => it.Identity == model.Identity)) { errors.Add("身份证号重复"); } else { model.Gender = model.Identity.GetGender(); model.Birthday = model.Identity.GetBirthday(); model.Age = model.Identity.GetAge(); } if (errors.IsNull()) { var enterpriseEmployee = enterpriseEmployees.FirstOrDefault(it => it.Identity == model.Identity); if (enterpriseEmployee == null) { enterpriseEmployee = new EnterpriseEmployee { EnterpriseId = logier.EnterpriseId!.Value, Name = model.Name, Identity = model.Identity, ContactPhoneNumber = model.ContactPhoneNumber, Gender = model.Gender, Birthday = model.Birthday, Age = model.Age, }; await rep.InsertAsync(enterpriseEmployee); } else { if (enterpriseEmployee.UserId.HasValue) { errors.Add("该灵工已报名无法修改信息"); } else { enterpriseEmployee.Name = model.Name; enterpriseEmployee.ContactPhoneNumber = model.ContactPhoneNumber; enterpriseEmployee.Gender = model.Gender; enterpriseEmployee.Birthday = model.Birthday; enterpriseEmployee.Age = model.Age; await rep.UpdateAsync(enterpriseEmployee); } } } if (errors.IsNotNull()) { var error = model.Adapt<ImportEnterpriseEmployeesCommandResultError>(); error.ErrorMessage = errors.SplitJoin(","); result.Errors.Add(error); } } result.TotalCount = models.Count; result.FailCount = result.Errors.Count; result.SuccessCount = result.TotalCount - result.FailCount; return result; } @@ -61,9 +134,10 @@ /// <returns></returns> public Task<Guid> Handle(EditEnterpriseEmployeeCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); return request.SaveData<EnterpriseEmployee, EditEnterpriseEmployeeCommand>( null, null, q => q.Where(it => it.EnterpriseId == logier.EnterpriseId), it => it.EnterpriseId == logier.EnterpriseId && it.Id != request.Id && it.Identity == request.Identity, (entity) => { if (request.Id.HasValue && entity.UserId.HasValue)