diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/AppointScheduleTemplateDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/AppointScheduleTemplateDto.cs new file mode 100644 index 0000000..da1e728 --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/AppointScheduleTemplateDto.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.AppointScheduleTemplates +{ + public class AppointScheduleTemplateDto : AuditedEntityDtoName + { + /// + /// 主键 + /// + public Guid AppointScheduleTemplateId { get; set; } + /// + /// 星期 + /// + + public int WeekId { get; set; } + /// + /// 上午数量限制 + /// + + public int AmNumberLimit { get; set; } + /// + /// 下午数量限制 + /// + + public int PmNumberLimit { get; set; } + /// + /// 个人体检数量限制 + /// + public int SingleNumberLimit { get; set; } + /// + /// 上午上班时间 + /// + + public string? AmStartTime { get; set; } + /// + /// 上午下班时间 + /// + + public string? AmStopTime { get; set; } + /// + /// 下午上班时间 + /// + + public string? PmStartTime { get; set; } + /// + /// 下午下班时间 + /// + + public string? PmStopTime { get; set; } + + public int DisplayOrder { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/AppointScheduleTemplateIdInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/AppointScheduleTemplateIdInputDto.cs new file mode 100644 index 0000000..88978be --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/AppointScheduleTemplateIdInputDto.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.AppointScheduleTemplates +{ + public class AppointScheduleTemplateIdInputDto + { + /// + /// 主键 + /// + public Guid AppointScheduleTemplateId { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/CreateAppointScheduleTemplateDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/CreateAppointScheduleTemplateDto.cs new file mode 100644 index 0000000..473ddb6 --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/CreateAppointScheduleTemplateDto.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.AppointScheduleTemplates +{ + public class CreateAppointScheduleTemplateDto + { + /// + /// 星期 + /// + + public int WeekId { get; set; } + /// + /// 上午数量限制 + /// + + public int AmNumberLimit { get; set; } + /// + /// 下午数量限制 + /// + + public int PmNumberLimit { get; set; } + /// + /// 个人体检数量限制 + /// + public int SingleNumberLimit { get; set; } + /// + /// 上午上班时间 + /// + + public string? AmStartTime { get; set; } + /// + /// 上午下班时间 + /// + + public string? AmStopTime { get; set; } + /// + /// 下午上班时间 + /// + + public string? PmStartTime { get; set; } + /// + /// 下午下班时间 + /// + + public string? PmStopTime { get; set; } + + } +} diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/UpdateAppointScheduleTemplateDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/UpdateAppointScheduleTemplateDto.cs new file mode 100644 index 0000000..89a1e83 --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/AppointScheduleTemplates/UpdateAppointScheduleTemplateDto.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.AppointScheduleTemplates +{ + public class UpdateAppointScheduleTemplateDto + { + + /// + /// 主键 + /// + public Guid AppointScheduleTemplateId { get; set; } + + /// + /// 星期 + /// + + public int WeekId { get; set; } + /// + /// 上午数量限制 + /// + + public int AmNumberLimit { get; set; } + /// + /// 下午数量限制 + /// + + public int PmNumberLimit { get; set; } + /// + /// 个人体检数量限制 + /// + public int SingleNumberLimit { get; set; } + /// + /// 上午上班时间 + /// + + public string? AmStartTime { get; set; } + /// + /// 上午下班时间 + /// + + public string? AmStopTime { get; set; } + /// + /// 下午上班时间 + /// + + public string? PmStartTime { get; set; } + /// + /// 下午下班时间 + /// + + public string? PmStopTime { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application.Contracts/AuditedEntityDtoName.cs b/src/Shentun.WebPeis.Application.Contracts/AuditedEntityDtoName.cs new file mode 100644 index 0000000..8fa7b79 --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/AuditedEntityDtoName.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Volo.Abp.Application.Dtos; + +namespace Shentun.WebPeis +{ + public class AuditedEntityDtoName: AuditedEntityDto + { + /// + /// 创建者 + /// + public string CreatorName { get; set; } + + /// + /// 最后修改者 + /// + public string LastModifierName { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application.Contracts/UpdateManySortInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/UpdateManySortInputDto.cs new file mode 100644 index 0000000..0161eaa --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/UpdateManySortInputDto.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis +{ + public class UpdateManySortInputDto + { + /// + /// 需要修改的ID + /// + public Guid Id { get; set; } + + /// + /// 修改方式:1 置顶 2 置底 + /// + public int SortType { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application.Contracts/Users/UpdatePassWordDto.cs b/src/Shentun.WebPeis.Application.Contracts/Users/UpdatePassWordDto.cs new file mode 100644 index 0000000..4dfba37 --- /dev/null +++ b/src/Shentun.WebPeis.Application.Contracts/Users/UpdatePassWordDto.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.WebPeis.Users +{ + public class UpdatePassWordDto + { + /// + /// 旧密码 + /// + public string OldPassWord { get; set; } + + + /// + /// 新密码 + /// + public string NewPassWord { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Application/AppointScheduleTemplates/AppointScheduleTemplateAppService.cs b/src/Shentun.WebPeis.Application/AppointScheduleTemplates/AppointScheduleTemplateAppService.cs new file mode 100644 index 0000000..eaf4219 --- /dev/null +++ b/src/Shentun.WebPeis.Application/AppointScheduleTemplates/AppointScheduleTemplateAppService.cs @@ -0,0 +1,107 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; +using Shentun.WebPeis.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace Shentun.WebPeis.AppointScheduleTemplates +{ + /// + /// 预约计划模板 + /// + [Authorize] + [ApiExplorerSettings(GroupName = "Work")] + public class AppointScheduleTemplateAppService : ApplicationService + { + + private readonly IRepository _appointScheduleTemplateRepository; + private readonly AppointScheduleTemplateManager _appointScheduleTemplateManager; + private readonly CacheService _cacheService; + public AppointScheduleTemplateAppService( + IRepository appointScheduleTemplateRepository, + AppointScheduleTemplateManager appointScheduleTemplateManager, + CacheService cacheService) + { + _appointScheduleTemplateRepository = appointScheduleTemplateRepository; + _appointScheduleTemplateManager = appointScheduleTemplateManager; + _cacheService = cacheService; + } + + /// + /// 创建 + /// + /// + /// + [HttpPost("api/app/AppointScheduleTemplate/Create")] + public async Task CreateAsync(CreateAppointScheduleTemplateDto input) + { + var createEntity = ObjectMapper.Map(input); + var entity = await _appointScheduleTemplateManager.CreateAsync(createEntity); + entity = await _appointScheduleTemplateRepository.InsertAsync(entity); + var dto = ObjectMapper.Map(entity); + dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId); + dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId); + return dto; + } + + /// + /// 更新 + /// + /// + /// + [HttpPost("api/app/AppointScheduleTemplate/Update")] + public async Task UpdateAsync(UpdateAppointScheduleTemplateDto input) + { + var entity = await _appointScheduleTemplateRepository.GetAsync(g => g.AppointScheduleTemplateId == input.AppointScheduleTemplateId); + var sourceEntity = ObjectMapper.Map(input); + await _appointScheduleTemplateManager.UpdateAsync(sourceEntity, entity); + entity = await _appointScheduleTemplateRepository.UpdateAsync(entity); + var dto = ObjectMapper.Map(entity); + dto.CreatorName = await _cacheService.GetSurnameAsync(dto.CreatorId); + dto.LastModifierName = await _cacheService.GetSurnameAsync(dto.LastModifierId); + return dto; + } + + + /// + /// 删除 + /// + /// + /// + [HttpPost("api/app/AppointScheduleTemplate/Delete")] + public async Task DeleteAsync(AppointScheduleTemplateIdInputDto input) + { + await _appointScheduleTemplateManager.CheckAndDeleteAsync(input.AppointScheduleTemplateId); + } + + + + /// + /// 修改排序 置顶,置底 + /// + /// + /// + [HttpPost("api/app/AppointScheduleTemplate/UpdateManySort")] + public async Task UpdateManySortAsync(UpdateManySortInputDto input) + { + await _appointScheduleTemplateManager.UpdateManySortAsync(input.Id, input.SortType); + } + + /// + /// 修改排序 拖拽 + /// + /// + /// + [HttpPost("api/app/AppointScheduleTemplate/UpdateSortMany")] + public async Task UpdateSortManyAsync(UpdateSortManyDto input) + { + await _appointScheduleTemplateManager.UpdateSortManyAsync(input); + } + } +} diff --git a/src/Shentun.WebPeis.Application/Users/UserAppService.cs b/src/Shentun.WebPeis.Application/Users/UserAppService.cs index 96d4f4f..2d86185 100644 --- a/src/Shentun.WebPeis.Application/Users/UserAppService.cs +++ b/src/Shentun.WebPeis.Application/Users/UserAppService.cs @@ -20,6 +20,8 @@ using Volo.Abp.Domain.Repositories; using Volo.Abp.Identity; using Volo.Abp.Security.Encryption; using Volo.Abp.Users; +using Microsoft.AspNetCore.Authorization; +using Shentun.WebPeis.Permissions; namespace Shentun.WebPeis.Users { @@ -44,7 +46,7 @@ namespace Shentun.WebPeis.Users private readonly IRepository _identityUserOrganizationUnitRepository; private readonly CurrentUser _currentUser; private readonly IDistributedCache _userCache; - + public UserAppService( IRepository identityUserRepository, IdentityUserManager userManager, @@ -80,7 +82,36 @@ namespace Shentun.WebPeis.Users this._identityUserOrganizationUnitRepository = identityUserOrganizationUnitRepository; this._currentUser = currentUser; _userCache = userCache; - + + } + + + /// + /// 修改用户密码 修改自身密码 + /// + /// + /// + [Authorize] + [HttpPost("api/app/Users/UpdatePassWord")] + public async Task UpdatePassWordAsync(UpdatePassWordDto input) + { + + var user = await _userManager.FindByIdAsync(_currentUser.Id.ToString()); + if (user != null) + { + var isPassWord = await _userManager.CheckPasswordAsync(user, input.OldPassWord); + if (!isPassWord) + { + throw new UserFriendlyException("原密码不正确"); + } + + await _userManager.RemovePasswordAsync(user); + + await _userManager.AddPasswordAsync(user, input.NewPassWord); + + } + + } @@ -95,7 +126,7 @@ namespace Shentun.WebPeis.Users UserLoginDto msg; - + var user = await _userManager.FindByNameAsync(input.UserName); if (user != null) { @@ -116,7 +147,7 @@ namespace Shentun.WebPeis.Users throw new UserFriendlyException("账号已被锁定"); } using var client = new HttpClient(); - TokenResponse token = await RequestAuthServerLoginByPasswordAsync(client,input.UserName, input.PassWord); + TokenResponse token = await RequestAuthServerLoginByPasswordAsync(client, input.UserName, input.PassWord); if (token.HttpResponse != null && token.HttpResponse.StatusCode == HttpStatusCode.OK) { @@ -173,7 +204,7 @@ namespace Shentun.WebPeis.Users protected virtual async Task RequestAuthServerLoginByPasswordAsync(HttpClient client, string username, string password) { - + var request = new PasswordTokenRequest { diff --git a/src/Shentun.WebPeis.Domain/AppointScheduleTemplates/AppointScheduleTemplateManager.cs b/src/Shentun.WebPeis.Domain/AppointScheduleTemplates/AppointScheduleTemplateManager.cs new file mode 100644 index 0000000..13a520d --- /dev/null +++ b/src/Shentun.WebPeis.Domain/AppointScheduleTemplates/AppointScheduleTemplateManager.cs @@ -0,0 +1,131 @@ +using Microsoft.Extensions.Configuration.UserSecrets; +using NPOI.SS.Formula.Functions; +using Shentun.Utilities; +using Shentun.WebPeis.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; +using Volo.Abp; +using Volo.Abp.Domain.Repositories; +using NPOI.POIFS.FileSystem; + +namespace Shentun.WebPeis.AppointScheduleTemplates +{ + public class AppointScheduleTemplateManager + { + + private readonly IRepository _appointScheduleTemplateRepository; + + public AppointScheduleTemplateManager( + IRepository appointScheduleTemplateRepository + ) + { + _appointScheduleTemplateRepository = appointScheduleTemplateRepository; + } + + /// + /// 创建 + /// + /// + /// + public async Task CreateAsync( + AppointScheduleTemplate entity + ) + { + DataHelper.CheckEntityIsNull(entity); + + var isWeekId = await _appointScheduleTemplateRepository.FirstOrDefaultAsync(f => f.WeekId == entity.WeekId); + if (isWeekId != null) + throw new UserFriendlyException($"WeekId数据已存在,不能重复"); + return new AppointScheduleTemplate + { + AppointScheduleTemplateId = entity.AppointScheduleTemplateId, + DisplayOrder = await EntityHelper.CreateMaxDisplayOrder(_appointScheduleTemplateRepository), + AmNumberLimit = entity.AmNumberLimit, + AmStartTime = entity.AmStartTime, + AmStopTime = entity.AmStopTime, + PmNumberLimit = entity.PmNumberLimit, + PmStartTime = entity.PmStartTime, + PmStopTime = entity.PmStopTime, + SingleNumberLimit = entity.SingleNumberLimit, + WeekId = entity.WeekId + }; + } + + /// + /// 更新 + /// + /// + /// + /// + public async Task UpdateAsync( + AppointScheduleTemplate sourceEntity, + AppointScheduleTemplate targetEntity + ) + { + DataHelper.CheckEntityIsNull(sourceEntity); + DataHelper.CheckEntityIsNull(targetEntity); + + var isWeekId = await _appointScheduleTemplateRepository.FirstOrDefaultAsync(f => f.WeekId == sourceEntity.WeekId + && f.AppointScheduleTemplateId != targetEntity.AppointScheduleTemplateId); + if (isWeekId != null) + throw new UserFriendlyException($"WeekId数据已存在,不能重复"); + + targetEntity.AmNumberLimit = sourceEntity.AmNumberLimit; + targetEntity.AmStartTime = sourceEntity.AmStartTime; + targetEntity.AmStopTime = sourceEntity.AmStopTime; + targetEntity.PmNumberLimit = sourceEntity.PmNumberLimit; + targetEntity.PmStartTime = sourceEntity.PmStartTime; + targetEntity.PmStopTime = sourceEntity.PmStopTime; + targetEntity.SingleNumberLimit = sourceEntity.SingleNumberLimit; + targetEntity.WeekId = sourceEntity.WeekId; + } + + + /// + /// 删除 + /// + /// + /// + /// + public async Task CheckAndDeleteAsync(Guid appointScheduleTemplateId) + { + await _appointScheduleTemplateRepository.DeleteAsync(d => d.AppointScheduleTemplateId == appointScheduleTemplateId); + + } + + + /// + /// 修改排序 置顶,置底 + /// + /// 需要修改的ID + /// 修改方式:1 置顶 2 置底 + /// + public async Task UpdateManySortAsync(Guid appointScheduleTemplateId, int SortType) + { + var entity = await _appointScheduleTemplateRepository.GetAsync(f => f.AppointScheduleTemplateId == appointScheduleTemplateId); + await EntityHelper.UpdateManySortAsync(_appointScheduleTemplateRepository, entity, SortType); + } + + + + /// + /// 修改排序 拖拽 + /// + /// + /// + /// + /// + public async Task UpdateSortManyAsync(UpdateSortManyDto input) + { + + var entitylist = await _appointScheduleTemplateRepository.GetListAsync(o => input.ItemList.Select(s => s.Id).Contains(o.AppointScheduleTemplateId)); + + await EntityHelper.UpdateSortManyAsync(_appointScheduleTemplateRepository, entitylist, input); + } + + } +} diff --git a/src/Shentun.WebPeis.Domain/DataHelper.cs b/src/Shentun.WebPeis.Domain/DataHelper.cs new file mode 100644 index 0000000..d0c845d --- /dev/null +++ b/src/Shentun.WebPeis.Domain/DataHelper.cs @@ -0,0 +1,345 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; + +namespace Shentun.WebPeis +{ + public class DataHelper + { + + /// + /// 统一转换日期为字符串格式 + /// + /// + /// + public static string ConversionDateToString(DateTime? dateTime) + { + if (dateTime == null) + { + return ""; + } + else + { + return dateTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); + } + } + + /// + /// 转换 只保留年月日 + /// + /// + /// + public static string ConversionDateShortToString(DateTime? dateTime) + { + if (dateTime == null) + { + return ""; + } + else + { + return dateTime.Value.ToString("yyyy-MM-dd"); + } + } + + /// + /// 转换人民币大小金额 + /// + /// 金额 + /// 返回大写形式 + public static string CmycurD(decimal num) + { + string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字 + string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字 + string str3 = ""; //从原num值中取出的值 + string str4 = ""; //数字的字符串形式 + string str5 = ""; //人民币大写金额形式 + int i; //循环变量 + int j; //num的值乘以100的字符串长度 + string ch1 = ""; //数字的汉语读法 + string ch2 = ""; //数字位的汉字读法 + int nzero = 0; //用来计算连续的零值是几个 + int temp; //从原num值中取出的值 + + num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数 + str4 = ((long)(num * 100)).ToString(); //将num乘100并转换成字符串形式 + j = str4.Length; //找出最高位 + if (j > 15) { return "溢出"; } + str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分 + + //循环取出每一位需要转换的值 + for (i = 0; i < j; i++) + { + str3 = str4.Substring(i, 1); //取出需转换的某一位的值 + temp = Convert.ToInt32(str3); //转换为数字 + if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15)) + { + //当所取位数不为元、万、亿、万亿上的数字时 + if (str3 == "0") + { + ch1 = ""; + ch2 = ""; + nzero = nzero + 1; + } + else + { + if (str3 != "0" && nzero != 0) + { + ch1 = "零" + str1.Substring(temp * 1, 1); + ch2 = str2.Substring(i, 1); + nzero = 0; + } + else + { + ch1 = str1.Substring(temp * 1, 1); + ch2 = str2.Substring(i, 1); + nzero = 0; + } + } + } + else + { + //该位是万亿,亿,万,元位等关键位 + if (str3 != "0" && nzero != 0) + { + ch1 = "零" + str1.Substring(temp * 1, 1); + ch2 = str2.Substring(i, 1); + nzero = 0; + } + else + { + if (str3 != "0" && nzero == 0) + { + ch1 = str1.Substring(temp * 1, 1); + ch2 = str2.Substring(i, 1); + nzero = 0; + } + else + { + if (str3 == "0" && nzero >= 3) + { + ch1 = ""; + ch2 = ""; + nzero = nzero + 1; + } + else + { + if (j >= 11) + { + ch1 = ""; + nzero = nzero + 1; + } + else + { + ch1 = ""; + ch2 = str2.Substring(i, 1); + nzero = nzero + 1; + } + } + } + } + } + if (i == (j - 11) || i == (j - 3)) + { + //如果该位是亿位或元位,则必须写上 + ch2 = str2.Substring(i, 1); + } + str5 = str5 + ch1 + ch2; + + if (i == j - 1 && str3 == "0") + { + //最后一位(分)为0时,加上“整” + str5 = str5 + '整'; + } + } + if (num == 0) + { + str5 = "零元整"; + } + return str5; + } + + #region 数据检查 + + + /// + /// 数据检查 对象 + /// + /// 需要验证的对象 + /// 字段名称 + /// 异常提示后缀 + /// + public static void CheckEntityIsNull(object value, string parameterName = "对象", string ExceptionMessage = "不能为空") + { + if (value == null) + { + throw new UserFriendlyException($"{parameterName}{ExceptionMessage}"); + } + } + + + /// + /// 数据检查 字符串 + /// + /// 需要验证的值 + /// 字段名称 + /// 异常提示后缀 + /// + public static void CheckStringIsNull(string value, string parameterName, string ExceptionMessage = "不能为空") + { + if (string.IsNullOrWhiteSpace(value)) + { + throw new UserFriendlyException($"{parameterName}{ExceptionMessage}"); + } + } + + #region 验证char类型参数 + /// + /// 验证char类型参数是否为null + /// + /// 需要验证的值 + /// 字段名称 + /// 异常提示后缀 + /// + public static void CheckCharIsNull(char? value, string parameterName, string ExceptionMessage = "不能为空") + { + if (value == null) + { + throw new ArgumentException($"{parameterName}{ExceptionMessage}"); + } + + } + + /// + /// 验证char类型参数是否为0 + /// + /// 需要验证的值 + /// 字段名称 + /// 异常提示后缀 + /// + public static void CheckCharIsZero(char value, string parameterName, string ExceptionMessage = "不能为0") + { + if (value == '0') + { + throw new ArgumentException($"{parameterName}{ExceptionMessage}"); + } + } + + /// + /// 验证char类型参数是否为Y、N + /// + /// 需要验证的值 + /// 字段名称 + /// + public static void CheckCharIsYOrN(char value, string parameterName) + { + if (value != 'Y' && value != 'N') + { + throw new ArgumentException($"{parameterName}参数为:{value},是无效值,只能为Y跟N"); + } + } + #endregion + + /// + /// 验证Int类型数据是否>0 + /// + /// 需要验证的值 + /// 字段名称 + /// 异常提示后缀 + /// + public static void CheckIntIsGeaterThanZero(int value, string parameterName, string ExceptionMessage = "只能为大于0的值") + { + if (value <= 0) + { + throw new UserFriendlyException($"{parameterName}{ExceptionMessage}"); + } + } + + + /// + /// 验证Guid数据是否为null + /// + /// 需要验证的值 + /// 字段名称 + /// 异常提示后缀 + /// + public static void CheckGuidIsNull(Guid? value, string parameterName, string ExceptionMessage = "不能为空") + { + if (value == null) + { + throw new UserFriendlyException($"{parameterName}{ExceptionMessage}"); + } + } + + + /// + /// 验证Guid数据是否为默认值00000000-0000-0000-0000-000000000000 + /// + /// 需要验证的值 + /// 字段名称 + /// 异常提示后缀 + /// + public static void CheckGuidIsDefaultValue(Guid value, string parameterName, string ExceptionMessage = "不能为默认值00000000-0000-0000-0000-000000000000") + { + if (value == Guid.Empty || value == default(Guid)) + { + throw new UserFriendlyException($"{parameterName}{ExceptionMessage}"); + } + } + + /// + ///验证decimal类型数据大于0 + /// + /// 需要验证的值 + /// 字段名称 + /// 异常提示后缀 + /// + public static void CheckDecimalIsGeaterThanZero(decimal value, string parameterName, string ExceptionMessage = "值只能大于0") + { + if (value <= 0) + { + throw new UserFriendlyException($"{parameterName}{ExceptionMessage}"); + } + } + + + /// + /// 数据检查 decimal + /// + /// 需要验证的值 + /// 字段名称 + /// 异常提示后缀 + /// + public static void CheckDecimalIsNull(decimal? value, string parameterName, string ExceptionMessage = "不能为空") + { + if (value == null) + { + throw new UserFriendlyException($"{parameterName}{ExceptionMessage}"); + } + } + + + + public static void CheckIdNo(string idNo) + { + if (string.IsNullOrWhiteSpace(idNo)) + { + throw new Exception("身份证号不能是空值"); + } + if (idNo.Length != 18) + throw new Exception("身份证号长度必须为18位"); + + var birthDate = Convert.ToDateTime(idNo.Substring(6, 4) + "-" + + idNo.Substring(10, 2) + "-" + + idNo.Substring(12, 2)); + if (birthDate < new DateTime(1880, 1, 1) || birthDate > DateTime.Now.Date) + { + throw new Exception("身份证号中的出生日期不正确"); + } + } + + #endregion + } +} diff --git a/src/Shentun.WebPeis.Domain/EntityHelper.cs b/src/Shentun.WebPeis.Domain/EntityHelper.cs new file mode 100644 index 0000000..9c9ccad --- /dev/null +++ b/src/Shentun.WebPeis.Domain/EntityHelper.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Domain.Repositories; + +namespace Shentun.WebPeis +{ + public class EntityHelper + { + /// + /// 创建最大显示顺序 + /// + /// + /// + /// + public static async Task CreateMaxDisplayOrder(IRepository repository) + where TEntity : class, IEntity, IDisplayOrder + { + int? maxDisplayOrder = await repository.MaxAsync(o => (int?)o.DisplayOrder); + return (maxDisplayOrder ?? 0) + 1; + } + + + + /// + /// 修改排序 置顶,置底 + /// + /// + /// + /// 需要修改的ID + /// 修改方式:1 置顶 2 置底 + /// 排序规则 0、升序 1、降序 (默认降序) + /// + public static async Task UpdateManySortAsync(IRepository repository, TEntity entity, int SortType) + where TEntity : class, IEntity, IDisplayOrder + { + + List UptList = new List(); + + if (SortType == 2) + { + UptList = (await repository.GetListAsync(o => o.DisplayOrder > entity.DisplayOrder)).OrderBy(o => o.DisplayOrder).ToList(); + + if (UptList.Count > 0) + { + + int indexnum = entity.DisplayOrder; //原有值 + + entity.DisplayOrder = UptList[UptList.Count - 1].DisplayOrder; //修改当前排序值为最大 + + //置顶操作,往上一行开始,逐渐替换 + foreach (var item in UptList) + { + int dqnum = item.DisplayOrder; + item.DisplayOrder = indexnum; + indexnum = dqnum; + } + } + } + else + { + UptList = (await repository.GetListAsync(o => o.DisplayOrder < entity.DisplayOrder)).OrderByDescending(o => o.DisplayOrder).ToList(); ; + + if (UptList.Count > 0) + { + int indexnum = entity.DisplayOrder; //原有值 + + entity.DisplayOrder = UptList[UptList.Count - 1].DisplayOrder; //修改当前排序值为最小 + + //置底操作,往下一行开始,逐渐替换 + foreach (var item in UptList) + { + int dqnum = item.DisplayOrder; + item.DisplayOrder = indexnum; + indexnum = dqnum; + } + } + } + + + UptList.Add(entity); + + + await repository.UpdateManyAsync(UptList); + + } + + /// + /// 修改排序 拖拽 + /// + /// + /// + /// + /// + public static async Task UpdateSortManyAsync(IRepository repository, List entitylist, UpdateSortManyDto input) + where TEntity : class, IEntity, IDisplayOrder + { + + foreach (var entity in entitylist) + { + foreach (var item in input.ItemList) + { + if (item.Id == Guid.Parse(entity.GetKeys().FirstOrDefault().ToString())) + entity.DisplayOrder = item.DisplayOrder; + } + } + + await repository.UpdateManyAsync(entitylist); + + } + } + + +} diff --git a/src/Shentun.WebPeis.Domain/IDisplayOrder.cs b/src/Shentun.WebPeis.Domain/IDisplayOrder.cs new file mode 100644 index 0000000..ad11a7d --- /dev/null +++ b/src/Shentun.WebPeis.Domain/IDisplayOrder.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.WebPeis +{ + public interface IDisplayOrder + { + int DisplayOrder { get; set; } + } +} diff --git a/src/Shentun.WebPeis.Domain/Models/AppointScheduleTemplate.cs b/src/Shentun.WebPeis.Domain/Models/AppointScheduleTemplate.cs index c8c3737..22faa5e 100644 --- a/src/Shentun.WebPeis.Domain/Models/AppointScheduleTemplate.cs +++ b/src/Shentun.WebPeis.Domain/Models/AppointScheduleTemplate.cs @@ -8,8 +8,9 @@ namespace Shentun.WebPeis.Models; /// /// 预约计划模板 /// -public partial class AppointScheduleTemplate : AuditedEntity, IHasConcurrencyStamp +public class AppointScheduleTemplate : AuditedEntity, IHasConcurrencyStamp, IDisplayOrder { + /// /// 主键 /// @@ -18,7 +19,7 @@ public partial class AppointScheduleTemplate : AuditedEntity, IHasConcurrencySta /// 星期 /// - public int? WeekId { get; set; } + public int WeekId { get; set; } /// /// 上午数量限制 /// @@ -54,7 +55,7 @@ public partial class AppointScheduleTemplate : AuditedEntity, IHasConcurrencySta public TimeOnly? PmStopTime { get; set; } - public int? DisplayOrder { get; set; } + public int DisplayOrder { get; set; } diff --git a/src/Shentun.WebPeis.Domain/UpdateSortManyDto.cs b/src/Shentun.WebPeis.Domain/UpdateSortManyDto.cs new file mode 100644 index 0000000..e68b83c --- /dev/null +++ b/src/Shentun.WebPeis.Domain/UpdateSortManyDto.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.WebPeis +{ + public class UpdateSortManyDto + { + public List ItemList { get; set; } + } + + public class UpdateSortMany + { + public Guid Id { get; set; } + public int DisplayOrder { get; set; } + } +}