Переглянути джерело

OA2023数据字典使用已经上传的项

leiy 2 роки тому
батько
коміт
ee55f536a8
27 змінених файлів з 1652 додано та 194 видалено
  1. 77 4
      OASystem/OASystem.Api/Controllers/GroupsController.cs
  2. 122 2
      OASystem/OASystem.Api/Controllers/ResourceController.cs
  3. 45 1
      OASystem/OASystem.Api/Controllers/SystemController.cs
  4. 55 0
      OASystem/OASystem.Api/OAMethodLib/AutofacIocManager.cs
  5. 29 0
      OASystem/OASystem.Api/OAMethodLib/AutofacRegister.cs
  6. 0 93
      OASystem/OASystem.Api/OAMethodLib/BaseConfig.cs
  7. 434 0
      OASystem/OASystem.Api/OAMethodLib/GroupStepForDelegation.cs
  8. 6 5
      OASystem/OASystem.Api/Program.cs
  9. 10 2
      OASystem/OASystem.Api/appsettings.json
  10. 8 0
      OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs
  11. 57 0
      OASystem/OASystem.Domain/Common/DepartmentCode.cs
  12. 51 0
      OASystem/OASystem.Domain/Dtos/Groups/GroupsConfig.cs
  13. 32 0
      OASystem/OASystem.Domain/Dtos/Groups/Grp_ScheduleDetailDto.cs
  14. 1 0
      OASystem/OASystem.Domain/Dtos/Groups/Grp_ScheduleDto.cs
  15. 4 43
      OASystem/OASystem.Domain/Dtos/Resource/CarDataDto.cs
  16. 132 0
      OASystem/OASystem.Domain/Dtos/Resource/LocalGuideDataDto.cs
  17. 31 2
      OASystem/OASystem.Domain/Entities/Groups/Grp_ScheduleInfo.cs
  18. 28 0
      OASystem/OASystem.Domain/Entities/System/Sys_SystemMenuPermission.cs
  19. 6 0
      OASystem/OASystem.Domain/Enums/EnumHelper.cs
  20. 252 17
      OASystem/OASystem.Domain/Enums/GrpScheduleEnum.cs
  21. 13 0
      OASystem/OASystem.Domain/ViewModels/Resource/LocalGuideDataView.cs
  22. 61 0
      OASystem/OASystem.Domain/ViewModels/System/SetDataView.cs
  23. 19 10
      OASystem/OASystem.Infrastructure/Repositories/BaseRepository.cs
  24. 33 10
      OASystem/OASystem.Infrastructure/Repositories/Groups/GrpScheduleRepository.cs
  25. 85 0
      OASystem/OASystem.Infrastructure/Repositories/Resource/LocalGuideDataRepository.cs
  26. 28 2
      OASystem/OASystem.Infrastructure/Repositories/System/SetDataRepository.cs
  27. 33 3
      OASystem/_Doc/OA2023数据字典.docx

+ 77 - 4
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -1,6 +1,8 @@
 using Microsoft.AspNetCore.Mvc;
 using Newtonsoft.Json.Serialization;
+using OASystem.API.OAMethodLibs;
 using OASystem.Domain.Dtos.Groups;
+using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Infrastructure.Repositories.Groups;
 
@@ -33,7 +35,7 @@ namespace OASystem.API.Controllers
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> PostGrpSchedule(string paras)
+        public async Task<IActionResult> PostSearchGrpSchedule(string paras)
         {
             if (string.IsNullOrEmpty(paras))
             {
@@ -45,14 +47,15 @@ namespace OASystem.API.Controllers
             {
                 if (_ScheduleDto.SearchType == 2)//获取列表
                 {
-
+                    List<Grp_ScheduleView> _grpScheduleViewList = await _grpScheduleRep.GetViewList_GrpSchedule(_ScheduleDto);
+                    return Ok(JsonView(_grpScheduleViewList));
                 }
                 else//获取对象
                 {
                     Grp_ScheduleView _grpScheduleView = await _grpScheduleRep.GetView_GrpSchedule(_ScheduleDto);
                     if (_grpScheduleView != null)
                     {
-                        return Ok(JsonView(0, "获取成功", _grpScheduleView));
+                        return Ok(JsonView(_grpScheduleView));
                     }
                 }
             }
@@ -64,6 +67,76 @@ namespace OASystem.API.Controllers
             return Ok(JsonView(false, "暂无数据!"));
         }
 
+        /// <summary>
+        /// 修改团组流程管控详细表数据
+        /// </summary>
+        /// <param name="paras"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostUpdateGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto)
+        {
+            Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);
+            var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleDetailInfo>()
+                .Where(s => s.Id == dto.Id)
+                .UpdateColumns(s => new { s.Duty, s.ExpectBeginDt, s.ExpectEndDt, s.JobContent, s.Remark, s.StepStatus })
+                .ExecuteCommandAsync();
+            if (result > 0)
+            {
+                return Ok(JsonView(true, "保存成功!"));
+            }
+
+            return Ok(JsonView(false, "保存失败!"));
+        }
+
+        /// <summary>
+        /// 删除团组流程管控详细表数据,删除人Id请放在Duty
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<ActionResult> PostDeleteGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto)
+        {
+            Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);
+            _detail.IsDel = 1;
+            _detail.DeleteUserId = dto.Duty;
+            _detail.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleDetailInfo>()
+               .Where(s => s.Id == dto.Id)
+               .UpdateColumns(s => new { s.IsDel, s.DeleteUserId, s.DeleteTime })
+               .ExecuteCommandAsync();
+            if (result > 0)
+            {
+                return Ok(JsonView(true, "删除成功!"));
+            }
+
+            return Ok(JsonView(false, "删除失败!"));
+        }
+
+        /// <summary>
+        /// 增加团组流程管控详细表数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<ActionResult> PostInsertGrpScheduleDetail(Grp_ScheduleDetailInsertDto dto)
+        {
+            Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);
+            if (DateTime.Now < _detail.ExpectBeginDt)
+            {
+                _detail.StepStatus = 0;
+            }
+            else
+            {//若大于设置时间,不考虑设置的预计结束日期,统一视为进行中
+                _detail.StepStatus = 1;
+            }
+            var result = await _grpScheduleRep._sqlSugar.Insertable(_detail).ExecuteReturnIdentityAsync();
+            if (result > 0)
+            {
+                return Ok(JsonView(true, "添加成功!"));
+            }
+
+            return Ok(JsonView(false, "添加失败!"));
+        }
+
         #endregion
 
         #region 团组基本信息
@@ -142,7 +215,7 @@ namespace OASystem.API.Controllers
             catch (Exception ex)
             {
 
-                Logs("[response]" +  JsonConvert.SerializeObject( dto));
+                Logs("[response]" + JsonConvert.SerializeObject(dto));
                 Logs(ex.Message);
                 return Ok(JsonView(false, ex.Message));
             }

+ 122 - 2
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -12,12 +12,14 @@ namespace OASystem.API.Controllers
         private readonly IMapper _mapper;
         private readonly IConfiguration _config;
         private readonly CarDataRepository _carDataRep;
+        private readonly LocalGuideDataRepository _localGuideDataRep;
        
-        public ResourceController(IMapper mapper, IConfiguration config,CarDataRepository carDataRep)
+        public ResourceController(IMapper mapper, IConfiguration config, CarDataRepository carDataRep, LocalGuideDataRepository localGuideDataRep)
         {
             _mapper = mapper;
             _config = config;
             _carDataRep = carDataRep;
+            _localGuideDataRep = localGuideDataRep;
         }
         #region 车公司资料板块
 
@@ -92,6 +94,12 @@ namespace OASystem.API.Controllers
                 {
                     return Ok(JsonView(false, "请检查联系方式是否填写正确!"));
                 }
+
+                var carDada = _carDataRep.QueryDto<Res_CarData, CarDataView>(a=>a.UnitArea==dto.UnitArea && a.UnitName==dto.UnitName && a.Contact==dto.Contact && a.ContactTel==dto.ContactTel).ToList();
+                if (carDada.Count!=0)
+                {
+                    return Ok(JsonView(false, "该信息已存在,请勿重复添加!"));
+                }
                 Res_CarData _CarData = _mapper.Map<Res_CarData>(dto);
                 int id = await _carDataRep.AddAsyncReturnId(_CarData);
                 if (id == 0) 
@@ -167,7 +175,7 @@ namespace OASystem.API.Controllers
             }
         }
         /// <summary>
-        /// 车公司信息修改
+        /// 车公司信息删除
         /// </summary>
         /// <returns></returns>
         [HttpPost]
@@ -188,5 +196,117 @@ namespace OASystem.API.Controllers
         }
         #endregion
 
