Browse Source

团组相关 倒推表
1.数据库表创建
2.编写该接口 增,删,改,查 等接口
3.建团时默认创建倒推表

leiy 11 months ago
parent
commit
226a1de275

+ 3 - 1
OASystem/EntitySync/Program.cs

@@ -127,7 +127,9 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Pm_TaskAllocation), //任务分配 
     //typeof(Pm_TaskRelevanceUser), //任务分配关联人员(完成者) 
     //typeof(Pm_TaskJobRelevancy), //任务分配关联人员(完成者) 
-    typeof(Crm_TableOperationRecord), //表操作记录 
+    //typeof(Crm_TableOperationRecord), //表操作记录 
+    typeof(Grp_InvertedList), //倒推表 
+    typeof(Grp_InvertedListVisaCountry), //倒推表签证国家 
 
 
 });

+ 87 - 1
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -105,6 +105,7 @@ namespace OASystem.API.Controllers
         private readonly IHubContext<ChatHub, IChatClient> _hubContext;
         private readonly UsersRepository _usersRep;
         private readonly IJuHeApiService _juHeApi;
+        private readonly InvertedListRepository _invertedListRep;
 
         public GroupsController(IMapper mapper, SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository,
             TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep, DecreasePaymentsRepository decreasePaymentsRep,
@@ -112,7 +113,8 @@ namespace OASystem.API.Controllers
             , DelegationVisaRepository delegationVisaRep, MessageRepository message, VisaPriceRepository visaPriceRep, CarTouristGuideGroundRepository carTouristGuideGroundRep,
             CheckBoxsRepository checkBoxs, GroupCostRepository GroupCostRepository, CostTypeHotelNumberRepository CostTypeHotelNumberRepository,
             GroupCostParameterRepository GroupCostParameterRepository, HotelPriceRepository hotelPriceRep, CustomersRepository customersRep, SetDataRepository setDataRep,
-            TourClientListRepository tourClientListRep, TeamRateRepository teamRateRep, IHubContext<ChatHub, IChatClient> hubContext, UsersRepository usersRep, IJuHeApiService juHeApi)
+            TourClientListRepository tourClientListRep, TeamRateRepository teamRateRep, IHubContext<ChatHub, IChatClient> hubContext, UsersRepository usersRep, IJuHeApiService juHeApi,
+            InvertedListRepository invertedListRep)
         {
             _mapper = mapper;
             _grpScheduleRep = grpScheduleRep;
@@ -146,6 +148,7 @@ namespace OASystem.API.Controllers
             _hubContext = hubContext;
             _usersRep = usersRep;
             _juHeApi = juHeApi;
+            _invertedListRep = invertedListRep;
         }
 
         #region 流程管控
@@ -596,6 +599,8 @@ namespace OASystem.API.Controllers
                         await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupBusinessOperations, title, content, userIds, diId);
                     }
 
+                    //默认创建倒推表
+                    await _invertedListRep._Create(dto.UserId, diId);
                 }
                 else if (dto.Status == 2)
                 {
@@ -8987,5 +8992,86 @@ namespace OASystem.API.Controllers
         }
 
         #endregion
+
+        #region 团组倒推表
+
+        /// <summary>
+        /// 倒推表基础数据
+        /// Init
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostInvertedListInit()
+        {
+            var viewData = await _invertedListRep._Init();
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(viewData.Data));
+        }
+
+        /// <summary>
+        /// 倒推表 
+        /// Info
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostInvertedListInfo(InvertedListCreateDto dto)
+        {
+            var viewData = await _invertedListRep._Info(dto.PortType, dto.DiId);
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(viewData.Data));
+        }
+
+
+        /// <summary>
+        /// 倒推表 
+        /// Create
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostInvertedListCreate(InvertedListCreateDto dto)
+        {
+            var viewData = await _invertedListRep._Create(dto.PortType,dto.DiId);
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(viewData.Data));
+        }
+
+        /// <summary>
+        /// 倒推表 
+        /// Update
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostInvertedListUpdate(InvertedListUpdateDto dto)
+        {
+            var viewData = await _invertedListRep._Update(dto);
+            if (viewData.Code != 0)
+            {
+                return Ok(JsonView(false, viewData.Msg));
+            }
+
+            return Ok(JsonView(viewData.Data));
+        }
+
+        #endregion
     }
 }

+ 11 - 10
OASystem/OASystem.Api/OAMethodLib/Quartz/Business/TaskAssignment.cs

@@ -1,6 +1,4 @@
-using Microsoft.AspNetCore.SignalR;
-using OASystem.Domain.Entities.Groups;
-using OASystem.Domain.Entities.PersonnelModule;
+using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Infrastructure.Repositories.PersonnelModule;
 using ILogger = Microsoft.Extensions.Logging.ILogger;
 
@@ -36,19 +34,22 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
                 primaryIds = data.Select(it => it.Id).ToList();
                 var subData = _taskAllocationRep._sqlSugar
                                                 .Queryable<Pm_TaskRelevanceUser>()
