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; }
+    }
+}