+        #region 导游地接资料板块
+        /// <summary>
+        /// 导游地接资料查询
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> QuerLocalGuide(DtoBase dto)
+        {
+            try
+            {
+                if (dto.PortType == 1)
+                {
+                    var LocalGuideData = _localGuideDataRep.QueryDto<Res_LocalGuideData, LocalGuideDataView>().ToList();
+                    if (LocalGuideData.Count == 0)
+                    {
+                        return Ok(JsonView(false, "暂无数据!"));
+                    }
+                    LocalGuideData = LocalGuideData.OrderByDescending(s => s.CreateTime).ToList();
+                    return Ok(JsonView(true, "查询成功", LocalGuideData));
+                }
+                else if (dto.PortType == 2)
+                {
+                    var LocalGuideData = _localGuideDataRep.QueryDto<Res_LocalGuideData, LocalGuideDataView>().ToList();
+                    if (LocalGuideData.Count == 0)
+                    {
+                        return Ok(JsonView(false, "暂无数据!"));
+                    }
+                    LocalGuideData = LocalGuideData.OrderByDescending(s => s.CreateTime).ToList();
+                    return Ok(JsonView(true, "查询成功", LocalGuideData));
+                }
+                else
+                {
+                    return Ok(JsonView(false, "请传入PortType参数!1:Web,2:Android,3:IOS"));
+                }
+
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+
+
+        }
+
+        /// <summary>
+        /// 导游地接信息操作(增改)
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> LocalGuideOperation(LocalGuideOperationDto dto)
+        {
+            try
+            {
+                if (dto.UnitArea == "")
+                {
+                    return Ok(JsonView(false, "请检查单位区域是否填写!"));
+                }
+                if (dto.UnitName == "")
+                {
+                    return Ok(JsonView(false, "请检查单位名称是否填写!"));
+                }
+                if (dto.Contact == "")
+                {
+                    return Ok(JsonView(false, "请检查单位联系人是否填写!"));
+                }
+                if (dto.ContactTel == "")
+                {
+                    return Ok(JsonView(false, "请检查联系方式是否填写正确!"));
+                }
+
+                Result result = await _localGuideDataRep.LocalGuideOperation(dto);
+                if (result.Code != 0)
+                {
+                    return Ok(JsonView(false, result.Msg));
+                }
+                return Ok(JsonView(true, result.Msg, new { Id = result.Data }));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
+
+        /// <summary>
+        /// 导游地接信息操作(删除)
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> LocalGuideDel(LocalGuideDelDto dto)
+        {
+            try
+            {
+                var res = await _localGuideDataRep.SoftDeleteByIdAsync<Res_LocalGuideData>(dto.Id.ToString(),dto.DeleteUserId);
+                if (!res)
+                {
+                    return Ok(JsonView(false, "删除失败"));
+                }
+                return Ok(JsonView(true,"删除成功!"));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
+        #endregion
     }
 }

+ 45 - 1
OASystem/OASystem.Api/Controllers/SystemController.cs

@@ -859,7 +859,7 @@ namespace OASystem.API.Controllers
         {
             Result result = new Result();
             //模块数据
-            var setDataResult = await _setDataRepository.GetSySDefultModule(_setDataRepository);
+            var setDataResult = await _setDataRepository.GetSySDefultModule();
             if (setDataResult.Code != 0)
             {
                 return Ok(JsonView(setDataResult.Msg));
@@ -1178,5 +1178,49 @@ namespace OASystem.API.Controllers
             return Ok(JsonView(200, "成功", new { }));
         }
         #endregion
+
+        #region 页面配置
+
+        /// <summary>
+        /// 页面配置界面数据初始化
+        /// </summary>
+        /// <returns></returns>
+        //[Authorize]
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PageConfigInit()
+        {
+            ArrayList arr = new ArrayList();
+            var viewList = await _setDataRepository.GetSetDataAndPageInfoBySTId();
+            if (viewList.Code != 0)
+            {
+                return Ok(JsonView(viewList.Msg));
+            }
+            var ModList = await _setDataRepository.GetSySDefultModule();
+
+            return Ok(JsonView(new
+            {
+                viewList,
+                ModList,
+            }));
+        }
+
+
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public IActionResult EditPageInfo()
+        {
+
+            return Ok(JsonView(""));
+        }
+        
+
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public IActionResult AddPageInfo()
+        {
+            return Ok(JsonView(""));
+        }
+        #endregion
     }
 }

+ 55 - 0
OASystem/OASystem.Api/OAMethodLib/AutofacIocManager.cs

@@ -0,0 +1,55 @@
+using Autofac.Core;
+
+namespace OASystem.API.OAMethodLib
+{
+    public class AutofacIocManager
+    {
+        public static AutofacIocManager Instance = new AutofacIocManager();
+        public ILifetimeScope Container { get; set; }
+
+        public T GetService<T>()
+        {
+            return ResolutionExtensions.Resolve<T>((IComponentContext)(object)this.Container);
+        }
+
+        public T GetService<T>(string serviceKey)
+        {
+            return ResolutionExtensions.ResolveKeyed<T>((IComponentContext)(object)this.Container, (object)serviceKey);
+        }
+
+        public T GetService<T>(string serviceKey, params Parameter[] parameters)
+        {
+            return ResolutionExtensions.ResolveKeyed<T>((IComponentContext)(object)this.Container, (object)serviceKey, parameters);
+        }
+
+        public object GetService(Type serviceType)
+        {
+            return ResolutionExtensions.Resolve((IComponentContext)(object)this.Container, serviceType);
+        }
+
+        public object GetService(string serviceKey, Type serviceType)
+        {
+            return ResolutionExtensions.ResolveKeyed((IComponentContext)(object)this.Container, (object)serviceKey, serviceType);
+        }
+
+        public bool IsRegistered<T>()
+        {
+            return ResolutionExtensions.IsRegistered<T>((IComponentContext)(object)this.Container);
+        }
+
+        public bool IsRegistered<T>(string serviceKey)
+        {
+            return ResolutionExtensions.IsRegisteredWithKey<T>((IComponentContext)(object)this.Container, (object)serviceKey);
+        }
+
+        public bool IsRegistered(Type serviceType)
+        {
+            return ResolutionExtensions.IsRegistered((IComponentContext)(object)this.Container, serviceType);
+        }
+
+        public bool IsRegisteredWithKey(string serviceKey, Type serviceType)
+        {
+            return ResolutionExtensions.IsRegisteredWithKey((IComponentContext)(object)this.Container, (object)serviceKey, serviceType);
+        }
+    }
+}

+ 29 - 0
OASystem/OASystem.Api/OAMethodLib/AutofacRegister.cs

@@ -0,0 +1,29 @@
+using Microsoft.Extensions.Configuration.Json;
+using OASystem.Domain.Dtos.Groups;
+
+namespace OASystem.API.OAMethodLib
+{
+    public class AutofacRegister : Autofac.Module
+    {
+        protected override void Load(ContainerBuilder builder)
+        {
+            //OASystem.Infrastructure中所有以Repository结尾的文件都会被注入到项目
+            var assemblyServices = Assembly.Load("OASystem.Infrastructure");
+            builder.RegisterAssemblyTypes(assemblyServices).Where(a => a.Name.EndsWith("Repository")).AsSelf();
+
+            #region 团组流程管控配置
+
+            GroupsConfig _groupsConfig = new GroupsConfig();
+            _groupsConfig.AutoCreate = int.Parse(AppSettingsHelper.Get(GroupsConfig.KEY, "AutoCreate"));
+            _groupsConfig.Leader = int.Parse(AppSettingsHelper.Get(GroupsConfig.KEY, "Leader"));
+            _groupsConfig.ExBeginDays = int.Parse(AppSettingsHelper.Get(GroupsConfig.KEY, "ExBeginDays"));
+            _groupsConfig.ExEndDays = int.Parse(AppSettingsHelper.Get(GroupsConfig.KEY, "ExEndDays"));
+            _groupsConfig.DefaultUser = int.Parse(AppSettingsHelper.Get(GroupsConfig.KEY, "DefaultUser"));
+            _groupsConfig.Boss = int.Parse(AppSettingsHelper.Get(GroupsConfig.KEY, "Boss"));
+            _groupsConfig.FilterUser = AppSettingsHelper.Get(GroupsConfig.KEY, "FilterUser");
+            builder.RegisterInstance<GroupsConfig>(_groupsConfig);
+            #endregion
+
+        }
+    }
+}

+ 0 - 93
OASystem/OASystem.Api/OAMethodLib/BaseConfig.cs

@@ -1,93 +0,0 @@
-namespace OASystem.API.OAMethodLib
-{
-    public static class BaseConfig
-    {
-        /// <summary>
-        /// 版本号
-        /// </summary>
-        public const string Version = "0.0.1";
-
-        /// <summary>
-        /// 编码方式
-        /// </summary>
-        public const string Encoding = "UTF-8";
-
-        /// <summary>
-        /// 签名方法 SM2
-        /// </summary>
-        public const string SignMethod = "02";
-
-        /// <summary>
-        /// 招商银行商户号
-        /// </summary>
-        public const string MER_ID = "3089991727300CV";
-
-        /// <summary>
-        /// 招商银行收银员
-        /// </summary>
-        public const string USER_ID = "V000072134"; // 
-
-        /// <summary>
-        /// header中的APPID
-        /// </summary>
-        public const string APPID = "8ab74856-8772-45c9-96db-54cb30ab9f74"; // 
-
-        /// <summary>
-        /// 用于生成header中的APISign
-        /// </summary>
-        public const string APP_SECRET = "5b96f20a-011f-4254-8be8-9a5ceb2f317f"; // 
-
-        private static X9ECParameters x9ECParameters = GMNamedCurves.GetByName("sm2p256v1");
-        private static ECDomainParameters ecDomainParameters = new ECDomainParameters(x9ECParameters.Curve, x9ECParameters.G, x9ECParameters.N);
-        /// <summary>
-        /// 国密标准公钥头(固定值)
-        /// </summary>
-        public const string SM2_KEY_TITLE = "3059301306072a8648ce3d020106082a811ccf5501822d03420004";
-        /// <summary>
-        /// 国密局推荐 ID(固定值)
-        /// </summary>
-        public const string SM_USER_ID = "1234567812345678";
-        /// <summary>
-        /// 国密私钥
-        /// </summary>
-        public const string SM_PRIVATE_KEY = "D5F2AFA24E6BA9071B54A8C9AD735F9A1DE9C4657FA386C09B592694BC118B38";
-        /// <summary>
-        /// 国密公钥 base64
-        /// </summary>
-        public const string SM_PUBLIC_KEY = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE6Q+fktsnY9OFP+LpSR5Udbxf5zHCFO0PmOKlFNTxDIGl8jsPbbB/9ET23NV+acSz4FEkzD74sW2iiNVHRLiKHg==";
-
-    }
-
-    public static class UrlConfig
-    {
-        /// <summary>
-        /// 通知地址
-        /// </summary>
-        public const string NotifyUrl = "https://payment.wh-trip.com:8082/Notify";
-
-        /// <summary>
-        /// 收款码申请
-        /// </summary>
-        public const string CollectionQRCode = "https://api.cmburl.cn:8065/polypay/v1.0/mchorders/qrcodeapply";
-
-        /// <summary>
-        /// 支付结果查询
-        /// </summary>
-        public const string OrderqueryUrl = "https://api.cmburl.cn:8065/polypay/v1.0/mchorders/orderquery";
-
-        /// <summary>
-        /// 发起退款申请
-        /// </summary>
-        public const string RefundUrl = "https://api.cmburl.cn:8065/polypay/v1.0/mchorders/refund";
-
-        /// <summary>
-        /// 退款申请查询
-        /// </summary>
-        public const string RefundqueryUrl = "https://api.cmburl.cn:8065/polypay/v1.0/mchorders/refundquery";
-
-        /// <summary>
-        /// 支付宝native支付
-        /// </summary>
-        public const string ZFBQRCodeUrl = "https://api.cmburl.cn:8065/polypay/v1.0/mchorders/zfbqrcode";
-    }
-}

+ 434 - 0
OASystem/OASystem.Api/OAMethodLib/GroupStepForDelegation.cs

@@ -0,0 +1,434 @@
+using Google.Protobuf.WellKnownTypes;
+using Microsoft.AspNetCore.DataProtection.KeyManagement;
+using OASystem.API.OAMethodLib;
+using OASystem.Domain.Common;
+using OASystem.Domain.Dtos.Groups;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.Enums;
+using OASystem.Infrastructure.Repositories.Groups;
+using System.Configuration;
+using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
+
+namespace OASystem.API.OAMethodLibs
+{
+
+    /// <summary>
+    /// 团组流程管控
+    /// </summary>
+    public static class GroupStepForDelegation
+    {
+        private readonly static GrpScheduleRepository _grpScheduleRep = AutofacIocManager.Instance.GetService<GrpScheduleRepository>();
+
+        /// <summary>
+        /// 创建流程管控
+        /// </summary>
+        /// <param name="DiId">团组Id</param>
+        public static async void CreateWorkStep(int DiId)
+        {
+            //var _grpScheduleRep = AutofacIocManager.Instance.GetService<GrpScheduleRepository>();
+
+            //判断是否已存在团组的流程管控
+            Grp_ScheduleInfo check = _grpScheduleRep.Query(s => s.DiId == DiId).First();
+
+            if (check == null)
+            {
+                _grpScheduleRep.BeginTran();
+
+                GroupsConfig _groupConfig = AutofacIocManager.Instance.GetService<GroupsConfig>();
+                DateTime dftBeginDt = DateTime.Now.AddDays(_groupConfig.ExBeginDays);//默认预计开始时间
+                DateTime dftEndDt = DateTime.Now.AddDays(_groupConfig.ExEndDays);//默认预计结束时间
+
+                #region 主流程
+                Grp_ScheduleInfo _primary = new Grp_ScheduleInfo();
+                _primary.CreateUserId = _groupConfig.AutoCreate;
+                _primary.DiId = DiId;
+                _primary.Exception = 0;
+                _primary.ExpectBeginDt = dftBeginDt;
+                _primary.ExpectEndDt = dftEndDt;
+                _primary.Leader = _groupConfig.Leader;
+                _primary.PrimaryStep = GrpSchedulePrimaryStepEnum.Wait;
+                _primary.Remark = "请设置各流程负责人、预计开始/结束时间";
+                int _primaryId = await _grpScheduleRep.AddAsync(_primary);
+                if (_primaryId > 0)
+                {
+                    #region 子流程
+                    List<Grp_ScheduleDetailInfo> entityList = new List<Grp_ScheduleDetailInfo>();
+
+                    #region 模板
+                    Grp_ScheduleDetailInfo _model = new Grp_ScheduleDetailInfo();
+                    _model.CreateUserId = _groupConfig.AutoCreate;
+                    _model.Duty = _groupConfig.DefaultUser;
+                    _model.Exception = 0;
+                    _model.ExpectBeginDt = dftBeginDt;
+                    _model.ExpectEndDt = dftEndDt;
+                    _model.Remark = "未设置负责人";
+                    _model.ScheduleId = DiId;
+                    _model.StepStatus = 0;
+                    #endregion
+                    #region 经费预算
+                    Grp_ScheduleDetailInfo grp_budget202 = _model.DeepClone();
+                    grp_budget202.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BudgetChild02);
+                    grp_budget202.ParentStep = (int)GrpSchedulePrimaryStepEnum.Budget;
+                    grp_budget202.Step = (int)GrpSchedulePrimaryStepEnum.BudgetChild02;
+                    entityList.Add(grp_budget202);
+                    #endregion
+                    #region 市场部人员报价对接/反馈
+                    //上传明细单
+                    Grp_ScheduleDetailInfo grp_feedback302 = _model.DeepClone();
+                    grp_feedback302.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.FeedbackChild02);
+                    grp_feedback302.ParentStep = (int)GrpSchedulePrimaryStepEnum.Feedback;
+                    grp_feedback302.Step = (int)GrpSchedulePrimaryStepEnum.FeedbackChild02;
+                    entityList.Add(grp_feedback302);
+
+                    //录入最终总经费预算
+                    Grp_ScheduleDetailInfo grp_feedback303 = _model.DeepClone();
+                    grp_feedback303.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.FeedbackChild03);
+                    grp_feedback303.ParentStep = (int)GrpSchedulePrimaryStepEnum.Feedback;
+                    grp_feedback303.Step = (int)GrpSchedulePrimaryStepEnum.FeedbackChild03;
+                    entityList.Add(grp_feedback303);
+
+                    //完成报价对接/反馈
+                    Grp_ScheduleDetailInfo grp_feedback304 = _model.DeepClone();
+                    grp_feedback304.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.FeedbackChild04);
+                    grp_feedback304.ParentStep = (int)GrpSchedulePrimaryStepEnum.Feedback;
+                    grp_feedback304.Step = (int)GrpSchedulePrimaryStepEnum.FeedbackChild04;
+                    entityList.Add(grp_feedback304);
+                    #endregion
+                    #region (目前为空)报批流程
+
+                    #endregion
+                    #region 护照/签证
+                    //收集资料
+                    Grp_ScheduleDetailInfo grp_visa502 = _model.DeepClone();
+                    grp_visa502.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.VisaChild02);
+                    grp_visa502.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_visa502.Step = (int)GrpSchedulePrimaryStepEnum.VisaChild02;
+                    entityList.Add(grp_visa502);
+
+                    //取护照资料
+                    Grp_ScheduleDetailInfo grp_visa503 = _model.DeepClone();
+                    grp_visa503.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.VisaChild03);
+                    grp_visa503.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_visa503.Step = (int)GrpSchedulePrimaryStepEnum.VisaChild03;
+                    entityList.Add(grp_visa503);
+
+                    //填资料
+                    Grp_ScheduleDetailInfo grp_visa504 = _model.DeepClone();
+                    grp_visa504.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.VisaChild04);
+                    grp_visa504.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_visa504.Step = (int)GrpSchedulePrimaryStepEnum.VisaChild04;
+                    entityList.Add(grp_visa504);
+
+                    //送签
+                    Grp_ScheduleDetailInfo grp_visa505 = _model.DeepClone();
+                    grp_visa505.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.VisaChild05);
+                    grp_visa505.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_visa505.Step = (int)GrpSchedulePrimaryStepEnum.VisaChild05;
+                    entityList.Add(grp_visa505);
+
+                    //出签+取护照
+                    Grp_ScheduleDetailInfo grp_visa506 = _model.DeepClone();
+                    grp_visa506.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.VisaChild06);
+                    grp_visa506.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_visa506.Step = (int)GrpSchedulePrimaryStepEnum.VisaChild06;
+                    entityList.Add(grp_visa506);
+
+                    //归还护照
+                    Grp_ScheduleDetailInfo grp_visa507 = _model.DeepClone();
+                    grp_visa507.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.VisaChild07);
+                    grp_visa507.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_visa507.Step = (int)GrpSchedulePrimaryStepEnum.VisaChild07;
+                    entityList.Add(grp_visa507);
+
+                    //签证费用录入 
+                    Grp_ScheduleDetailInfo grp_visa508 = _model.DeepClone();
+                    grp_visa508.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.VisaChild08);
+                    grp_visa508.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_visa508.Step = (int)GrpSchedulePrimaryStepEnum.VisaChild08;
+                    entityList.Add(grp_visa508);
+                    #endregion
+                    #region 业务操作
+                    //机票
+                    Grp_ScheduleDetailInfo grp_busJP601 = _model.DeepClone();
+                    grp_busJP601.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessJP);
+                    grp_busJP601.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_busJP601.Step = (int)GrpSchedulePrimaryStepEnum.BusinessJP;
+                    entityList.Add(grp_busJP601);
+                    //机票-询价并导入黑屏代码
+                    Grp_ScheduleDetailInfo grp_busJP6012 = _model.DeepClone();
+                    grp_busJP6012.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessJPChild02);
+                    grp_busJP6012.ParentStep = (int)GrpSchedulePrimaryStepEnum.BusinessJP;
+                    grp_busJP6012.Step = (int)GrpSchedulePrimaryStepEnum.BusinessJPChild02;
+                    entityList.Add(grp_busJP6012);
+                    //机票-机票已占位
+                    Grp_ScheduleDetailInfo grp_busJP6013 = _model.DeepClone();
+                    grp_busJP6013.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessJPChild03);
+                    grp_busJP6013.ParentStep = (int)GrpSchedulePrimaryStepEnum.BusinessJP;
+                    grp_busJP6013.Step = (int)GrpSchedulePrimaryStepEnum.BusinessJPChild03;
+                    entityList.Add(grp_busJP6013);
+                    //机票-已出票
+                    Grp_ScheduleDetailInfo grp_busJP6014 = _model.DeepClone();
+                    grp_busJP6014.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessJPChild04);
+                    grp_busJP6014.ParentStep = (int)GrpSchedulePrimaryStepEnum.BusinessJP;
+                    grp_busJP6014.Step = (int)GrpSchedulePrimaryStepEnum.BusinessJPChild04;
+                    entityList.Add(grp_busJP6014);
+                    //机票-机票费用录入
+                    Grp_ScheduleDetailInfo grp_busJP6015 = _model.DeepClone();
+                    grp_busJP6015.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessJPChild05);
+                    grp_busJP6015.ParentStep = (int)GrpSchedulePrimaryStepEnum.BusinessJP;
+                    grp_busJP6015.Step = (int)GrpSchedulePrimaryStepEnum.BusinessJPChild05;
+                    entityList.Add(grp_busJP6015);
+
+                    //酒店
+                    Grp_ScheduleDetailInfo grp_busJD602 = _model.DeepClone();
+                    grp_busJD602.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessJD);
+                    grp_busJD602.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_busJD602.Step = (int)GrpSchedulePrimaryStepEnum.BusinessJD;
+                    entityList.Add(grp_busJD602);
+                    //酒店-酒店费用录入
+                    Grp_ScheduleDetailInfo grp_busJD6022 = _model.DeepClone();
+                    grp_busJD6022.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessJDChild02);
+                    grp_busJD6022.ParentStep = (int)GrpSchedulePrimaryStepEnum.BusinessJD;
+                    grp_busJD6022.Step = (int)GrpSchedulePrimaryStepEnum.BusinessJDChild02;
+                    entityList.Add(grp_busJD6022);
+
+                    //OP
+                    Grp_ScheduleDetailInfo grp_busOP603 = _model.DeepClone();
+                    grp_busOP603.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessOP);
+                    grp_busOP603.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_busOP603.Step = (int)GrpSchedulePrimaryStepEnum.BusinessOP;
+                    entityList.Add(grp_busOP603);
+                    //OP-OP费用录入
+                    Grp_ScheduleDetailInfo grp_busOP6032 = _model.DeepClone();
+                    grp_busOP6032.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessOPChild02);
+                    grp_busOP6032.ParentStep = (int)GrpSchedulePrimaryStepEnum.BusinessOP;
+                    grp_busOP6032.Step = (int)GrpSchedulePrimaryStepEnum.BusinessOPChild02;
+                    entityList.Add(grp_busOP6032);
+
+                    //商邀
+                    Grp_ScheduleDetailInfo grp_busSY604 = _model.DeepClone();
+                    grp_busSY604.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessSY);
+                    grp_busSY604.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_busSY604.Step = (int)GrpSchedulePrimaryStepEnum.BusinessSY;
+                    entityList.Add(grp_busSY604);
+                    //商邀-商邀费用录入
+                    Grp_ScheduleDetailInfo grp_busSY6042 = _model.DeepClone();
+                    grp_busSY6042.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessSYChild02);
+                    grp_busSY6042.ParentStep = (int)GrpSchedulePrimaryStepEnum.BusinessSY;
+                    grp_busSY6042.Step = (int)GrpSchedulePrimaryStepEnum.BusinessSYChild02;
+                    entityList.Add(grp_busSY6042);
+
+                    //其他
+                    Grp_ScheduleDetailInfo grp_busQT605 = _model.DeepClone();
+                    grp_busQT605.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessQT);
+                    grp_busQT605.ParentStep = (int)GrpSchedulePrimaryStepEnum.Visa;
+                    grp_busQT605.Step = (int)GrpSchedulePrimaryStepEnum.BusinessQT;
+                    entityList.Add(grp_busQT605);
+                    //商邀-商邀费用录入
+                    Grp_ScheduleDetailInfo grp_busQT6052 = _model.DeepClone();
+                    grp_busQT6052.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.BusinessQTChild02);
+                    grp_busQT6052.ParentStep = (int)GrpSchedulePrimaryStepEnum.BusinessQT;
+                    grp_busQT6052.Step = (int)GrpSchedulePrimaryStepEnum.BusinessQTChild02;
+                    entityList.Add(grp_busQT6052);
+
+                    #endregion
+                    #region 费用审批
+                    //机票费用审批
+                    Grp_ScheduleDetailInfo grp_cost702 = _model.DeepClone();
+                    grp_cost702.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.CostAuditChild02);
+                    grp_cost702.ParentStep = (int)GrpSchedulePrimaryStepEnum.CostAudit;
+                    grp_cost702.Step = (int)GrpSchedulePrimaryStepEnum.CostAuditChild02;
+                    grp_cost702.Duty = _groupConfig.Boss;
+                    entityList.Add(grp_cost702);
+                    //酒店费用审批
+                    Grp_ScheduleDetailInfo grp_cost703 = _model.DeepClone();
+                    grp_cost703.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.CostAuditChild03);
+                    grp_cost703.ParentStep = (int)GrpSchedulePrimaryStepEnum.CostAudit;
+                    grp_cost703.Step = (int)GrpSchedulePrimaryStepEnum.CostAuditChild03;
+                    grp_cost703.Duty = _groupConfig.Boss;
+                    entityList.Add(grp_cost703);
+                    //OP费用审批
+                    Grp_ScheduleDetailInfo grp_cost704 = _model.DeepClone();
+                    grp_cost704.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.CostAuditChild04);
+                    grp_cost704.ParentStep = (int)GrpSchedulePrimaryStepEnum.CostAudit;
+                    grp_cost704.Step = (int)GrpSchedulePrimaryStepEnum.CostAuditChild04;
+                    grp_cost704.Duty = _groupConfig.Boss;
+                    entityList.Add(grp_cost704);
+                    //OP费用审批
+                    Grp_ScheduleDetailInfo grp_cost705 = _model.DeepClone();
+                    grp_cost705.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.CostAuditChild05);
+                    grp_cost705.ParentStep = (int)GrpSchedulePrimaryStepEnum.CostAudit;
+                    grp_cost705.Step = (int)GrpSchedulePrimaryStepEnum.CostAuditChild05;
+                    grp_cost705.Duty = _groupConfig.Boss;
+                    entityList.Add(grp_cost705);
+                    //增减款项审批
+                    Grp_ScheduleDetailInfo grp_cost706 = _model.DeepClone();
+                    grp_cost706.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.CostAuditChild06);
+                    grp_cost706.ParentStep = (int)GrpSchedulePrimaryStepEnum.CostAudit;
+                    grp_cost706.Step = (int)GrpSchedulePrimaryStepEnum.CostAuditChild06;
+                    grp_cost706.Duty = _groupConfig.Boss;
+                    entityList.Add(grp_cost706);
+                    #endregion
+                    #region 付款给供应商
+                    //OP费用付款
+                    Grp_ScheduleDetailInfo grp_pay802 = _model.DeepClone();
+                    grp_pay802.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.PayChild02);
+                    grp_pay802.ParentStep = (int)GrpSchedulePrimaryStepEnum.Pay;
+                    grp_pay802.Step = (int)GrpSchedulePrimaryStepEnum.PayChild02;
+                    entityList.Add(grp_pay802);
+                    //商邀费用付款
+                    Grp_ScheduleDetailInfo grp_pay803 = _model.DeepClone();
+                    grp_pay803.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.PayChild03);
+                    grp_pay803.ParentStep = (int)GrpSchedulePrimaryStepEnum.Pay;
+                    grp_pay803.Step = (int)GrpSchedulePrimaryStepEnum.PayChild03;
+                    entityList.Add(grp_pay803);
+                    //增减款项付款
+                    Grp_ScheduleDetailInfo grp_pay804 = _model.DeepClone();
+                    grp_pay804.JobContent = EnumHelper.GetEnumDescription(GrpSchedulePrimaryStepEnum.PayChild04);
+                    grp_pay804.ParentStep = (int)GrpSchedulePrimaryStepEnum.Pay;
+                    grp_pay804.Step = (int)GrpSchedulePrimaryStepEnum.PayChild04;
+                    entityList.Add(grp_pay804);
+                    #endregion
+                    #region (目前为空)出行事项会议
+
+                    #endregion
+                    #region (目前为空)送机
+
+                    #endregion
+                    #region (目前为空)接机
+
+                    #endregion
+                    #region (目前为空)收款
+
+                    #endregion
+                    #region (目前为空)团组完成
+
+                    #endregion
+
+                    //SqlSugar批量添加
+                    _grpScheduleRep.bulkInsert(entityList);
+                    #endregion
+                    #region 流程管控成员
+                    string sqlPerson = string.Format(@"Select u.Id As SysUserId,u.CnName As SysUserName,JobName as JobStr 
+From Sys_Users As u With(Nolock) 
+Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id
+Inner Join Sys_JobPost as j With(Nolock) On u.JobPostId=j.Id
+Where d.Id={0} And u.Id not in({1})", DepartmentCode.IC, _groupConfig.FilterUser);
+
+                    List<Grp_SchedulePersonInfo> personList = await _grpScheduleRep.GetEntityList_SchedulePersonBySql(sqlPerson);
+                    if (personList.Count > 0)
+                    {
+                        foreach (var item in personList)
+                        {
+                            item.CreateUserId = _groupConfig.DefaultUser;
+                            item.ScheduleId = DiId;
+                        }
+                        _grpScheduleRep.bulkInsert(personList);
+                    }
+
+                    #endregion
+                }
+                else
+                {
+                    _grpScheduleRep.RollbackTran();
+                }
+                #endregion
+
+                _grpScheduleRep.CommitTran();
+            }
+
+        }
+
+        public static async void ChangeStepForPrimary(int DiId, GrpSchedulePrimaryStepEnum primary, int isDel, int exception, string remark)
+        {
+            //var _grpScheduleRep = AutofacIocManager.Instance.GetService<GrpScheduleRepository>();
+            string sqlPrimary = string.Format(@" Select * From Grp_Schedule With(Nolock) Where IsDel=0 And DiId={0} ", DiId);
+            Grp_ScheduleInfo _grpPrimaryInfo = _grpScheduleRep.GetSingleInfoBySqlWithNolock(sqlPrimary);
+            if (_grpPrimaryInfo != null)
+            {
+                _grpPrimaryInfo.PrimaryStep = primary;
+                _grpPrimaryInfo.IsDel = isDel;
+                _grpPrimaryInfo.Exception = exception;
+                _grpPrimaryInfo.Remark += ";" + remark;
+
+                var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleInfo>()
+                .Where(s => s.Id == _grpPrimaryInfo.Id)
+                .UpdateColumns(s => new { s.PrimaryStep, s.IsDel, s.Exception, s.Remark })
+                .ExecuteCommandAsync();
+            }
+        }
+
+        #region 流程管控步骤推进
+
+        /// <summary>
+        /// 刷新团组管控最新状态,或推进流程到下一节点
+        /// </summary>
+        /// <param name="scheduleId">团组流程Id</param>
+        public static async void RefreshWorkStep(int scheduleId, bool auto = false)
+        {
+            //var _grpScheduleRep = AutofacIocManager.Instance.GetService<GrpScheduleRepository>();
+            string sqlPrimary = string.Format(@" Select * From Grp_Schedule With(Nolock) Where IsDel=0 And Id={0} ", scheduleId);
+            Grp_ScheduleInfo _grpPrimaryInfo = _grpScheduleRep.GetSingleInfoBySqlWithNolock(sqlPrimary);
+            if (_grpPrimaryInfo != null)
+            {
+                List<Grp_ScheduleDetailInfo> _list = _grpScheduleRep._sqlSugar.Queryable<Grp_ScheduleDetailInfo>()
+                 .Where(s => s.ScheduleId == scheduleId && s.IsDel != 1 && s.ParentStep == (int)_grpPrimaryInfo.PrimaryStep && s.StepStatus != 2)
+                 .ToList();
+                if (_list.Count > 0)
+                {
+                    //未完成主流程节点下所有步骤任务
+                }
+                else
+                {
+                    //可推进节点
+                    if (auto)
+                    {
+                        int nextPrimaryStep = (int)_grpPrimaryInfo.PrimaryStep + 1;
+                        var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleInfo>()
+                            .Where(s => s.Id == _grpPrimaryInfo.Id)
+                            .UpdateColumns(s => new { nextPrimaryStep })
+                            .ExecuteCommandAsync();
+                    }
+                }
+
+                //eg:CheckStep_Budget
+                //switch (_grpPrimaryInfo.PrimaryStep)
+                //{
+                //    case GrpSchedulePrimaryStepEnum.Budget: CheckStep_Budget(scheduleId); break;
+                //}
+            }
+        }
+
+        /// <summary>
+        /// 暂无需求,先保存,可扩展至查询验证主流程下每一个详细流程步骤对应的业务操作是否完成,需要其他业务提供验证方法
+        /// 查看流程-经费预算
+        /// </summary>
+        /// <param name="scheduleId"></param>
+        /// <returns>true:已完成所有步骤,false:存在未完成的步骤(Grp_ScheduleDetail.StepStatus:0/1/2)</returns>
+        private static bool CheckStep_Budget(int scheduleId)
+        {
+            List<Grp_ScheduleDetailInfo> _list = _grpScheduleRep._sqlSugar.Queryable<Grp_ScheduleDetailInfo>()
+                 .Where(s => s.ScheduleId == scheduleId && s.IsDel != 1 && s.ParentStep == (int)GrpSchedulePrimaryStepEnum.Budget)
+                 .ToList();
+
+            foreach (var item in _list)
+            {
+                switch (item.Step)
+                {
+                    case (int)GrpSchedulePrimaryStepEnum.BudgetChild01:
+                        //验证方法
+                        break;
+                    case (int)GrpSchedulePrimaryStepEnum.BudgetChild02: break;
+
+                }
+            }
+
+            return false;
+        }
+
+        #endregion
+
+    }
+
+
+}