-                                                .Where(it => it.IsDel == 0 &&
+                                                .Where(it => 
+                                                             it.IsDel == 0 &&
                                                              primaryIds.Contains(it.TAId) &&
                                                              it.TaskStatus <= TaskerEnum.UnderWay
                                                       )
                                                 .ToList();
-                foreach (var item in subData)
-                {
-                    item.OverTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-                    item.TaskStatus = TaskerEnum.UnFinished;
-                    item.Cause = string.Format(@"任务没有提交完成或者超时,由系统设置任务未完成");
-                }
+               
                 if (subData.Count > 0)
                 {
+                    foreach (var item in subData)
+                    {
+                        item.OverTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                        item.TaskStatus = TaskerEnum.UnFinished;
+                        item.Cause = string.Format(@"任务没有提交完成或者超时,由系统设置任务未完成");
+                    }
+
                     var updateStatus = _taskAllocationRep._sqlSugar
                                                          .Updateable(subData)
                                                          .WhereColumns(it => it.Id)

+ 12 - 12
OASystem/OASystem.Api/OAMethodLib/Quartz/Business/TaskNotification.cs

@@ -2,6 +2,7 @@
 using OASystem.API.OAMethodLib.Hub.HubClients;
 using OASystem.API.OAMethodLib.Hub.Hubs;
 using OASystem.API.OAMethodLib.SignalR.Hubs;
+using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Infrastructure.Repositories.PersonnelModule;
 using ILogger = Microsoft.Extensions.Logging.ILogger;
@@ -25,8 +26,8 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
             //在此处编写任务业务代码
             #region 消息处理
 
-            var data = _taskAllocationRep._sqlSugar
-                                         .Queryable<Domain.Entities.PersonnelModule.Pm_TaskAllocation>()
+            var data =  _taskAllocationRep._sqlSugar
+                                         .Queryable<Pm_TaskAllocation>()
                                          .Where(it => it.IsDel == 0 &&
                                                       !string.IsNullOrEmpty(it.PredictEndTime) &&
                                                       Convert.ToDateTime(it.PredictEndTime).ToString("yyyy-MM-dd").Equals(DateTime.Now.ToString("yyyy-MM-dd"))
@@ -38,20 +39,21 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
                 List<int> primaryIds = new List<int>();
                 primaryIds = data.Select(it => it.Id).ToList();
                 var subData = _taskAllocationRep._sqlSugar
-                                                .Queryable<Domain.Entities.PersonnelModule.Pm_TaskRelevanceUser>()
+                                                .Queryable<Pm_TaskRelevanceUser>()
                                                 .Where(it => it.IsDel == 0 &&
                                                              primaryIds.Contains(it.TAId) &&
                                                              (int)it.TaskStatus <= (int)TaskEnum.UnderWay
                                                       )
                                                 .ToList();
 
-                _taskAllocationRep._sqlSugar.BeginTran();
                 var depDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0).ToList();
-                var groupDatas = _taskAllocationRep._sqlSugar.Queryable<Domain.Entities.Groups.Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
+                var groupDatas = _taskAllocationRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
                 var userDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0).ToList();
 
+
                 List<int> userIds = new List<int>();
 
+                _taskAllocationRep._sqlSugar.BeginTran();
                 foreach (var item in data)
                 {
                     string depName = string.Empty;
@@ -83,10 +85,8 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
 
                         var userData = userDatas.Where(it => it.Id == subItem.UserId).FirstOrDefault();
                         if (userData != null) { userName = userData.CnName; }
-                        string msgContent = string.Format(@"归属团组:{1}<br/>
-                                                            预计起止时间:{2} 至 {3}<br/>
-                                                            任务参与者:{4}",
-                                                            groupName, item.PredictBeginTime, item.PredictEndTime, userName);
+                        string msgContent = string.Format(@$"归属团组:{groupName}<br/>
+                                                            任务参与者:{userName}");
                         Sys_Message _Message = new Sys_Message()
                         {
                             Type = MessageTypeEnum.TaskProgressUpdate,
@@ -99,7 +99,7 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
                             DeleteTime = "1990-01-01 00:00:00.000",
                             DiId = item.DiId,
                         };
-                        var msgAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_Message>(_Message).ExecuteReturnIdentity();
+                        var msgAddId = _taskAllocationRep._sqlSugar.Insertable(_Message).ExecuteReturnIdentity();
                         if (msgAddId < 0)
                         {
                             _taskAllocationRep._sqlSugar.RollbackTran();
@@ -118,7 +118,7 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
                             DeleteTime = "1990-01-01 00:00:00.000"
                         };
 
-                        var msgAuthAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_MessageReadAuth>(_MessageReadAuth).ExecuteReturnIdentity();
+                        var msgAuthAddId = _taskAllocationRep._sqlSugar.Insertable(_MessageReadAuth).ExecuteReturnIdentity();
                         if (msgAuthAddId < 0)
                         {
                             _taskAllocationRep._sqlSugar.RollbackTran();
@@ -130,7 +130,7 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
                 }
                 _taskAllocationRep._sqlSugar.CommitTran();
                 //推送消息
-                _hubContext.Clients.Clients(UserStore.OnlineUser.Where(it => userIds.Contains(it.UserId)).Select(it => it.ConnectionId).ToList()).ReceiveMessage("您有新的任务相关消息");
+               await _hubContext.Clients.Clients(UserStore.OnlineUser.Where(it => userIds.Contains(it.UserId)).Select(it => it.ConnectionId).ToList()).ReceiveMessage("您有新的任务相关消息");
 
                 _logger.LogInformation("任务消息推送成功 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "【在线人数】:" + JsonConvert.SerializeObject(UserStore.OnlineUser));
             }

+ 11 - 2
OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/TaskJob.cs

@@ -21,8 +21,17 @@ namespace OASystem.API.OAMethodLib.Quartz.Jobs
         {
             _logger.LogInformation("调用任务状态变更Function " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 
-            //在此处编写任务业务代码
-            TaskAssignment.PostTaskUpdateStatus();
+            try
+            {
+                //在此处编写任务业务代码
+                TaskAssignment.PostTaskUpdateStatus();
+            }
+            catch (Exception ex)
+            {
+
+                _logger.LogInformation($"调用任务状态变更Function ErrorMsg:{ex.Message} " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            }
+           
 
             return Task.CompletedTask;
         }

+ 13 - 3
OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/TaskNewsFeedJob.cs

@@ -28,12 +28,22 @@ namespace OASystem.API.OAMethodLib.Quartz.Jobs
         public async Task Execute(IJobExecutionContext context)
         {
 
-            _logger.LogInformation("调用任务状态变更Function " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            _logger.LogInformation("调用任务消息通知 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 
-            //在此处编写任务业务代码
-             TaskNotification.PostTaskMessageNotification();
+            try
+            {
+                //在此处编写任务业务代码
+                TaskNotification.PostTaskMessageNotification();
+            }
+            catch (Exception ex)
+            {
+
+                _logger.LogInformation($"调用任务消息通知ErrorMsg:{ex.Message} " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            }
+           
 
             //return Task.CompletedTask;
+            await Task.CompletedTask;
         }
     }
 }

+ 1 - 1
OASystem/OASystem.Api/OAMethodLib/Quartz/QuartzFactory.cs

@@ -33,7 +33,7 @@ namespace QuzrtzJob.Factory
                             .Build();
             
             var taskTrigger = TriggerBuilder.Create()
-                            //.WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever())//每两秒执行一次
+                            //.WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever())//每六十秒执行一次
                             .WithCronSchedule("0 0 9,18 * * ?") //每天早上九点和下午六点触发
                             .Build();
             var taskMsgTrigger = TriggerBuilder.Create()

+ 5 - 5
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -253,7 +253,6 @@ namespace OASystem.Domain.AutoMappers
             #endregion
 
             #region 人事 模块
-
             //CreateMap<WageSheetInfoView, Pm_WageSheet>();
             CreateMap<Pm_WageSheet, WageSheetItemInfoView>();
             CreateMap<WageAddOrEditDto, Pm_WageSheet>();
@@ -261,15 +260,16 @@ namespace OASystem.Domain.AutoMappers
             CreateMap<SalaryCalculatorSingleDto, Pm_WageSheet>();
             CreateMap<WageSheetInfoView, Pm_WageSheet>();
             CreateMap<Pm_WageSheet, WageSheetInfoView>();
-
             CreateMap<Pm_WageSheet, WageSheetInfoView>();
-
             CreateMap<WageSheetMonthWorkdaysAddOrEditDto, Pm_WageIssueWorkingDay>();
             CreateMap<CalendarInfoView, Sys_Calendar>();
-
-
             CreateMap<TaskAllocationAddOrEditDto, Pm_TaskAllocation>();
             #endregion
+
+            #region 倒推表
+            CreateMap<InvertedListUpdateDto, Grp_InvertedList>();
+            CreateMap<VisaCountryInfo, Grp_InvertedListVisaCountry>();
+            #endregion
         }
     }
 }

+ 41 - 0
OASystem/OASystem.Domain/Dtos/Groups/InvertedListDto.cs

@@ -0,0 +1,41 @@
+using OASystem.Domain.ViewModels.Groups;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Groups
+{
+    /// <summary>
+    /// 倒推表 Dto
+    /// </summary>
+    public class InvertedListDto
+    {
+    }
+
+
+    /// <summary>
+    /// 倒推表 Dto
+    /// Create
+    /// </summary>
+    public class InvertedListCreateDto : PortDtoBase
+    {
+        /// <summary>
+        /// 团组Id 
+        /// </summary>
+        public int DiId { get; set; }
+    }
+
+    /// <summary>
+    /// 倒推表 Dto
+    /// Update
+    /// </summary>
+    public class InvertedListUpdateDto : InvertedListInfoView
+    {
+        /// <summary>
+        /// 请求类型
+        /// </summary>
+        public int PortType { get; set; }
+    }
+}

+ 249 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_InvertedList.cs

@@ -0,0 +1,249 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Groups
+{
+    /// <summary>
+    /// 团组倒推表
+    /// Is....: 0 是 1 否
+    /// A:自然日  B:工作日
+    /// </summary>
+    [SugarTable("Grp_InvertedList")]
+    public class Grp_InvertedList:EntityBase
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        [SugarColumn(IsNullable = true,ColumnDataType = "int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 报批资料准备时间 - A
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string ApprovalDataDt { get; set; }
+
+        /// <summary>
+        /// 报批资料准备
+        /// 是否完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsApprovalData { get; set; } = 1;
+
+        /// <summary>
+        /// 报批资料准备 
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
+        public string ApprovalDataRemark { get; set; } = "准备报批资料(包括:邀请函,请示,报批行程,报批费用)";
+
+        /// <summary>
+        /// 报批时间 - A
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string ApprovalDt { get; set; }
+
+        /// <summary>
+        /// 报批时间
+        /// 1 预批件 2 正常批件 默认值??-1
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int ApprovalType { get; set; }
+
+        /// <summary>
+        /// 报批
+        /// 是否完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsApproval { get; set; } = 1;
+
+        /// <summary>
+        /// 报批 
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
+        public string ApprovalRemark { get; set; } = "客户准备报批资料并递交到省外办,同时我司开始收集客户签证需要的资料";
+
+        /// <summary>
+        /// 出批件时间 - A
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string IssueApprovalDt { get; set; }
+
+        /// <summary>
+        /// 出批件
+        /// 是否完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsIssueApproval { get; set; } = 1;
+
+        /// <summary>
+        /// 报批 
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
+        public string IssueApprovalRemark { get; set; } = "出预批件";
+
+        /// <summary>
+        /// 办护照时间 - B
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string ApplyPassportDt { get; set; }
+
+        /// <summary>
+        /// 办护照
+        /// 是否完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsApplyPassport { get; set; } = 1;
+
+        /// <summary>
+        /// 办护照 
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
+        public string ApplyPassportRemark { get; set; } = "制作护照-护照出";
+
+        /// <summary>
+        /// 签证资料准备时间 - A
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string VisaInformationDt { get; set; }
+
+        /// <summary>
+        /// 签证资料准备
+        /// 是否完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsVisaInformation { get; set; } = 1;
+
+        /// <summary>
+        /// 签证资料准备 
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
+        public string VisaInformationRemark { get; set; } = "汇总客户签证信息,准备送签资料";
+
+        /// <summary>
+        /// 送签时间 - B
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string SendVisaDt { get; set; }
+
+        /// <summary>
+        /// 送签
+        /// 是否完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsSendVisa { get; set; } = 1;
+
+        /// <summary>
+        /// 送签 
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
+        public string SendVisaRemark { get; set; } = "签证周期暂无或免签\r\n(签证周期仅供参考)";
+
+        /// <summary>
+        /// 出签时间 - B
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string IssueVisaDt { get; set; }
+
+        /// <summary>
+        /// 出签
+        /// 是否完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsIssueVisa { get; set; } = 1;
+
+        /// <summary>
+        /// 出签 
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
+        public string IssueVisaRemark { get; set; } = "外办领取签证";
+
+        /// <summary>
+        /// 行前会 - A
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string PreTripMeetingDt { get; set; }
+
+        /// <summary>
+        /// 行前会
+        /// 是否完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsPreTripMeeting { get; set; } = 1;
+
+        /// <summary>
+        /// 行前会 
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
+        public string PreTripMeetingRemark { get; set; } = "开行前会为出访人员交代细节";
+
+        /// <summary>
+        /// 送机 - A
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string AirportdDropOffDt { get; set; }
+
+        /// <summary>
+        /// 送机
+        /// 是否完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsAirportdDropOff { get; set; } = 1;
+
+        /// <summary>
+        /// 送机 
+        /// 备注
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
+        public string AirportdDropOffRemark { get; set; } = "为出访人员办理登机服务及行李打包等";
+
+    }
+
+    /// <summary>
+    /// 倒推表签证 国家信息
+    /// (数据来源:签证标准费用表 默认值)
+    /// </summary>
+    [SugarTable("Grp_InvertedListVisaCountry")]
+    public class Grp_InvertedListVisaCountry : EntityBase
+    {
+        /// <summary>
+        /// 倒推表Id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int ILId { get; set; }
+
+        /// <summary>
+        /// 国家
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string Country { get; set; }
+
+        /// <summary>
+        /// 公务类型ID 
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int OfficialTypeId { get; set; }
+
+        /// <summary>
+        /// 签证类型ID 
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int VisaTypeId { get; set; }
+
+        /// <summary>
+        /// 签证时间(工作日) 
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int VisaDay { get; set; }
+    }
+}

+ 233 - 0
OASystem/OASystem.Domain/ViewModels/Groups/InvertedListView.cs

@@ -0,0 +1,233 @@
+using OASystem.Domain.Entities.Groups;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.Groups
+{
+    /// <summary>
+    /// 倒推表 View
+    /// </summary>
+    public class InvertedListView:Grp_InvertedList
+    {
+    }
+
+    /// <summary>
+    /// 倒推表详情 View 
+    /// A - 自然日  B-国内工作日
+    /// </summary>
+    public class InvertedListInfoView
+    {
+        /// <summary>
+        /// 查询标识
+        /// true 需提醒客户该团未创建倒推表
+        /// </summary>
+        public bool IsQuery { get; set; } = false;
+
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 报批资料准备时间 - A
+        /// </summary>
+        public string ApprovalDataDt { get; set; }
+
+        /// <summary>
+        /// 报批资料准备
+        /// 是否完成
+        /// </summary>
+        public int IsApprovalData { get; set; }
+
+        /// <summary>
+        /// 报批资料准备 
+        /// 备注
+        /// </summary>
+        public string ApprovalDataRemark { get; set; } = "准备报批资料(包括:邀请函,请示,报批行程,报批费用)";
+
+        /// <summary>
+        /// 报批时间 - A
+        /// </summary>
+        public string ApprovalDt { get; set; }
+
+        /// <summary>
+        /// 报批时间
+        /// 1 预批件 2 正常批件 默认值??-1
+        /// </summary>
+        public int ApprovalType { get; set; }
+
+        /// <summary>
+        /// 报批
+        /// 是否完成
+        /// </summary>
+        public int IsApproval { get; set; }
+
+        /// <summary>
+        /// 报批 
+        /// 备注
+        /// </summary>
+        public string ApprovalRemark { get; set; } = "客户准备报批资料并递交到省外办,同时我司开始收集客户签证需要的资料";
+
+        /// <summary>
+        /// 出批件时间 - A
+        /// </summary>
+        public string IssueApprovalDt { get; set; }
+
+        /// <summary>
+        /// 出批件
+        /// 是否完成
+        /// </summary>
+        public int IsIssueApproval { get; set; }
+
+        /// <summary>
+        /// 出批件时间 
+        /// 备注
+        /// </summary>
+        public string IssueApprovalRemark { get; set; } = "出预批件";
+
+        /// <summary>
+        /// 办护照时间 - B
+        /// </summary>
+        public string ApplyPassportDt { get; set; }
+
+        /// <summary>
+        /// 办护照
+        /// 是否完成
+        /// </summary>
+        public int IsApplyPassport { get; set; }
+
+        /// <summary>
+        /// 办护照 
+        /// 备注
+        /// </summary>
+        public string ApplyPassportRemark { get; set; } = "制作护照-护照出";
+
+        /// <summary>
+        /// 签证资料准备时间
+        /// </summary>
+        public string VisaInformationDt { get; set; }
+
+        /// <summary>
+        /// 签证资料准备
+        /// 是否完成
+        /// </summary>
+        public int IsVisaInformation { get; set; }
+
+        /// <summary>
+        /// 签证资料准备 
+        /// 备注
+        /// </summary>
+        public string VisaInformationRemark { get; set; } = "汇总客户签证信息,准备送签资料";
+
+        /// <summary>
+        /// 签证国家信息
+        /// </summary>
+        public List<VisaCountryInfo> VisaCountryData { get; set; }
+
+        /// <summary>
+        /// 送签时间 - B
+        /// </summary>
+        public string SendVisaDt { get; set; }
+
+        /// <summary>
+        /// 送签
+        /// 是否完成
+        /// </summary>
+        public int IsSendVisa { get; set; }
+
+        /// <summary>
+        /// 送签 
+        /// 备注
+        /// </summary>
+        public string SendVisaRemark { get; set; } = "签证周期暂无或免签\r\n(签证周期仅供参考)";
+
+        /// <summary>
+        /// 出签时间 - B
+        /// </summary>
+        public string IssueVisaDt { get; set; }
+
+        /// <summary>
+        /// 出签
+        /// 是否完成
+        /// </summary>
+        public int IsIssueVisa { get; set; }
+
+        /// <summary>
+        /// 出签 
+        /// 备注
+        /// </summary>
+        public string IssueVisaRemark { get; set; } = "外办领取签证";
+
+        /// <summary>
+        /// 行前会 - A
+        /// </summary>
+        public string PreTripMeetingDt { get; set; }
+
+        /// <summary>
+        /// 行前会
+        /// 是否完成
+        /// </summary>
+        public int IsPreTripMeeting { get; set; }
+
+        /// <summary>
+        /// 行前会 
+        /// 备注
+        /// </summary>
+        public string PreTripMeetingRemark { get; set; } = "开行前会为出访人员交代细节";
+
+        /// <summary>
+        /// 送机 - A
+        /// </summary>
+        public string AirportdDropOffDt{ get; set; }
+
+        /// <summary>
+        /// 送机
+        /// 是否完成
+        /// </summary>
+        public int IsAirportdDropOff { get; set; }
+
+        /// <summary>
+        /// 送机 
+        /// 备注
+        /// </summary>
+        public string AirportdDropOffRemark { get; set; } = "为出访人员办理登机服务及行李打包等";
+
+    }
+    /// <summary>
+    /// 签证国家信息
+    /// </summary>
+    public class VisaCountryInfo
+    {
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 倒推表Id
+        /// </summary>
+        public int ILId { get; set; }
+
+        /// <summary>
+        /// 国家
+        /// </summary>
+        public string Country { get; set; }
+
+        /// <summary>
+        /// 公务类型ID 
+        /// </summary>
+        public int OfficialTypeId { get; set; }
+
+        /// <summary>
+        /// 签证类型ID 
+        /// </summary>
+        public int VisaTypeId { get; set; }
+
+        /// <summary>
+        /// 签证时间(工作日) 
+        /// </summary>
+        public int VisaDay { get; set; }
+    }
+}

+ 65 - 18
OASystem/OASystem.Infrastructure/Repositories/Groups/DelegationInfoRepository.cs

@@ -66,16 +66,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 var _DelegationInfo = await _sqlSugar.SqlQueryable<Web_ShareGroupInfoView>(sql).FirstAsync();
                 if (_DelegationInfo != null)
                 {
-                    if (!string.IsNullOrEmpty(_DelegationInfo.VisitCountry))
-                    {
-                        if (_DelegationInfo.VisitCountry.Contains("|"))
-                        {
-                            _DelegationInfo.VisitCountry = _DelegationInfo.VisitCountry.Replace("|", "、");
-                        }
-                    }
-                    else _DelegationInfo.VisitCountry = " - ";
-
-                    result.Data = _DelegationInfo;
+                    _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry);
                 }
                 else result.Msg = "暂无该团组信息";
             }
@@ -84,14 +75,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 var _DelegationInfo = await _sqlSugar.SqlQueryable<IOSOrAndroid_ShareGroupInfoView>(sql).FirstAsync();
                 if (_DelegationInfo != null)
                 {
-                    if (!string.IsNullOrEmpty(_DelegationInfo.VisitCountry))
-                    {
-                        if (_DelegationInfo.VisitCountry.Contains("|"))
-                        {
-                            _DelegationInfo.VisitCountry = _DelegationInfo.VisitCountry.Replace("|", "、");
-                        }
-                    }
-                    else _DelegationInfo.VisitCountry = " - ";
+                    _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry);
 
                     result.Data = _DelegationInfo;
                 }
@@ -106,6 +90,48 @@ namespace OASystem.Infrastructure.Repositories.Groups
             return result;
         }
 