+ 6 - 5
OASystem/OASystem.Api/Program.cs

@@ -6,7 +6,8 @@ using OASystem.RedisRepository.RedisAsyncHelper;
 using OASystem.RedisRepository.Config;
 using OASystem.API.OAMethodLib;
 using System.Text.Json.Serialization;
-using Microsoft.Extensions.Options;
+using OASystem.API.OAMethodLibs;
+using OASystem.Domain.Dtos.Groups;
 
 var builder = WebApplication.CreateBuilder(args);
 var basePath = AppContext.BaseDirectory;
@@ -103,7 +104,6 @@ if (AppSettingsHelper.Get("UseSwagger").ToBool())
                 }, Scheme = "oauth2", Name = "Bearer", In = ParameterLocation.Header }, new List<string>()
             }
         });
-        //a.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
     });
 }
 #endregion
@@ -177,14 +177,13 @@ Log.Logger = new LoggerConfiguration()
        .CreateLogger();
 #endregion
 
-#region 引入注册Autofac OASystem.Infrastructure中所有以Repository结尾的文件都会被注入到项目
+#region 引入注册Autofac Module
 builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
 var hostBuilder = builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
 {
     try
     {
-        var assemblyServices = Assembly.Load("OASystem.Infrastructure");
-        builder.RegisterAssemblyTypes(assemblyServices).Where(a => a.Name.EndsWith("Repository")).AsSelf();
+        builder.RegisterModule(new AutofacRegister());
     }
     catch (Exception ex)
     {
@@ -205,6 +204,7 @@ builder.Services.AddScoped<IMapper, Mapper>();
 #endregion
 
 var app = builder.Build();
+AutofacIocManager.Instance.Container = app.UseHostFiltering().ApplicationServices.GetAutofacRoot();//AutofacIocManager
 
 // Configure the HTTP request pipeline.
 if (!app.Environment.IsDevelopment())
@@ -236,6 +236,7 @@ if (AppSettingsHelper.Get("UseSwagger").ToBool())
 }
 #endregion
 
+
 app.MapControllerRoute(
     name: "default",
     pattern: "{controller=Home}/{action=Index}/{id?}");

+ 10 - 2
OASystem/OASystem.Api/appsettings.json

@@ -3,6 +3,14 @@
     "OA2023DB": "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2023DB;"
   },
   "JwtSecurityKey": "48d3f4fe770940a1068052f581536b81", //jwt密钥
-  "UseSwagger": "true" //启用Swagger
-
+  "UseSwagger": "true", //启用Swagger
+  "GroupsConfig": {
+    "AutoCreate": "4",
+    "Leader": "149",
+    "ExBeginDays": "3",
+    "ExEndDays": "30",
+    "DefaultUser": "51",
+    "Boss": "21",
+    "FilterUser": "51,180"
+  }
 }

+ 8 - 0
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -58,13 +58,21 @@ namespace OASystem.Domain.AutoMappers
             #region Group
 
             CreateMap<GroupListDto, Grp_DelegationInfo>();
+            CreateMap<Grp_ScheduleDetailUpdDto, Grp_ScheduleDetailInfo>();
+            CreateMap<Grp_ScheduleDetailInsertDto, Grp_ScheduleDetailInfo>();
             #endregion
 
             #region Resource
+
             #region 车公司资料
             CreateMap<Res_CarData, CarDataView>();
             CreateMap<AddCarDataDto, Res_CarData>();
             #endregion
+
+            #region 导游地接资料
+            CreateMap<Res_LocalGuideData, LocalGuideDataView>();
+            CreateMap<LocalGuideOperationDto,Res_LocalGuideData>();
+            #endregion
             #endregion
         }
     }

+ 57 - 0
OASystem/OASystem.Domain/Common/DepartmentCode.cs