+
+        /// <summary>
+        /// 团组信息List 团组预览详情共享Api
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> PostShareGroupInfos(int portType)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误", Data = new List<object>() { } };
+
+            string sql = string.Format(@"Select Id,TeamName,TourCode,ClientName,VisitCountry,VisitStartDate,VisitEndDate,VisitDays,VisitPNumber 
+                                             From Grp_DelegationInfo Where IsDel = 0 Order By Id Desc");
+
+
+            var _DelegationInfo = await _sqlSugar.SqlQueryable<Web_ShareGroupInfoView>(sql).ToListAsync();
+            if (_DelegationInfo.Count > 0)
+            {
+                foreach (var item in _DelegationInfo)
+                {
+                    item.VisitCountry = FormartTeamName(item.VisitCountry);
+                }
+            }
+            else { result.Msg = "暂无该团组信息"; return result; }
+
+            if (portType == 1) //Web
+            {
+
+                result.Data = _DelegationInfo;
+            }
+            else if (portType == 2 || portType == 3) //IOS Or Android
+            {
+
+                result.Data = _DelegationInfo;
+            }
+            else { result.Msg = "请输入正确的端口号。1 Web 2 Android 3 IOS"; return result; }
+
+            result.Code = 0;
+            result.Msg = "成功!";
+
+            return result;
+        }
+
         #endregion
         /// <summary>
         /// 获取接团信息Info