@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Common
+{
+    public class DepartmentCode
+    {
+        /// <summary>
+        /// 总经办
+        /// </summary>
+        public static int GMO = 1;
+
+        /// <summary>
+        /// 信息部
+        /// </summary>
+        public static int INFO = 2;
+
+        /// <summary>
+        /// 财务部
+        /// </summary>
+        public static int FIN = 3;
+
+        /// <summary>
+        /// 人事部
+        /// </summary>
+        public static int HR = 4;
+
+        /// <summary>
+        /// 策划部
+        /// </summary>
+        public static int PLAN = 5;
+
+        /// <summary>
+        /// 市场部
+        /// </summary>
+        public static int MARKET = 6;
+
+        /// <summary>
+        /// 国交部
+        /// </summary>
+        public static int IC = 7;
+
+        /// <summary>
+        /// 项目部
+        /// </summary>
+        public static int PROJECT = 8;
+
+        /// <summary>
+        /// OA管理部
+        /// </summary>
+        public static int OA = 9;
+
+    }
+}

+ 51 - 0
OASystem/OASystem.Domain/Dtos/Groups/GroupsConfig.cs

@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Groups
+{
+    /// <summary>
+    /// appsettings.json配置对应实体类(团组管控流程配置)
+    /// </summary>
+    public class GroupsConfig
+    {
+        public const string KEY = "GroupsConfig";
+
+        /// <summary>
+        /// 创建团组管控流程的默认用户Id ,当前为管理员4
+        /// </summary>
+        public int AutoCreate { get; set; }
+
+        /// <summary>
+        /// 团组管控流程默认总负责人,当前为王鸽149
+        /// </summary>
+        public int Leader { get; set; }
+
+        /// <summary>
+        /// 团组默认初始日期(增加3天)
+        /// </summary>
+        public int ExBeginDays { get; set; }
+
+        /// <summary>
+        /// 团组默认结束日期(增加30天)
+        /// </summary>
+        public int ExEndDays { get; set; }
+
+        /// <summary>
+        /// 默认用户Id(国交部共享号)
+        /// </summary>
+        public int DefaultUser { get; set; }
+
+        /// <summary>
+        /// 总经理Id
+        /// </summary>
+        public int Boss { get; set; }
+
+        /// <summary>
+        /// 屏蔽用户Id
+        /// </summary>
+        public string FilterUser { get; set; }
+    }
+}

+ 32 - 0
OASystem/OASystem.Domain/Dtos/Groups/Grp_ScheduleDetailDto.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Groups
+{
+    public class Grp_ScheduleDetailUpdDto
+    {
+        public int Id { get; set; }
+        public int Duty { get; set; }
+        public int StepStatus { get; set; }
+        public string JobContent { get; set; }
+        public DateTime ExpectBeginDt { get; set; }
+        public DateTime ExpectEndDt { get; set; }
+        public string Remark { get; set; }
+    }
+
+    public class Grp_ScheduleDetailInsertDto
+    {
+        public int ScheduleId { get; set; }
+        public int Step { get; set; }
+        public int ParentStep { get; set; }
+        public int Duty { get; set; }
+        public string JobContent { get; set; }
+        public DateTime ExpectBeginDt { get; set; }
+        public DateTime ExpectEndDt { get; set; }
+        public int CreateUserId { get; set; }
+        public string Remark { get; set; }
+    }
+}

+ 1 - 0
OASystem/OASystem.Domain/Dtos/Groups/Grp_ScheduleDto.cs

@@ -31,5 +31,6 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public int SysUserId { get; set; }
 
+
     }
 }

+ 4 - 43
OASystem/OASystem.Domain/Dtos/Resource/CarDataDto.cs

@@ -35,27 +35,8 @@ namespace OASystem.Domain.Dtos.Resource
         /// <summary>
         /// 联系人手机号
         /// </summary>
-        private string contactTel;
-        public string ContactTel
-        {
-            get
-            {
-                return contactTel;
-            }
-            set
-            {
-                if (Regex.IsMatch(value, @"^[1]+[2,3,4,5,6,7,8,9]+\d{9}"))
-                {
-                    contactTel = value;
-                }
-                else
-                {
-                    contactTel = "";
-                }
-
-            }
-        }
-
+        public string ContactTel { get; set; }
+        
         /// <summary>
         /// 联系人邮箱
         /// </summary>
@@ -179,30 +160,10 @@ namespace OASystem.Domain.Dtos.Resource
         /// 联系人
         /// </summary>
         public string Contact { get; set; }
-
         /// <summary>
-        /// 联系人手机号
+        /// 联系方式
         /// </summary>
-        private string contactTel;
-        public string ContactTel
-        {
-            get
-            {
-                return contactTel;
-            }
-            set
-            {
-                if (Regex.IsMatch(value, @"^[1]+[2,3,4,5,6,7,8,9]+\d{9}"))
-                {
-                    contactTel = value;
-                }
-                else
-                {
-                    contactTel = "";
-                }
-
-            }
-        }
+        public string ContactTel { get; set; }
 
         /// <summary>
         /// 联系人邮箱

+ 132 - 0
OASystem/OASystem.Domain/Dtos/Resource/LocalGuideDataDto.cs

@@ -0,0 +1,132 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Resource
+{
+    /// <summary>
+    /// 地接导游修改添加参数
+    /// </summary>
+    public class LocalGuideOperationDto
+    {
+        /// <summary>
+        /// 操作状态
+        /// 1 添加 
+        /// 2 修改 
+        /// </summary>
+        public int Status { get; set; }
+
+        /// <summary>
+        /// 地接导游Id
+        /// </summary>
+        public int Id { get; set; }
+        /// <summary>
+        /// 区域
+        /// </summary>
+        public string UnitArea { get; set; }
+
+        /// <summary>
+        /// 公司名称
+        /// </summary>
+        public string UnitName { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        public string Contact { get; set; }
+
+        /// <summary>
+        /// 联系人手机号
+        /// </summary>
+        public string ContactTel { get; set; }
+        
+
+        /// <summary>
+        /// 联系人邮箱
+        /// </summary>
+        public string ContactEmail { get; set; }
+
+        /// <summary>
+        /// 联系人传真
+        /// </summary>
+        public string ContactFax { get; set; }
+
+        /// <summary>
+        /// 其他信息
+        /// </summary>
+        public string OtherInfo { get; set; }
+
+        /// <summary>
+        /// 服务评分
+        /// </summary>
+        public int Score { get; set; }
+
+        /// <summary>
+        /// 着装得体
+        /// A B C  选择
+        /// </summary>
+        public string SuitScore { get; set; }
+
+        /// <summary>
+        /// 服务意识强度
+        /// A B C  选择
+        /// </summary>
+        public string ServeScore { get; set; }
+
+        /// <summary>
+        /// 讲解水平专业
+        /// A B C  选择
+        /// </summary>
+        public string TalkProScore { get; set; }
+
+        /// <summary>
+        /// 时间概念强度
+        /// A B C  选择
+        /// </summary>
+        public string TimeScore { get; set; }
+
+        /// <summary>
+        /// 配合能力强,服从安排
+        /// A B C  选择
+        /// </summary>
+        public string FitScore { get; set; }
+
+        /// <summary>
+        /// 应变能力强
+        /// A B C  选择
+        /// </summary>
+        public string StrainScore { get; set; }
+
+        /// <summary>
+        /// 当地语言和中文表达流畅
+        /// A B C  选择
+        /// </summary>
+        public string LocalAndChineseScore { get; set; }
+
+        /// <summary>
+        /// 创建者Id
+        /// </summary>
+        public int CreateUserId { get; set; }
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+    }
+
+    /// <summary>
+    /// 地接导游删除参数
+    /// </summary>
+    public class LocalGuideDelDto
+    {
+        public int Id { get; set; }
+        public int DeleteUserId { get; set; }
+    }
+}

+ 31 - 2
OASystem/OASystem.Domain/Entities/Groups/Grp_ScheduleInfo.cs

@@ -2,6 +2,8 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Runtime.Serialization;
 using System.Text;
 using System.Threading.Tasks;
 
@@ -72,7 +74,7 @@ namespace OASystem.Domain.Entities.Groups
     /// 团组流程管控详细进度
     /// </summary>
     [SugarTable("Grp_ScheduleDetail")]
-    public class Grp_ScheduleDetailInfo : EntityBase
+    public class Grp_ScheduleDetailInfo : EntityBase, ICloneable
     {
         /// <summary>
         /// 团组流程Id
@@ -93,7 +95,12 @@ namespace OASystem.Domain.Entities.Groups
         public int ParentStep { get; set; }
 
         /// <summary>
-        /// 流程状态(0/1/2 未完成/进行中/已完成)
+        /// 流程状态
+        /// <list type="table">
+        /// <item><para>0:待分配(未开始)</para></item>
+        /// <item><para>1:进行中</para></item>
+        /// <item><para>2:已完成</para></item>
+        /// </list>
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int StepStatus { get; set; }
@@ -104,6 +111,12 @@ namespace OASystem.Domain.Entities.Groups
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int Duty { get; set; }
 
+        /// <summary>
+        /// 工作内容
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string JobContent { get; set; }
+
         /// <summary>
         /// 预计开始时间
         /// </summary>
@@ -133,6 +146,22 @@ namespace OASystem.Domain.Entities.Groups
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int Exception { get; set; }
+
+        public object Clone()
+        {
+            return this.MemberwiseClone();
+        }
+
+        public Grp_ScheduleDetailInfo DeepClone()
+        {
+            using (Stream objectStream = new MemoryStream())
+            {
+                IFormatter formatter = new BinaryFormatter();
+                formatter.Serialize(objectStream, this);
+                objectStream.Seek(0, SeekOrigin.Begin);
+                return formatter.Deserialize(objectStream) as Grp_ScheduleDetailInfo;
+            }
+        }
     }
 
     /// <summary>

+ 28 - 0
OASystem/OASystem.Domain/Entities/System/Sys_SystemMenuPermission.cs

@@ -27,5 +27,33 @@ namespace OASystem.Domain.Entities.System
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
         public string SystemMenuCode { get; set; }
+
+        /// <summary>
+        /// web端URL
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string WebUrl { get; set; }
+        /// <summary>
+        /// Android端URL
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string AndroidUrl { get; set; }
+        /// <summary>
+        /// iOS端URL
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string IosUrl { get; set; }
+        
+        /// <summary>
+        /// 手机端是否启用
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PhoneIsEnable { get; set; }
+
+        /// <summary>
+        /// 手机端图标
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string Icon { get; set; }
     }
 }

+ 6 - 0
OASystem/OASystem.Domain/Enums/EnumHelper.cs

@@ -35,5 +35,11 @@ namespace OASystem.Domain.Enums
                 return "";
             }
         }
+
+        //根据值获取枚举方法
+        public static Enum GetEnumByValue(Type enumType, string value)
+        {
+            return Enum.Parse(enumType, value) as Enum;
+        }
     }
 }

+ 252 - 17
OASystem/OASystem.Domain/Enums/GrpScheduleEnum.cs