@@ -127,6 +153,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 var _DelegationInfo = await _sqlSugar.SqlQueryable<DelegationInfoWebView>(sql).FirstAsync();
                 if (_DelegationInfo != null)
                 {
+                    _DelegationInfo.TeamName = FormartTeamName(_DelegationInfo.TeamName);
                     result.Code = 0;
                     result.Msg = "成功!";
                     result.Data = _DelegationInfo;
@@ -139,6 +166,26 @@ namespace OASystem.Infrastructure.Repositories.Groups
         }
         #region 团组
 
+
+        /// <summary>
+        /// 统一团组国家分割字符
+        /// </summary>
+        /// <param name="teamName"></param>
+        /// <returns></returns>
+        public string FormartTeamName( string teamName) 
+        {
+            string str = "";
+            if (!string.IsNullOrEmpty(teamName))
+            {
+                List<string> searchreplaces = new List<string>() { "|", "、", " ", "/", ",", "," };
+                foreach (var item in searchreplaces)
+                {
+                    str = teamName.Replace(item, "、");
+                }
+            }
+            return str.Trim();
+        }
+
         /// <summary>
         /// 获取接团信息 Page List
         /// </summary>

+ 321 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/InvertedListRepository.cs

@@ -0,0 +1,321 @@
+using AutoMapper;
+using MySqlX.XDevAPI.Common;
+using OASystem.Domain;
+using OASystem.Domain.Dtos.Groups;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.Entities.Resource;
+using OASystem.Domain.ViewModels.Groups;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Result = OASystem.Domain.Result;
+
+namespace OASystem.Infrastructure.Repositories.Groups
+{
+    /// <summary>
+    /// 倒推表 仓储
+    /// </summary>
+    public class InvertedListRepository:BaseRepository<Grp_InvertedList,InvertedListView>
+    {
+        private readonly IMapper _mapper;
+        private readonly Result _result;
+        private readonly DelegationInfoRepository _delegationInfoRep;
+        public InvertedListRepository(SqlSugarClient sqlSugar, IMapper mapper, DelegationInfoRepository delegationInfoRep)
+            : base(sqlSugar)
+        {
+            _mapper = mapper;
+            _result = new Result() { Code = -1, Msg = "系统错误!", Data = new List<object>() { } };
+            _delegationInfoRep = delegationInfoRep;
+        }
+
+        /// <summary>
+        /// 基础数据
+        /// </summary>
+        /// <returns></returns>
+        public async Task<Result> _Init()
+        {
+            dynamic groupData = null;
+            var groupData1 = await _delegationInfoRep.PostShareGroupInfos(1);
+            if (groupData1.Code == 0)
+            {
+                groupData = groupData1.Data;
+            }
+
+            var setData  = await _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0).ToListAsync();
+
+            var officialTypeData = setData.Where(it => it.STid  == 81).Select(it => new { it.Id,it.Name }).ToList();
+
+            var visaTypeData = setData.Where(it => it.STid == 82).Select(it => new { it.Id, it.Name }).ToList();
+
+            _result.Code = 0;
+            _result.Msg = "操作成功!";
+            _result.Data = new {
+                groupData = groupData1,
+                officialTypeData = officialTypeData,
+                visaTypeData = visaTypeData
+            };
+
+            return _result;
+        }
+
+        /// <summary>
+        /// Info
+        /// </summary>
+        /// <returns></returns>
+        public async Task<Result> _Info(int portTypeId,int diId)
+        {
+            #region 参数验证
+            if (portTypeId < 1)
+            {
+                _result.Msg = "请输入有效的PortType参数值";
+                return _result;
+            }
+            if (diId < 1)
+            {
+                _result.Msg = "请输入有效的DiId参数值";
+                return _result;
+            }
+
+            #endregion
+            string sql = string.Format(@$"Select * From Grp_InvertedList Where Isdel={0} And DiId = {diId}");
+            var info = await _sqlSugar.SqlQueryable<InvertedListInfoView>(sql).FirstAsync();
+
+            if (info == null) {
+                info = new InvertedListInfoView();
+
+                var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0 && it.Id == diId).FirstAsync();
+                if (groupInfo == null)
+                {
+                    _result.Msg = @$"团组数据不存在!";
+                    return _result;
+                }
+
+                List<string> visitCountry = new List<string>();
+
+                string grpVisitCountry = groupInfo.VisitCountry;
+
+                if (!string.IsNullOrEmpty(grpVisitCountry))
+                {
+                    grpVisitCountry = _delegationInfoRep.FormartTeamName(grpVisitCountry);
+
+                    visitCountry = grpVisitCountry.Split("、").ToList();
+                }
+
+
+                //签证费用标准
+                var visaFeeDatas = await _sqlSugar.Queryable<Res_CountryFeeCost>().Where(it => it.IsDel == 0).ToListAsync();
+                List<VisaCountryInfo> visaCountryInfos = new List<VisaCountryInfo>();
+
+                foreach (var itemn in visitCountry) 
+                {
+                    visaCountryInfos.Add(new VisaCountryInfo() { 
+                    
+                        Country = itemn,
+                        OfficialTypeId=-1,
+                        VisaTypeId = -1,
+                        VisaDay = Convert.ToInt32(visaFeeDatas.Find(it => it.VisaCountry.Equals(itemn.Trim()))?.VisaTime ?? "0"),
+                    });
+                }
+                info.VisaCountryData = visaCountryInfos;
+                _result.Data = info;
+                _result.Msg = "未查询到数据!";
+                _result.Code = 0;
+                return _result; 
+            }
+
+            info.IsQuery = true;
+            int ilId = info.Id;
+
+            string visaSql = string.Format(@$"Select * From Grp_InvertedListVisaCountry Where Isdel={0} And ILId = {ilId}");
+            var visaCountryInfo = await _sqlSugar.SqlQueryable<VisaCountryInfo>(sql).ToListAsync();
+
+            info.VisaCountryData = visaCountryInfo;
+            _result.Data = info;
+            _result.Code = 0;
+
+            return _result;
+        }
+
+        /// <summary>
+        /// Create
+        /// </summary>
+        /// <param name="diId"></param>
+        /// <returns></returns>
+        public async Task<Result> _Create(int userId,int diId)
+        {
+            #region 参数验证
+            if (diId < 1)
+            {
+                _result.Msg = $@"请输入有效的DiId参数值!";
+                return _result;
+            }
+            if (userId < 1)
+            {
+                _result.Msg = $@"请输入有效的UserId参数值!";
+                return _result;
+            }
+            #endregion
+
+            var selectInfo = await _sqlSugar.Queryable<Grp_InvertedList>().Where(it => it.IsDel == 0 && it.DiId == diId).FirstAsync();
+            if (selectInfo != null)
+            {
+                _result.Msg = @$"该数据已存在,不可重复创建!";
+                return _result;
+            }
+
+            var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0 && it.Id == diId).FirstAsync();
+            if (groupInfo != null)
+            {
+                _result.Msg = @$"团组数据不存在,不可创建!";
+                return _result;
+            }
+
+            if (string.IsNullOrEmpty( groupInfo.VisitDate.ToString()))
+            {
+                _result.Msg = @$"团组出访时间未填写,不可创建!";
+                return _result;
+            }
+
+            DateTime visitDt = groupInfo.VisitDate;
+
+            List<string> visitCountry = new List<string>();
+
+            string grpVisitCountry  = groupInfo.VisitCountry;
+
+            if (!string.IsNullOrEmpty(grpVisitCountry))
+            {
+                grpVisitCountry = _delegationInfoRep.FormartTeamName(grpVisitCountry);
+
+                visitCountry = grpVisitCountry.Split("、").ToList();
+            }
+
+            //签证费用标准
+            var visaFeeDatas = await _sqlSugar.Queryable<Res_CountryFeeCost>().Where(it => it.IsDel == 0).ToListAsync();
+
+
+            /*
+             * 默认步骤所需提前天数
+             * A 自然日 B 工作日
+             */
+            int approvalData_advanceDays = 60,     //报批资料准备
+                approval_advanceDays = 45,         //报批
+                IssueApproval_advanceDays = 33,    //出批件
+                ApplyPassport_advanceDays = 30,    //办护照
+                VisaInformation_advanceDays = 16,  //签证资料准备
+                sendVisa_advanceDays = 12,         //送签
+                issueVisa_advanceDays = 5,         //出签
+                preTripMeeting_advanceDays = 3,    //行前会
+                airportdDropOff_advanceDays = 0;   //送机
+
+            var info = new Grp_InvertedList() { 
+                DiId = diId,
+                ApprovalDataDt = visitDt.AddDays(approvalData_advanceDays).ToString("yyyy-MM-dd"),
+                ApprovalDt = visitDt.AddDays(approval_advanceDays).ToString("yyyy-MM-dd"),
+                ApprovalType = -1,
+                IssueApprovalDt = visitDt.AddDays(IssueApproval_advanceDays).ToString("yyyy-MM-dd"),
+                ApplyPassportDt = visitDt.AddDays(ApplyPassport_advanceDays).ToString("yyyy-MM-dd"),
+                VisaInformationDt = visitDt.AddDays(VisaInformation_advanceDays).ToString("yyyy-MM-dd"),
+                SendVisaDt = visitDt.AddDays(sendVisa_advanceDays).ToString("yyyy-MM-dd"),
+                IssueVisaDt = visitDt.AddDays(issueVisa_advanceDays).ToString("yyyy-MM-dd"),
+                PreTripMeetingDt = visitDt.AddDays(preTripMeeting_advanceDays).ToString("yyyy-MM-dd"),
+                AirportdDropOffDt = visitDt.AddDays(airportdDropOff_advanceDays).ToString("yyyy-MM-dd"),
+                CreateUserId = userId,
+            };
+            _sqlSugar.BeginTran();
+
+            int add1 = await _sqlSugar.Insertable<Grp_InvertedList>(info).ExecuteReturnIdentityAsync();
+            if (add1<1)
+            {
+                _result.Msg = $@"倒推表添加失败!";
+                _sqlSugar.RollbackTran();
+                return _result;
+            }
+
+            List<Grp_InvertedListVisaCountry> _InvertedListVisaCountries = new List<Grp_InvertedListVisaCountry>();
+            foreach (var item in visitCountry)
+            {
+                int days = Convert.ToInt32(visaFeeDatas.Find(x => x.VisaCountry.Equals(item.Trim()))?.VisaTime ?? "0");
+                
+                _InvertedListVisaCountries.Add(new Grp_InvertedListVisaCountry()
+                {
+                    ILId = add1,
+                    Country = item,
+                    OfficialTypeId = -1,
+                    VisaTypeId = -1,
+                    VisaDay = days,
+                });
+            }
+
+            int add2 = await _sqlSugar.Insertable<Grp_InvertedList>(info).ExecuteReturnIdentityAsync();
+
+            _sqlSugar.CommitTran();
+            _result.Code = 0;
+            _result.Msg = @$"操作成功!";
+            return _result;
+        }
+
+
+
+        /// <summary>
+        /// Update
+        /// </summary>
+        /// <param name="diId"></param>
+        /// <returns></returns>
+        public async Task<Result> _Update(InvertedListUpdateDto dto)
+        {
+            #region 参数验证
+            if (dto.DiId < 1)
+            {
+                _result.Msg = $@"请输入有效的DiId参数值!";
+                return _result;
+            }
+            if (dto.Id < 1)
+            {
+                _result.Msg = $@"请输入有效的Id参数值!";
+                return _result;
+            }
+            #endregion
+
+            Grp_InvertedList _InvertedList = _mapper.Map<Grp_InvertedList>(dto);
+            List<Grp_InvertedListVisaCountry> _InvertedListVisaCountries = new List<Grp_InvertedListVisaCountry>();
+            if (dto.VisaCountryData.Count > 0)
+            {
+                _InvertedListVisaCountries = _mapper.Map<List<Grp_InvertedListVisaCountry>>(dto.VisaCountryData);
+            }
+            _sqlSugar.BeginTran();
+
+            int update1 = await _sqlSugar.Updateable(_InvertedList)
+                                         .IgnoreColumns(it => new { it.CreateTime,it.IsDel })
+                                         .ExecuteCommandAsync();
+            if (update1 < 1) 
+            {
+                _sqlSugar.RollbackTran();
+                _result.Msg = @$"修改失败!";
+                return _result;
+
+            }
+
+            if (_InvertedListVisaCountries.Count > 0)
+            {
+                int update2 = await _sqlSugar.Updateable(_InvertedListVisaCountries)
+                                         .IgnoreColumns(it => new { it.CreateTime, it.IsDel })
+                                         .ExecuteCommandAsync();
+
+                if (update2 < 1)
+                {
+                    _sqlSugar.RollbackTran();
+                    _result.Msg = @$"修改失败!";
+                    return _result;
+                }
+            }
+
+            _sqlSugar.CommitTran();
+            _result.Code = 0;
+            _result.Msg = @$"操作成功!";
+            return _result;
+        }
+    }
+}