@@ -13,91 +13,326 @@ namespace OASystem.Domain.Enums
     public enum GrpSchedulePrimaryStepEnum
     {
         /// <summary>
-        /// 未开始
+        /// 未开始/等待任务分配 I
         /// </summary>
-        [Description("未开始")]
+        [Description("未开始/等待任务分配")]
         Wait = 0,
 
         /// <summary>
-        /// 确认出团
+        /// 确认出团/任务分配 I
         /// </summary>
-        [Description("确认出团")]
+        [Description("确认出团/任务分配完成")]
         Confirm = 1,
 
+        #region 经费预算
         /// <summary>
-        /// 经费预算
+        /// 经费预算 I
         /// </summary>
         [Description("经费预算")]
         Budget = 2,
+        /// <summary>
+        /// 经费预算自定义子流程 II
+        /// </summary>
+        BudgetChild01 = 201,
+        /// <summary>
+        /// 经费预算子流程:完成经费预算 II
+        /// </summary>
+        [Description("完成经费预算")]
+        BudgetChild02 = 202,
+        #endregion
 
+        #region 市场部人员对接反馈
         /// <summary>
-        /// 市场部人员对接反馈
+        /// 市场部人员对接反馈 I
         /// </summary>
         [Description("市场部人员对接反馈")]
         Feedback = 3,
+        /// <summary>
+        /// 市场部人员对接反馈自定义子流程 II
+        /// </summary>
+        FeedbackChild01 = 301,
+        /// <summary>
+        /// 上传明细单 II
+        /// </summary>
+        [Description("上传明细单")]
+        FeedbackChild02 = 302,
+        /// <summary>
+        /// 录入最终总经费预算 II
+        /// </summary>
+        [Description("录入最终总经费预算")]
+        FeedbackChild03 = 303,
+        /// <summary>
+        /// 完成报价对接/反馈 II
+        /// </summary>
+        [Description("完成报价对接/反馈")]
+        FeedbackChild04 = 304,
+        #endregion
 
         /// <summary>
-        /// 报批流程
+        /// 报批流程 I
         /// </summary>
         [Description("报批流程")]
         Puote = 4,
 
+        #region 护照签证
+
         /// <summary>
-        /// 护照签证
+        /// 护照签证 I
         /// </summary>
         [Description("护照签证")]
         Visa = 5,
+        /// <summary>
+        /// 护照签证自定义子流程 II
+        /// </summary>
+        VisaChild01 = 501,
+        /// <summary>
+        /// 收集资料 II
+        /// </summary>
+        [Description("收集资料")]
+        VisaChild02 = 502,
+        /// <summary>
+        /// 取护照资料 II
+        /// </summary>
+        [Description("取护照资料")]
+        VisaChild03 = 503,
+        /// <summary>
+        /// 填资料 II
+        /// </summary>
+        [Description("填资料")]
+        VisaChild04 = 504,
+        /// <summary>
+        /// 送签 II
+        /// </summary>
+        [Description("送签")]
+        VisaChild05 = 505,
+        /// <summary>
+        /// 出签+取护照 II
+        /// </summary>
+        [Description("出签+取护照")]
+        VisaChild06 = 506,
+        /// <summary>
+        /// 归还护照 II
+        /// </summary>
+        [Description("归还护照")]
+        VisaChild07 = 507,
+        /// <summary>
+        /// 签证费用录入 II
+        /// </summary>
+        [Description("签证费用录入")]
+        VisaChild08 = 508,
+
+        #endregion
+
+        #region 业务操作
 
         /// <summary>
-        /// 业务流程
+        /// 业务流程 I
         /// </summary>
         [Description("业务操作")]
         Business = 6,
+        #region 机票
+        /// <summary>
+        /// 业务流程-机票 II
+        /// </summary>
+        [Description("业务流程-机票")]
+        BusinessJP = 601,
+        /// <summary>
+        /// 业务流程-机票-自定义子流程 III
+        /// </summary>
+        [Description("业务流程-机票-自定义子流程")]
+        BusinessJPChild01 = 6011,
+        /// <summary>
+        /// 业务流程-机票-询价并导入黑屏代码 III
+        /// </summary>
+        [Description("询价并导入黑屏代码")]
+        BusinessJPChild02 = 6012,
+        /// <summary>
+        /// 业务流程-机票-机票已占位 III
+        /// </summary>
+        [Description("机票已占位")]
+        BusinessJPChild03 = 6013,
+        /// <summary>
+        /// 业务流程-机票-已出票 III
+        /// </summary>
+        [Description("已出票")]
+        BusinessJPChild04 = 6014,
+        /// <summary>
+        /// 业务流程-机票-机票费用录入 III
+        /// </summary>
+        [Description("机票费用录入")]
+        BusinessJPChild05 = 6015,
+        #endregion
+        #region 酒店
+        /// <summary>
+        /// 业务流程-酒店 II
+        /// </summary>
+        [Description("业务流程-酒店")]
+        BusinessJD = 602,
+        /// <summary>
+        /// 业务流程-酒店-自定义子流程 III
+        /// </summary>
+        [Description("业务流程-酒店-自定义子流程")]
+        BusinessJDChild01 = 6021,
+        /// <summary>
+        /// 业务流程-酒店-酒店费用录入 III
+        /// </summary>
+        [Description("酒店费用录入")]
+        BusinessJDChild02 = 6022,
+
+        #endregion
+        #region OP
+        /// <summary>
+        /// 业务流程-OP II
+        /// </summary>
+        [Description("业务流程-OP")]
+        BusinessOP = 603,
+        /// <summary>
+        /// 业务流程-OP-自定义子流程 III
+        /// </summary>
+        [Description("业务流程-OP-自定义子流程")]
+        BusinessOPChild01 = 6031,
+        /// <summary>
+        /// 业务流程-OP-OP费用录入 III
+        /// </summary>
+        [Description("OP费用录入")]
+        BusinessOPChild02 = 6032,
+        #endregion
+        #region 商邀
+        /// <summary>
+        /// 业务流程-商邀 II
+        /// </summary>
+        [Description("业务流程-商邀")]
+        BusinessSY = 604,
+        /// <summary>
+        /// 业务流程-商邀-自定义子流程 III
+        /// </summary>
+        [Description("业务流程-商邀-自定义子流程")]
+        BusinessSYChild01 = 6041,
+        /// <summary>
+        /// 业务流程-商邀-商邀费用录入 III
+        /// </summary>
+        [Description("报批/商邀费用录入")]
+        BusinessSYChild02 = 6042,
+        #endregion
+        #region 其他
+        /// <summary>
+        /// 业务流程-其他 II
+        /// </summary>
+        [Description("业务流程-其他")]
+        BusinessQT = 605,
+        /// <summary>
+        /// 业务流程-商邀-自定义子流程 III
+        /// </summary>
+        [Description("业务流程-其他-自定义子流程")]
+        BusinessQTChild01 = 6051,
+        /// <summary>
+        /// 业务流程-商邀-商邀费用录入 III
+        /// </summary>
+        [Description("增减款项录入")]
+        BusinessQTChild02 = 6052,
+        #endregion
+
+        #endregion
+
+        #region 费用审批
 
         /// <summary>
-        /// 费用审批
+        /// 费用审批 I
         /// </summary>
         [Description("费用审批")]
         CostAudit = 7,
+        /// <summary>
+        /// /费用审批自定义子流程 II
+        /// </summary>
+        CostAuditChild01 = 701,
+        /// <summary>
+        /// 费用审批-机票费用审批 II
+        /// </summary>
+        [Description("机票费用审批")]
+        CostAuditChild02 = 702,
+        /// <summary>
+        /// 费用审批-酒店费用审批 II
+        /// </summary>
+        [Description("酒店费用审批")]
+        CostAuditChild03 = 703,
+        /// <summary>
+        /// 费用审批-OP费用审批 II
+        /// </summary>
+        [Description("OP费用审批")]
+        CostAuditChild04 = 704,
+        /// <summary>
+        /// 费用审批-商邀费用审批 II
+        /// </summary>
+        [Description("商邀费用审批")]
+        CostAuditChild05 = 705,
+        /// <summary>
+        /// 费用审批-增减款项审批 II
+        /// </summary>
+        [Description("增减款项审批")]
+        CostAuditChild06 = 706,
+
+        #endregion
+
+        #region 付款给供应商
 
         /// <summary>
-        /// 付款给供应商
+        /// 付款给供应商 I
         /// </summary>
         [Description("付款给供应商")]
         Pay = 8,
+        /// <summary>
+        /// 付款给供应商-自定义子流程 II
+        /// </summary>
+        PayChild01 = 801,
+        /// <summary>
+        /// 付款给供应商-OP费用付款 II
+        /// </summary>
+        [Description("OP费用付款")]
+        PayChild02 = 802,
+        /// <summary>
+        /// 付款给供应商-商邀费用付款 II
+        /// </summary>
+        [Description("商邀费用付款")]
+        PayChild03 = 803,
+        /// <summary>
+        /// 付款给供应商-增减款项付款 II
+        /// </summary>
+        [Description("增减款项付款")]
+        PayChild04 = 804,
+        #endregion
 
         /// <summary>
-        /// 出行事项会议
+        /// 出行事项会议 I
         /// </summary>
         [Description("出行事项会议")]
         Training = 9,
 
         /// <summary>
-        /// 送机
+        /// 送机 I
         /// </summary>
         [Description("送机")]
         DropOff = 10,
 
         /// <summary>
-        /// 接机
+        /// 接机 I
         /// </summary>
         [Description("接机")]
         PickUp = 11,
 
         /// <summary>
-        /// 收款
+        /// 收款 I
         /// </summary>
         [Description("收款")]
         Collect = 12,
 
         /// <summary>
-        /// 团组完成
+        /// 团组完成 I 
         /// </summary>
         [Description("团组完成")]
         Finish = 13,
 
         /// <summary>
-        /// 团组取消
+        /// 团组取消 I
         /// </summary>
         [Description("团组取消")]
         Cancel = 14,

+ 13 - 0
OASystem/OASystem.Domain/ViewModels/Resource/LocalGuideDataView.cs

@@ -0,0 +1,13 @@
+using OASystem.Domain.Entities.Resource;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.Resource
+{
+    public class LocalGuideDataView:Res_LocalGuideData
+    {
+    }
+}

+ 61 - 0
OASystem/OASystem.Domain/ViewModels/System/SetDataView.cs

@@ -30,4 +30,65 @@ namespace OASystem.Domain.ViewModels.System
         /// </summary>
         public string Name { get; set; }
     }
+
+
+
+    public class SetDataAndPageInfoView
+    {
+        /// <summary>
+        /// 模块id
+        /// </summary>
+        public int Modulid { get; set; }
+        /// <summary>
+        /// 分类名称
+        /// </summary>
+        public string ModulName { get; set; }
+        /// <summary>
+        /// setdatatype id
+        /// </summary>
+        public int STid { get; set; }
+        /// <summary>
+        /// 模块备注
+        /// </summary>
+        public string ModulRemark { get; set; }
+
+        /// <summary>
+        /// 页面id
+        /// </summary>
+        public int Pageid { get; set; }
+        
+        /// <summary>
+        /// 页面名称
+        /// </summary>
+        public string PageName { get; set; }
+
+        /// <summary>
+        /// 页面是否启用
+        /// </summary>
+        public int PageIsEnable { get; set; }
+
+       
+        public int PagePhoneIsEnable { get; set; }
+
+        /// <summary>
+        /// 页面Code
+        /// </summary>
+        public string SystemMenuCode { get; set; }
+
+        public string WebUrl { get; set; }
+
+        public string AndroidUrl { get; set; }
+
+        public string IosUrl { get; set; }
+
+        /// <summary>
+        /// 手机端图标
+        /// </summary>
+        public string Icon { get; set; }
+
+        /// <summary>
+        /// 页面备注
+        /// </summary>
+        public string PageRemark { get; set; }
+    }
 }

+ 19 - 10
OASystem/OASystem.Infrastructure/Repositories/BaseRepository.cs

@@ -132,6 +132,24 @@ namespace OASystem.Infrastructure.Repositories
             return _sqlSugar.Insertable(entity).ExecuteReturnIdentityAsync();
         }
 
+        /// <summary>
+        /// 删除单挑数据,加上删除者Id
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="id"></param>
+        /// <param name="DeleteUserId"></param>
+        /// <returns></returns>
+        public virtual async Task<bool> SoftDeleteByIdAsync<T>(string id, int DeleteUserId) where T : EntityBase, new()
+        {
+            var result = await _sqlSugar.Updateable<TEntity>().Where(a => a.Id.Equals(id)).SetColumns(a => new TEntity()
+            {
+                IsDel = 1,
+                DeleteUserId = DeleteUserId,
+                DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+            }).ExecuteCommandAsync();
+            return result > 0;
+        }
+
         #endregion
 
         public virtual Task<bool> AnyAsync(Expression<Func<TEntity, bool>> exp)
@@ -245,16 +263,7 @@ namespace OASystem.Infrastructure.Repositories
             }).ExecuteCommandAsync();
             return result > 0;
         }
-        public virtual async Task<bool> SoftDeleteByIdAsync<T>(string id,int DeleteUserId) where T : EntityBase, new()
-        {
-            var result = await _sqlSugar.Updateable<TEntity>().Where(a => a.Id.Equals(id)).SetColumns(a => new TEntity()
-            {
-                IsDel = 1,
-                DeleteUserId = DeleteUserId,
-                DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
-            }).ExecuteCommandAsync();
-            return result > 0;
-        }
+       
         public virtual async Task<bool> SoftDeleteAsync<T>(Expression<Func<TEntity, bool>> wherexp) where T : EntityBase, new()
         {
             var result = await _sqlSugar.Updateable<TEntity>().Where(wherexp).SetColumns(a => new TEntity()

+ 33 - 10
OASystem/OASystem.Infrastructure/Repositories/Groups/GrpScheduleRepository.cs

@@ -15,7 +15,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         {
         }
 
-        public string SetSqlWhere_GrpScheduleDto(Grp_ScheduleDto _dto)
+        public string SetSql_GrpScheduleDto(Grp_ScheduleDto _dto)
         {
             string sqlWhere = string.Empty;
 
@@ -35,7 +35,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 sqlWhere = r.Replace(sqlWhere, "Where", 1);
             }
 
-            return sqlWhere;
+            string sql = string.Format(@" Select s.Id,s.DiId,di.TeamName as DeleName,s.PrimaryStep,s.ExpectBeginDt,s.ExpectEndDt,s.Leader,s.Exception,u.CnName as LeaderName
+            From Grp_Schedule as s With(Nolock) Inner Join Grp_DelegationInfo as di With(Nolock) On s.DiId=di.Id
+            Inner Join Sys_Users as u With(Nolock) On s.Leader=u.Id
+            {0} ", sqlWhere);
+
+            return sql;
         }
 
         /// <summary>
@@ -47,18 +52,36 @@ namespace OASystem.Infrastructure.Repositories.Groups
         public async Task<Grp_ScheduleView> GetView_GrpSchedule(Grp_ScheduleDto _dto)
         {
             Grp_ScheduleView _view = null;
-
-            string sqlWhere = this.SetSqlWhere_GrpScheduleDto(_dto);
-            string sql = string.Format(@" Select s.Id,s.DiId,di.TeamName as DeleName,s.PrimaryStep,s.ExpectBeginDt,s.ExpectEndDt,s.Leader,s.Exception,u.CnName as LeaderName
-            From Grp_Schedule as s With(Nolock) Inner Join Grp_DelegationInfo as di With(Nolock) On s.DiId=di.Id
-            Inner Join Sys_Users as u With(Nolock) On s.Leader=u.Id
-            {0} ", sqlWhere);
-
+            string sql = this.SetSql_GrpScheduleDto(_dto);
             _view = await _sqlSugar.SqlQueryable<Grp_ScheduleView>(sql).FirstAsync();
-
             return _view;
         }
 
+        /// <summary>
+        /// 获取团组流程(列表分页)
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        public async Task<List<Grp_ScheduleView>> GetViewList_GrpSchedule(Grp_ScheduleDto _dto)
+        {
+            List<Grp_ScheduleView> _viewList = new List<Grp_ScheduleView>();
+            string sqlInner = this.SetSql_GrpScheduleDto(_dto);
+            string sql = string.Format(@" Select * From ( Select ROW_NUMBER() Over(order By Id desc) as RowNumber,* From ( {2} ) ) as tb Where tb.RowNumber Between {0} And {1} ", (((_dto.PageIndex > 0) ? (_dto.PageIndex - 1) : 0) * _dto.PageSize) + 1, (((_dto.PageIndex > 0) ? (_dto.PageIndex - 1) : 0) + 1) * _dto.PageSize, sqlInner);
+            _viewList = await _sqlSugar.SqlQueryable<Grp_ScheduleView>(sql).ToListAsync();
+            return _viewList;
+        }
+
+        public void bulkInsert<T>(List<T> list)
+        {
+            _sqlSugar.Insertable(list).UseParameter().ExecuteCommand();
+        }
+
+        public async Task<List<Grp_SchedulePersonInfo>> GetEntityList_SchedulePersonBySql(string sql)
+        {
+            List<Grp_SchedulePersonInfo> _list = new List<Grp_SchedulePersonInfo>();
+            _list = await _sqlSugar.SqlQueryable<Grp_SchedulePersonInfo>(sql).ToListAsync();
+            return _list;
+        }
 
     }
 }

+ 85 - 0
OASystem/OASystem.Infrastructure/Repositories/Resource/LocalGuideDataRepository.cs

@@ -0,0 +1,85 @@
+using AutoMapper;
+using OASystem.Domain;
+using OASystem.Domain.Dtos.Resource;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.Entities.Resource;
+using OASystem.Domain.ViewModels.Resource;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Infrastructure.Repositories.Resource
+{
+    public class LocalGuideDataRepository : BaseRepository<Res_LocalGuideData, LocalGuideDataView>
+    {
+        private readonly IMapper _mapper;
+        public LocalGuideDataRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
+        {
+            _mapper=mapper;
+        }
+        public async Task<Result> LocalGuideOperation(LocalGuideOperationDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            try
+            {
+                if (dto.Status == 1)//添加
+                {
+                    string selectSql = string.Format(@"select * from Res_LocalGuideData where UnitArea='{0}' and UnitName='{1}' and Contact='{2}' and ContactTel='{3}'"
+                                                       , dto.UnitArea, dto.UnitName, dto.Contact, dto.ContactTel);
+                    var LocalGuideData = await _sqlSugar.SqlQueryable<Res_LocalGuideData>(selectSql).FirstAsync();//查询是否存在
+                    if (LocalGuideData != null)
+                    {
+                         return result = new Result() { Code = -1, Msg = "该信息已存在,请勿重复添加!" };
+                         
+                    }
+                    else//不存在,可添加
+                    {
+                        Res_LocalGuideData _LocalGuideDat = _mapper.Map<Res_LocalGuideData>(dto);
+                        int id = await AddAsyncReturnId(_LocalGuideDat);
+                        if (id == 0)
+                        {
+                            return result = new Result() { Code = -1, Msg = "添加失败!" };
+
+                        }
+                         result = new Result() { Code = 0, Msg = "添加成功!", Data = new { Id = id } };
+                    }
+                }
+                else if(dto.Status == 2)//修改
+                {
+                    bool res = await UpdateAsync(a => a.Id == dto.Id, a => new Res_LocalGuideData
+                    {
+                        UnitArea = dto.UnitArea,
+                        UnitName = dto.UnitName,
+                        Address = dto.Address,
+                        Contact = dto.Contact,
+                        ContactTel = dto.ContactTel,
+                        ContactEmail = dto.ContactEmail,
+                        ContactFax = dto.ContactFax,
+                        OtherInfo = dto.OtherInfo,
+                        Score = dto.Score,
+                        SuitScore = dto.SuitScore,
+                        ServeScore = dto.ServeScore,
+                        TalkProScore = dto.TalkProScore,
+                        TimeScore = dto.TimeScore,
+                        FitScore = dto.FitScore,
+                        StrainScore = dto.StrainScore,
+                        LocalAndChineseScore = dto.LocalAndChineseScore,
+                        Remark = dto.Remark,
+                    });
+                    if (!res)
+                    {
+                        return result = new Result() { Code = -1, Msg = "修改失败!" };
+                    }
+                    result = new Result() { Code = 0, Msg = "修改成功!" };
+                }
+            }
+            catch (Exception ex)
+            {
+                return result = new Result() { Code = -2, Msg = "程序错误!" };
+            }
+            return result;
+        }
+    }
+}

+ 28 - 2
OASystem/OASystem.Infrastructure/Repositories/System/SetDataRepository.cs

@@ -18,11 +18,11 @@ namespace OASystem.Infrastructure.Repositories.System
         /// </summary>
         /// <param name="_SetData"></param>
         /// <returns></returns>
-        public async Task<Result> GetSySDefultModule(SetDataRepository _SetData)
+        public async Task<Result> GetSySDefultModule()
         {
             Result result = new Result();
             string sql = "select * from Sys_SetData where STid = 5 and isdel = 0";
-            var DBdata = await _SetData.GetListBySqlWithNolockAsync(sql);
+            var DBdata = await GetListBySqlWithNolockAsync(sql);
 
             if (DBdata == null || DBdata.Count == 0)
             {
@@ -70,5 +70,31 @@ namespace OASystem.Infrastructure.Repositories.System
             return result;
         }
 
+
+        public async Task<Result> GetSetDataAndPageInfoBySTId(int stId = 5)
+        {
+            Result result = new Result();
+            List<SetDataAndPageInfoView> ViewList = _sqlSugar.SqlQueryable<SetDataAndPageInfoView>($@"
+                select a.id as modulid,a.Name as modulName,a.STid,a.Remark as modulRemark,
+                b.Id as pageid, b.Name as pageName, b.IsEnable as PageIsEnable  ,b.phoneIsEnable as PagePhoneIsEnable,b.SystemMenuCode,b.webUrl,b.androidUrl,
+                b.iosUrl,b.icon ,b.Remark as PageRemark
+                from Sys_SetData a , Sys_SystemMenuPermission b where STid = {stId} 
+                and a.isdel = 0 and b.Mid = a.Id  and b.IsDel = 0
+            ").ToList();
+
+            result.Data = ViewList;
+            result.Code = 0;
+            result.Msg = "成功!";
+
+            if (ViewList == null || ViewList.Count == 0)
+            {
+                result.Msg = "无数据!";
+                result.Code = -1;
+            }
+
+            return result;
+        }
+        
+
     }
 }

+ 33 - 3
OASystem/_Doc/OA2023数据字典.docx

@@ -422,6 +422,36 @@ Null
 
 页面权限Code
 
+webUrl
+varchar(50)
+Null
+
+web页面路由
+
+AndroidUrl
+varchar(50)
+Null
+
+安卓页面路由
+
+IosUrl
+varchar(50)
+Null
+
+ios页面路由
+
+phoneIsEnable
+Int
+Null
+
+手机端是否启用
+
+Icon
+varchar(100)
+Null
+
+手机端图标
+
 
 6) 页面操作权限表:Sys_PageFunctionPermission (新增)
                                    字段名
@@ -601,7 +631,7 @@ TargetCountry
 varchar(50)
 Null
 
-目的地国家(去往)
+目的地国家
 
 Area
 varchar(50)
@@ -1412,13 +1442,13 @@ Null
                                  字段约束
                                  字段描述
                                     备注
-GrpDCId
+DiId
 Int
 Null
 
 团组表id
 
-CrmDCId
+DcId
 Int
 Null