yuanrf 1 mese fa
parent
commit
b9ae33b358
31 ha cambiato i file con 1627 aggiunte e 506 eliminazioni
  1. 3 3
      OASystem/OASystem.Api/Controllers/FinancialController.cs
  2. 653 241
      OASystem/OASystem.Api/Controllers/GroupsController.cs
  3. 60 22
      OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs
  4. 4 2
      OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs
  5. 33 0
      OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Config.cs
  6. 38 3
      OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Library.cs
  7. 9 0
      OASystem/OASystem.Domain/Dtos/Groups/EnterExitCostDraftDto.cs
  8. 55 0
      OASystem/OASystem.Domain/Dtos/Groups/EnterExitCostDto.cs
  9. 15 0
      OASystem/OASystem.Domain/Dtos/Groups/GroupListDto.cs
  10. 15 0
      OASystem/OASystem.Domain/Dtos/Groups/GroupOrderPreInfoDtos.cs
  11. 2 0
      OASystem/OASystem.Domain/Dtos/PersonnelModule/TaskAllocationDto.cs
  12. 7 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_DelegationInfo.cs
  13. 6 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_EnterExitCost.cs
  14. 7 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_EnterExitCostDraft.cs
  15. 15 3
      OASystem/OASystem.Domain/Entities/Groups/Grp_NationalTravelFee.cs
  16. 1 1
      OASystem/OASystem.Domain/Entities/System/Sys_Cities.cs
  17. 27 0
      OASystem/OASystem.Domain/ViewModels/Groups/DelegationInfoView.cs
  18. 8 0
      OASystem/OASystem.Domain/ViewModels/Groups/EnterExitCostDraftView.cs
  19. 28 75
      OASystem/OASystem.Domain/ViewModels/Groups/EnterExitCostView.cs
  20. 89 27
      OASystem/OASystem.Domain/ViewModels/Groups/OrderPreInfoView.cs
  21. 3 1
      OASystem/OASystem.Domain/ViewModels/PersonnelModule/TaskAllocationView.cs
  22. 20 0
      OASystem/OASystem.Domain/ViewModels/System/SetDataView.cs
  23. 50 40
      OASystem/OASystem.Infrastructure/Repositories/Financial/DailyFeePaymentRepository.cs
  24. 1 1
      OASystem/OASystem.Infrastructure/Repositories/Groups/CarTouristGuideGroundRepository.cs
  25. 199 18
      OASystem/OASystem.Infrastructure/Repositories/Groups/DelegationInfoRepository.cs
  26. 61 5
      OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostDraftRepository.cs
  27. 13 14
      OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostQuoteRepository.cs
  28. 61 16
      OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostRepository.cs
  29. 105 26
      OASystem/OASystem.Infrastructure/Repositories/Groups/GroupOrderPreInfoRepository.cs
  30. 26 8
      OASystem/OASystem.Infrastructure/Repositories/PersonnelModule/TaskAllocationRepository.cs
  31. 13 0
      OASystem/OASystem.Infrastructure/Tools/CommonFun.cs

+ 3 - 3
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -100,7 +100,6 @@ namespace OASystem.API.Controllers
             return Ok(JsonView(data));
         }
 
-
         /// <summary>
         /// 获取日付申请 基础数据源 - 转账表识 
         /// </summary>
@@ -4164,8 +4163,9 @@ Group by PriceType ", dto.diId);
 
                     if (x.VisitPNumber > 0 && x.PriceDetailType != 1088)
                     {
-                        decimal.TryParse(x.FoodCost, out decimal cost);
-                        cost /= 2;
+                        decimal cost = x.FoodCost;
+                        //decimal.TryParse(x.FoodCost, out decimal cost);
+                         cost /= 2;
 
                         decimal oldPrice = costPirce;
                         costPirce *= x.Rate; //转换币种

File diff suppressed because it is too large
+ 653 - 241
OASystem/OASystem.Api/Controllers/GroupsController.cs


+ 60 - 22
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -1,10 +1,12 @@
 using Aspose.Cells;
 using FluentValidation;
 using Microsoft.AspNetCore.SignalR;
+using NPOI.OpenXmlFormats.Dml.Chart;
 using OASystem.API.OAMethodLib;
 using OASystem.API.OAMethodLib.Hub.HubClients;
 using OASystem.API.OAMethodLib.Hub.Hubs;
 using OASystem.API.OAMethodLib.QiYeWeChatAPI;
+using OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice;
 using OASystem.API.OAMethodLib.Quartz.Business;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Dtos.PersonnelModule;
@@ -19,6 +21,7 @@ using System.Data;
 using System.Diagnostics;
 using System.Globalization;
 using static OASystem.API.OAMethodLib.JWTHelper;
+using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
 
 namespace OASystem.API.Controllers
 {
@@ -1033,6 +1036,13 @@ namespace OASystem.API.Controllers
             #endregion
 
             #endregion
+            var groupNames = dto.GroupNames;
+            var groupArr = Array.Empty<string>();
+            if (!string.IsNullOrEmpty(groupNames))
+            {
+                groupArr = groupNames.Split(',').Select(part => part.Trim()).ToArray();
+            }
+
 
             string whereSql = "" ,currUserName = "";
             #region 分页参数处理
@@ -1041,11 +1051,11 @@ namespace OASystem.API.Controllers
             if (dto.Type == 0) whereSql = "";
             else if (dto.Type == 1) //1 由我指派
             {
-                whereSql = string.Format(@" And ta.CreateUserId = {0} Or (Select COUNT(1) As PeopleNumber From Pm_TaskRelevanceUser Where IsDel = 0 And ta.Id = TAId And UserId = {0}) > 0", dto.UserId);
+                //whereSql = string.Format(@" And ta.CreateUserId = {0} Or (Select COUNT(1) As PeopleNumber From Pm_TaskRelevanceUser Where IsDel = 0 And ta.Id = TAId And UserId = {0}) > 0", dto.UserId);
             }
             else if (dto.Type == 2)// 2 指派给我
             {
-                whereSql = string.Format(@" And (Select COUNT(1) As PeopleNumber From Pm_TaskRelevanceUser Where IsDel = 0 And ta.Id = TAId And UserId = {0}) > 0", dto.UserId);
+                //whereSql = string.Format(@" And (Select COUNT(1) As PeopleNumber From Pm_TaskRelevanceUser Where IsDel = 0 And ta.Id = TAId And UserId = {0}) > 0", dto.UserId);
             }
             //状态 -1 全部 0 未开始 1 进行中 2 待审核 3 未完成 4 已完成
             if (dto.Status == -1) //全部
@@ -1079,6 +1089,7 @@ From
     Select
       ta.Id,
       ta.TaskName,
+      ta.TaskContent,
       ta.TaskPriority,
       d.DepName,
       di.TeamName,
@@ -1137,7 +1148,9 @@ WHERE
   OR [Participant] like '%{2}%' ", whereSql, currUserName, currUserName);
 
             RefAsync<int> total = 0;
-            var _view = await _taskAllocationRep._sqlSugar.SqlQueryable<TaskListView>(pageSql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync
+            var _view = await _sqlSugar.SqlQueryable<TaskListView>(pageSql)
+                .WhereIF(groupArr.Any(), x => groupArr.Contains(x.TeamName))
+                .ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync
 
             List<int> taskIds = new List<int>();
             taskIds = _view.Select(it => it.Id).ToList();
@@ -1148,7 +1161,7 @@ WHERE
                                                   Left Join Sys_Users u On tau.UserId = u.Id
                                                   Where tau.IsDel = 0");
 
-            var taskerData = _taskAllocationRep._sqlSugar.SqlQueryable<TaskerDetailsView>(taskerSql).Where(it => taskIds.Contains(it.TAId)).ToList();
+            var taskerData = _sqlSugar.SqlQueryable<TaskerDetailsView>(taskerSql).Where(it => taskIds.Contains(it.TAId)).ToList();
             foreach (var item in _view)
             {
                 //任务接收者显示自己任务状态
@@ -1159,11 +1172,9 @@ WHERE
                 }
                 else
                 {
-                    item.TaskerDetails = taskerData.Where(it => it.TAId == item.Id).ToList();
+                    item.TaskerDetails = taskerData.Where(it => it.TAId == item.Id).ToArray();
                 }
 
-
-
                 ////处理任务总状态 And 任务人状态
                 //var taskerStatusData = taskerData.Where(it => it.TAId == item.Id && it.TaskCreateUserId != dto.UserId && it.UserId == dto.UserId).FirstOrDefault();
                 //if (taskerStatusData != null)
@@ -1251,6 +1262,10 @@ WHERE
                     string content = $"[{dto.TaskName}] 任务新建成功,请前往任务页面查看详情!";
 
                     await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, dto.UserIds);
+
+                    var userIds = dto.UserIds.Select(x => x.ToString()).ToList();
+
+                    await AppNoticeLibrary.SendUserMsg_Task_ToUser(userIds, dto.DiId, title, dto.UserId);
                 }
 
                 return Ok(JsonView(true, "操作成功!"));
@@ -1304,16 +1319,19 @@ WHERE
                     string title_createUser = $"[{taskData.TaskName}] 进度更新!";
                     string conten_createUser = $"[{UserName}] 已开始任务,请注意该工作人员任务进度!";
 
-                    await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title_createUser, conten_createUser, new List<int>() { taskData.CreateUserId }); //创建人发送消息
+                    //创建人发送消息
+                    List<int> createUserIds = new List<int>() { taskData.CreateUserId };
+                    await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title_createUser, conten_createUser, createUserIds); 
 
+                    await AppNoticeLibrary.SendUserMsg_Task_ToUser(createUserIds.Select(x => x.ToString()).ToList(), taskData.DiId, conten_createUser, taskData.CreateUserId);
+
+                    //其他人发送消息
                     string title = $"[{taskData.TaskName}] 进度更新!";
                     string content = $"[{UserName}] 已开始任务.若需查看,请前往任务页面查看详情!";
 
-                    await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, taskUserIds); //其他人发送消息
-
-
-                    string content1 = $"任务已开始,请在规定时间完成!若需查看,请前往任务页面查看详情!";
-                    await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content1, new List<int>() { dto.UserId }); //设置任务人 发送消息
+                    await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, taskUserIds); 
+                    
+                    await AppNoticeLibrary.SendUserMsg_Task_ToUser(taskUserIds.Select(x => x.ToString()).ToList(), taskData.DiId, content, dto.UserId);
 
                 }
 
@@ -1336,31 +1354,33 @@ WHERE
             if (_view.Code == 0)
             {
                 //发送消息
-                var taskData = _taskAllocationRep._sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.Id == dto.Id).First();
+                var taskData = _sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.Id == dto.Id).First();
                 if (taskData != null)
                 {
-                    var taskUserIds = _taskAllocationRep._sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.TAId == dto.Id).Select(it => it.UserId).ToList();
-                    if (taskUserIds.Count > 0)
-                    {
-                        taskUserIds.Remove(dto.UserId);
-                    }
-
-                    var UserName = _taskAllocationRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.Id == dto.UserId).Select(it => it.CnName).First();
+                    var taskUserIds =_sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.TAId == dto.Id).Select(it => it.UserId).Distinct().ToList();
+                    var UserName = _sqlSugar.Queryable<Sys_Users>().Where(it => it.Id == dto.UserId).Select(it => it.CnName).First();
 
                     string title_createUser = $"[{taskData.TaskName}] 进度更新!";
                     string conten_createUser = $"[{UserName}] 已完成任务,请前往任务页面进行审核操作!";
 
                     await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title_createUser, conten_createUser, new List<int>() { taskData.CreateUserId }); //创建人发送消息
 
+                    await AppNoticeLibrary.SendUserMsg_Task_ToUser(new List<string>() { taskData.CreateUserId.ToString() }, taskData.DiId, conten_createUser, dto.UserId);
+
                     string title = $"[{taskData.TaskName}] 进度更新!";
                     string content = $"[{UserName}] 已完成任务,请注意在规定时间内完成任务.若需查看,请前往任务页面查看详情!";
+                    string yw_content = $"[{UserName}] 已完成任务,请注意在规定时间内完成任务!";
 
                     await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, taskUserIds); //其他人发送消息
 
+                    await AppNoticeLibrary.SendUserMsg_Task_ToUser(taskUserIds.Select(x => x.ToString()).ToList(), taskData.DiId, yw_content, dto.UserId);
 
                     string content1 = $"任务已完成,等待任务发布人审核!若需查看,请前往任务页面查看详情!";
+                    string yw_content1 = $"任务已完成,等待任务发布人审核!";
                     await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content1, new List<int>() { dto.UserId }); //设置任务人 发送消息
 
+                    await AppNoticeLibrary.SendUserMsg_Task_ToUser(new List<string>() { dto.UserId.ToString() }, taskData.DiId, yw_content1, dto.UserId);
+
                 }
 
                 return Ok(JsonView(true, "操作成功!"));
@@ -1394,11 +1414,17 @@ WHERE
 
                         string title = $"[{taskData.TaskName}] 进度更新!";
                         string conten_createUser = $"[{UserName}] 已知晓任务.若需查看,请前往任务页面查看详情!";
+                        string qw_conten_createUser = $"[{UserName}] 已知晓任务!";
 
                         await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, conten_createUser, new List<int>() { taskData.CreateUserId }); //创建人发送消息
 
+                        await AppNoticeLibrary.SendUserMsg_Task_ToUser(new List<string>() { taskData.CreateUserId.ToString() }, taskData.DiId, qw_conten_createUser, taskData.CreateUserId);
+
+
                         string content = $"请注意任务完成时间!若需查看,请前往任务页面查看详情!";
+                        string yw_content = $"请注意任务完成时间!";
                         await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, new List<int>() { taskUserData.UserId }); //设置任务人 发送消息
+                                                                                                                                                                                   await AppNoticeLibrary.SendUserMsg_Task_ToUser(new List<string>() { taskUserData.UserId.ToString() }, taskData.DiId, yw_content, taskUserData.UserId);
 
                     }
                 }
@@ -1431,8 +1457,11 @@ WHERE
                     {
                         string title = $"[{taskData.TaskName}] 进度更新!";
                         string content = $"任务已完成!若需查看,请前往任务页面查看详情!";
+                        string yw_content = $"任务已完成!";
                         await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, new List<int>() { taskUserData.UserId }); //设置任务人 发送消息
 
+                        await AppNoticeLibrary.SendUserMsg_Task_ToUser(new List<string>() { taskUserData.UserId.ToString() }, taskData.DiId, yw_content, taskUserData.UserId);
+
                     }
                 }
 
@@ -1464,7 +1493,9 @@ WHERE
                     {
                         string title = $"[{taskData.TaskName}] 进度更新!";
                         string content = $"任务未完成!若需查看,请前往任务页面查看详情!";
+                        string yw_content = $"任务未完成!";
                         await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, new List<int>() { taskUserData.UserId }); //设置任务人 发送消息
+                        await AppNoticeLibrary.SendUserMsg_Task_ToUser(new List<string>() { taskUserData.UserId.ToString() }, taskData.DiId, yw_content, taskUserData.UserId);
 
                     }
                 }
@@ -1592,8 +1623,12 @@ WHERE
                     {
                         string title = $"[{taskData.TaskName}] 进度更新!";
                         string content = $"任务评分已完成!若需查看,请前往任务页面查看详情!";
+                        string yw_content = $"任务评分已完成!";
                         await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, new List<int>() { taskUserData.UserId }); //设置任务人 发送消息
 
+
+                        await AppNoticeLibrary.SendUserMsg_Task_ToUser(new List<string>() { taskUserData.UserId.ToString() }, taskData.DiId, yw_content, taskUserData.UserId);
+
                     }
                 }
 
@@ -1637,11 +1672,13 @@ WHERE
                     var taskUserIds = _taskAllocationRep._sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.Id == dto.Id).Select(it => it.UserId).ToList();
                     taskUserIds.Add(taskData.CreateUserId);
 
-
                     string title = $"[{taskData.TaskName}] 进度更新!";
                     string content = $"任务已终止!若需查看,请前往任务页面查看详情!";
+                    string yw_content = $"[{taskData.TaskName}]任务已终止!";
                     await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, taskUserIds); //设置任务人 发送消息
 
+                    await AppNoticeLibrary.SendUserMsg_Task_ToUser(taskUserIds.Select(x => x.ToString()).ToList(), taskData.DiId, yw_content, taskData.CreateUserId);
+
                 }
 
                 return Ok(JsonView(true, "操作成功!"));
@@ -2109,6 +2146,7 @@ WHERE
         /// </summary>
         /// <param name="userid"></param>
         /// <param name="date"></param>
+        /// <param name="loginUser"></param>
         /// <returns></returns>
         [HttpGet]
         public IActionResult GetPerformanceList(int userid,string date, int loginUser)

+ 4 - 2
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -4006,8 +4006,10 @@ namespace OASystem.API.OAMethodLib
                     {
                         decimal rate1 = Convert.ToDecimal(rateInfo.FSellPri) / 100.00M;
 
-                        if (rateInfo.Name.Equals("日元")) rate1 *= 1.3700M; //rate1 = rate1 * 1;
-                        else rate1 *= 1.035M;
+                        //if (rateInfo.Name.Equals("日元")) rate1 *= 1.3700M; //rate1 = rate1 * 1;
+                        //else rate1 *= 1.035M;
+
+                        rate1 *= 1.035M;
 
                         item.Rate = rate1.TruncDecimals(4) + 0.01M;
                     }

+ 33 - 0
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Config.cs

@@ -547,11 +547,44 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
 
             return result;
         }
+
+        /// <summary>
+        /// 任务创建推送给归属人
+        /// </summary>
+        /// <returns></returns>
+        public static string TaskAssignment_Create_ToUser(TaskAssignment_Create_ToUserModel dto)
+        {
+            string result = string.Format(@" `任务分配通知` 
+
+>团组:<font color='info'>{0}</font>  
+
+<font color='info'>{1}</font>
+
+>操作人员:{2}
+>操作时间:<font color='comment'>{3}</font> 
+
+[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/) 
+
+ ", dto.GroupName, dto.Title, dto.CreateUser, dto.RefreshDate);
+
+            return result;
+        }
+
     }
 
 
     #region 实体类
 
+    public class TaskAssignment_Create_ToUserModel
+    {
+        public string GroupName { get; set; }
+
+        public string Title { get; set; }
+        public string RefreshDate { get; set; }
+
+        public string CreateUser { get; set; }
+    }
+
     public class GroupShare_ToGMModel : GroupShare_ToUserModel
     {
         public string CreateUser { get; set; }

+ 38 - 3
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Library.cs

@@ -880,7 +880,6 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
 
         #endregion
 
-
         #region 费用保存发送消息
         #region 三公费用更改通知
 
@@ -1043,8 +1042,6 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
 
         #endregion
 
-
-
         #region 成本通知
 
         /// <summary>
@@ -1147,6 +1144,44 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
 
         #endregion
 
+        #region 任务通知
+
+        /// <summary>
+        /// 任务通知
+        /// </summary>
+        /// <param name="userIds"></param>
+        /// <param name="groupId"></param>
+        /// <param name="title"></param>
+        /// <param name="currUserId"></param>
+        /// <returns></returns>
+        public static async Task<bool> SendUserMsg_Task_ToUser(List<string> userIds, int groupId, string title, int currUserId)
+        {
+            List<string> qwUserIdList = GetQiyeChatUserIdList(userIds);
+
+            if (qwUserIdList.Any())
+            {
+                var groupName = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.IsDel == 0 && s.Id == groupId).First()?.TeamName ?? "未选择";
+                var userName = _grpDeleRep.Query<Sys_Users>(s => s.IsDel == 0 && s.Id == currUserId).First()?.CnName ?? "Unknown";
+                var model = new TaskAssignment_Create_ToUserModel()
+                {
+                    GroupName = groupName,
+                    Title = title,
+                    CreateUser = userName,
+                    RefreshDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm")
+                };
+
+                ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.TaskAssignment_Create_ToUser(model));
+                if (result.errcode != 0)
+                {
+                    //抄送日志 
+                    return false;
+                }
+            }
+
+            return true;
+        }
+        #endregion
+
         #region Helper
 
         private static string getClientNameStr(List<SimplClientInfo> list, string origin)

+ 9 - 0
OASystem/OASystem.Domain/Dtos/Groups/EnterExitCostDraftDto.cs

@@ -44,6 +44,11 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public int Id { get; set; }
 
+        /// <summary>
+        /// 省份归属Id
+        /// </summary>
+        public int ProvinceId { get; set; } = 122;
+
         /// <summary>
         /// 草稿名称
         /// </summary>
@@ -265,6 +270,10 @@ namespace OASystem.Domain.Dtos.Groups
 
     }
 
+    public class EnterExitCostDraftDataSourceDto : PortDtoBase
+    {
+        public int ProvinceId { get; set; }
+    }
     public class EnterExitCostDraftCorrelationTipsDto : PortDtoBase { }
 
     public class EnterExitCostDraftVisaTipsDto : PortDtoBase {

+ 55 - 0
OASystem/OASystem.Domain/Dtos/Groups/EnterExitCostDto.cs

@@ -11,6 +11,11 @@ namespace OASystem.Domain.Dtos.Groups
     {
     }
 
+    public class EnterExitCostDataSourceDto : PortDtoBase
+    {
+        //public int ProvinceId { get; set; } = 1408;
+    }
+
     /// <summary>
     /// 出入境费用详情 Dto
     /// </summary>
@@ -59,6 +64,11 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public int Id { get; set; }
 
+        ///// <summary>
+        ///// 省份Id
+        ///// </summary>
+        //public int ProvinceId { get; set; }
+
         /// <summary>
         /// 团组Id
         /// </summary>
@@ -336,6 +346,11 @@ namespace OASystem.Domain.Dtos.Groups
     /// </summary>
     public class NationalTravelFeePageDto : DtoBase
     {
+        /// <summary>
+        /// 省份归属
+        /// </summary>
+        public int ProvinceId { get; set; } = 1408;
+
         /// <summary>
         /// 国家
         /// </summary>
@@ -371,6 +386,12 @@ namespace OASystem.Domain.Dtos.Groups
     public class EnterExitCostSubItemDelDto : DelBaseDto
     { }
 
+
+    public class NationalTravelFeeDataDto : PortDtoBase
+    {
+        public int ProvinceId { get; set; } = 122; //默认四川
+    }
+
     /// <summary>
     /// 团组模块 - 出入境国家费用标准 - Del
     /// </summary>
@@ -395,6 +416,11 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public int UserId { get; set; }
 
+        /// <summary>
+        /// 身份归属Id
+        /// </summary>
+        public int ProvinceId { get; set; }
+
         /// <summary>
         /// 洲别
         /// </summary>
@@ -431,6 +457,11 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public decimal? PublicCost { get; set; } = 0;
 
+        /// <summary>
+        /// 培训费
+        /// </summary>
+        public decimal TrainCost { get; set; } = 0;
+
         /// <summary>
         /// 备注
         /// </summary>
@@ -441,6 +472,14 @@ namespace OASystem.Domain.Dtos.Groups
 
     #region Mobile Request Dto
 
+
+    public class EnterExitCostMobileDataSourceDto : PortDtoBase
+    {
+        /// <summary>
+        ///  归属省份Id
+        /// </summary>
+        public int ProvinceId { get; set; } = 1408;
+    }
     public class PostEnterExitCostMobileGroupDataDto : DtoBase
     {
 
@@ -477,6 +516,11 @@ namespace OASystem.Domain.Dtos.Groups
 
     public class PostNationalTravelFeeMobileDataDto :DtoBase
     {
+        /// <summary>
+        /// 归属省份Id
+        /// </summary>
+        public int ProvinceId { get; set; } = 122;//默认四川
+
         /// <summary>
         /// 搜索条件
         /// </summary>
@@ -504,6 +548,8 @@ namespace OASystem.Domain.Dtos.Groups
 
         public int Id { get; set; }
 
+        //public int ProvinceId { get; set; } = 122;
+
         public int DiId { get; set; }
 
         public int CurrUserId { get; set; }
@@ -698,6 +744,7 @@ namespace OASystem.Domain.Dtos.Groups
         public int PortType { get; set; }
         public int DiId { get; set; }
 
+
         public int CurrUserId { get; set; }
 
         /// <summary>
@@ -836,6 +883,11 @@ namespace OASystem.Domain.Dtos.Groups
         public string DraftName { get; set; }
     }
 
+
+    public class EnterExitCostDraftMobileDataSourceDto : PortDtoBase
+    {
+        public int ProvinceId { get; set; }
+    }
     public class PostEnterExitCostDraftMobileGroupDataDto : DtoBase
     {
 
@@ -873,6 +925,7 @@ namespace OASystem.Domain.Dtos.Groups
 
     public class EnterExitCostDraftMobileCreateDto
     {
+        public int ProvinceId { get; set; }
         public string DraftName { get; set; }
         public int CurrUserId { get; set; }
     }
@@ -884,6 +937,7 @@ namespace OASystem.Domain.Dtos.Groups
 
         public int DraftId { get; set; }
 
+        public int ProvinceId { get; set; } = 122;
         public int CurrUserId { get; set; }
 
     }
@@ -902,6 +956,7 @@ namespace OASystem.Domain.Dtos.Groups
         public int CurrUserId { get; set; }
     }
 
+    public class EnterExitCostDraftMobileOpProvDto : PostEnterExitCostDraftMobileUpdateDtoBase { }
     public class PostEnterExitCostDraftMobileFeeRateOpDto : PostEnterExitCostDraftMobileUpdateDtoBase
     {
         /// <summary>

+ 15 - 0
OASystem/OASystem.Domain/Dtos/Groups/GroupListDto.cs

@@ -1,5 +1,6 @@
 using FluentValidation;
 using Newtonsoft.Json;
+using OASystem.Domain.ViewModels;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -16,6 +17,12 @@ namespace OASystem.Domain.Dtos.Groups
     {
     }
 
+    public class GroupProvCityBasicSourceDto : DtoBase
+    {
+        public string Search { get; set; }
+    }
+
+
     /// <summary>
     /// 获取团组列表 Page 请求实体类
     /// </summary>
@@ -82,6 +89,11 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public int Id { get; set; }
 
+        /// <summary>
+        /// 城市类型Id
+        /// Sys_Cities 
+        /// </summary>
+        public int CityId { get; set; }
         /// <summary>
         /// 用户Id
         /// </summary>
@@ -396,6 +408,9 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public int Id { get; set; }
 
+        public int CityId { get; set; }
+        public string CityName { get; set; }
+
         /// <summary>
         /// 用户Id
         /// </summary>

+ 15 - 0
OASystem/OASystem.Domain/Dtos/Groups/GroupOrderPreInfoDtos.cs

@@ -15,4 +15,19 @@ namespace OASystem.Domain.Dtos.Groups
     {
         public int CurrUserId { get; set; }
     }
+    public class GroupOrderPreInfoDelDto
+    {
+        public int Id { get; set; }
+        public int CurrUserId { get; set; }
+    }
+
+    public class GroupOrderPreInfoListDto : DtoBase
+    {
+        public string Search { get; set; }
+    }
+    public class GroupOrderPreInfoDto
+    {
+        public int Id { get; set; }
+        public int TempId { get; set; } = 1404;
+    }
 }

+ 2 - 0
OASystem/OASystem.Domain/Dtos/PersonnelModule/TaskAllocationDto.cs

@@ -45,6 +45,8 @@ namespace OASystem.Domain.Dtos.PersonnelModule
         /// 任务名称
         /// </summary>
         public string? TaskName { get; set; }
+
+        public string GroupNames { get; set; }
     }
 
     /// <summary>

+ 7 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_DelegationInfo.cs

@@ -12,6 +12,13 @@ namespace OASystem.Domain.Entities.Groups
     [SugarTable("Grp_DelegationInfo")]
     public class Grp_DelegationInfo:EntityBase
     {
+        /// <summary>
+        /// 城市类型Id
+        /// Sys_Cities 
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int CityId { get; set; }
+
         /// <summary>
         /// 销售报价号
         /// </summary>

+ 6 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_EnterExitCost.cs

@@ -13,6 +13,12 @@ namespace OASystem.Domain.Entities.Groups
     [SugarTable("Grp_EnterExitCost")]
     public class Grp_EnterExitCost : EntityBase
     {
+        /// <summary>
+        /// 归属省份Id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int ProvinceId { get; set; }
+
         /// <summary>
         /// 团组Id
         /// </summary>

+ 7 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_EnterExitCostDraft.cs

@@ -12,6 +12,13 @@ namespace OASystem.Domain.Entities.Groups
     [SugarTable("Grp_EnterExitCostDraft")]
     public class Grp_EnterExitCostDraft : EntityBase
     {
+
+        /// <summary>
+        /// 归属省份Id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int ProvinceId { get; set; }
+
         /// <summary>
         /// 草稿名称
         /// </summary>

+ 15 - 3
OASystem/OASystem.Domain/Entities/Groups/Grp_NationalTravelFee.cs

@@ -13,6 +13,12 @@ namespace OASystem.Domain.Entities.Groups
     [SugarTable("Grp_NationalTravelFee")]
     public class Grp_NationalTravelFee : EntityBase
     {
+        /// <summary>
+        /// 归属省份
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int ProvinceId { get; set; }
+
         /// <summary>
         /// 洲别
         /// </summary>
@@ -42,19 +48,25 @@ namespace OASystem.Domain.Entities.Groups
         /// 住宿费
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
-        public string? RoomCost { get; set; }
+        public decimal RoomCost { get; set; }
 
         /// <summary>
         /// 伙食费
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
-        public string? FoodCost { get; set; }
+        public decimal FoodCost { get; set; }
 
         /// <summary>
         /// 公杂费 
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
-        public string? PublicCost { get; set; }
+        public decimal PublicCost { get; set; }
+
+        /// <summary>
+        /// 培训费 
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
+        public decimal TrainCost { get; set; }
 
         /// <summary>
         /// 最后更新人 

+ 1 - 1
OASystem/OASystem.Domain/Entities/System/Sys_Cities.cs

@@ -37,7 +37,7 @@ namespace OASystem.Domain.Entities.System
 
         /// <summary>
         /// 城市等级
-        /// 1 省份 2 城市 3 区县
+        /// 1 省份 2 城市 3 区县 4 直辖市
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public  int  Level { get; set; }

+ 27 - 0
OASystem/OASystem.Domain/ViewModels/Groups/DelegationInfoView.cs

@@ -231,6 +231,30 @@ namespace OASystem.Domain.ViewModels.Groups
 
     }
 
+
+    public class GroupCityBasicSourceView
+    {
+
+        public int Id { get; set; }
+
+        public string Name { get; set; }
+    }
+
+
+    public class CityTree
+    {
+        [SqlSugar.SugarColumn(IsPrimaryKey = true)]
+        public int Id { get; set; } //关联字段 默认是主键
+        public string Name_CN { get; set; }
+        public int ParentId { get; set; }//父级字段
+        public int Level { get; set; }
+        public int CountriesId { get; set; }
+        public int IsDel { get; set; }
+
+        [SqlSugar.SugarColumn(IsIgnore = true)]
+        public List<CityTree> Child { get; set; }
+    }
+
     /// <summary>
     /// 接团信息详情
     /// 返回视图
@@ -242,6 +266,9 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public int Id { get; set; }
 
+        public int CityId { get; set; }
+        public string CityName { get; set; }
+
         /// <summary>
         /// 销售报价号
         /// </summary>

+ 8 - 0
OASystem/OASystem.Domain/ViewModels/Groups/EnterExitCostDraftView.cs

@@ -34,6 +34,11 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public int Id { get; set; }
 
+        /// <summary>
+        /// 归属省份Id
+        /// </summary>
+        public int ProvinceId { get; set; } = 122;
+
         /// <summary>
         /// 团组Id
         /// </summary>
@@ -493,8 +498,11 @@ namespace OASystem.Domain.ViewModels.Groups
     {
         public int Id { get; set; }
 
+        public int ProvinceId { get; set; }
+
         public string DraftName { get; set; }
 
+
         public bool IsAssignPerm { get; set; }
 
         #region 汇率币种

+ 28 - 75
OASystem/OASystem.Domain/ViewModels/Groups/EnterExitCostView.cs

@@ -22,6 +22,8 @@ namespace OASystem.Domain.ViewModels.Groups
         public string GroupName { get; set; }
 
         public string IsNull { get; set; }
+
+        public int ProvinceId { get; set; } = 3505;
     }
 
     /// <summary>
@@ -56,6 +58,9 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public int Id { get; set; }
 
+        public int ProvinceId { get; set; }
+        public string ProvinceName { get; set; }
+
         /// <summary>
         /// 洲别
         /// </summary>
@@ -102,6 +107,11 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public decimal PublicCost { get; set; } = 0;
 
+        /// <summary>
+        /// 培训费
+        /// </summary>
+        public decimal TrainCost { get; set; }
+
         /// <summary>
         /// 最后更新人 Id 
         /// </summary>
@@ -121,81 +131,13 @@ namespace OASystem.Domain.ViewModels.Groups
     /// <summary>
     /// 出入境国家(城市)费用标准 Page Info  View
     /// </summary>
-    public class NationalTravelFeePageInfoView
+    public class NationalTravelFeePageInfoView : NationalTravelFeeInfoView
     {
         /// <summary>
         /// 行号
         /// </summary>
         public int RowNumber { get; set; }
 
-        public int Id { get; set; }
-
-        /// <summary>
-        /// 洲别
-        /// </summary>
-        public string? Continent { get; set; }
-
-        /// <summary>
-        /// 国家
-        /// </summary>
-        public string? Country { get; set; }
-
-        /// <summary>
-        /// 城市
-        /// </summary>
-        public string? City { get; set; }
-
-        /// <summary>
-        /// 币种
-        /// Sys_SetData STid=66
-        /// </summary>
-        public int Currency { get; set; }
-
-        /// <summary>
-        /// 币种code
-        /// </summary>
-        public string CurrencyCode { get; set; }
-
-        /// <summary>
-        /// 币种名称
-        /// </summary>
-        public string CurrencyName { get; set; }
-
-        /// <summary>
-        /// 住宿费
-        /// </summary>
-        public decimal RoomCost { get; set; }
-
-        /// <summary>
-        /// 伙食费
-        /// </summary>
-        public decimal FoodCost { get; set; }
-
-        /// <summary>
-        /// 公杂费 
-        /// </summary>
-        public decimal PublicCost { get; set; }
-
-        /// <summary>
-        /// 备注
-        /// </summary>
-        public string Remark { get; set; }
-
-        /// <summary>
-        /// 最后更新人 
-        /// </summary>
-        public int LastUpdateUserId { get; set; }
-
-        /// <summary>
-        /// 最后更新人
-        /// </summary>
-        public string LastUpdateUserName { get; set; }
-
-        /// <summary>
-        /// 最后更新时间 
-        /// </summary>
-        public DateTime? LastUpdateTime { get; set; } = DateTime.Now;
-
     }
 
     /// <summary>
@@ -249,6 +191,11 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public decimal PublicCost { get; set; }
 
+        /// <summary>
+        /// 培训费
+        /// </summary>
+        public decimal TrainCost { get; set; }
+
         /// <summary>
         /// 备注
         /// </summary>
@@ -299,6 +246,11 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public int Id { get; set; }
 
+        ///// <summary>
+        ///// 归属省份Id
+        ///// </summary>
+        //public int ProvinceId { get; set; }
+
         /// <summary>
         /// 团组Id
         /// </summary>
@@ -501,15 +453,12 @@ namespace OASystem.Domain.ViewModels.Groups
 
     #region 移动端
 
-    public class EnterExitCostMobileGroupView
+    public class EnterExitCostMobileGroupView : EnterExitCostGroupNameView
     {
-        public int Id { get; set; }
-        public string GroupName { get; set; }
-        public bool IsNull { get; set; }
-        public bool IsEdit { get; set; }
+        public new bool IsNull { get; set; }
         public bool IsView { get; set; }
-    }
 
+    }
 
     #region info View
     public class EnterExitCostMobileInfoView
@@ -902,8 +851,12 @@ namespace OASystem.Domain.ViewModels.Groups
     {
         public int Id { get; set; }
 
+        //public int ProvinceId { get; set; }
         public int DiId { get; set; }
 
+        public bool IsAssignPerm { get; set; }
+
+
         #region 汇率币种
 
         /// <summary>

+ 89 - 27
OASystem/OASystem.Domain/ViewModels/Groups/OrderPreInfoView.cs

@@ -1,13 +1,6 @@
 using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
 using OASystem.Domain.Entities.Groups;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.Json;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
+using System.Collections;
 
 namespace OASystem.Domain.ViewModels.Groups
 {
@@ -15,6 +8,44 @@ namespace OASystem.Domain.ViewModels.Groups
     {
     }
 
+    public class GroupOrderPreInfoListView
+    {
+        public int Id { get; set; }
+ 
+        public string Name { get; set; }
+
+        public string UnitName { get; set; }
+
+        public string VisitCountryVal { get; set; }
+
+        public string VisitCountrys
+        {
+            get
+            {
+                var val = "-";
+
+                try
+                {
+                    var countryArr = JsonConvert.DeserializeObject<string[]>(VisitCountryVal);
+
+                    if (countryArr.Any()) val = string.Join("、", countryArr);
+                }
+                catch (Exception) { }
+
+                return val;
+            }
+        }
+
+        public string VisitDays { get; set; } = "0";
+
+        public string VisiPpNum { get; set; } = "0";
+
+        public object[] VersionDetails { get; set; }
+
+        public string Operator { get; set; }
+        public DateTime OperationTime { get; set; }
+    }
+
     public class GrpOrderPreInfoView
     {
         public int Id { get; set; }
@@ -26,7 +57,6 @@ namespace OASystem.Domain.ViewModels.Groups
         public int GroupId { get; set; }
 
         public GrpOrderPreItemView[] Items { get; set; }
-
     }
 
     public class GrpOrderPreItemView
@@ -41,6 +71,7 @@ namespace OASystem.Domain.ViewModels.Groups
         public string OriginVal { get; set; }
 
         private object _newValue;
+
         public object NewValue
         {
             get
@@ -49,44 +80,75 @@ namespace OASystem.Domain.ViewModels.Groups
 
                 if (FieldTypeName.Equals("文本"))
                 {
+                    if (_newValue != null)
+                    {
+                        OriginVal = _newValue.ToString();
+                    }
+
+                    if (OriginVal.Equals("-")) return _newValue;
+
                     return OriginVal;
                 }
                 else if (FieldTypeName.Equals("搜索框"))
                 {
-
-                    var val = Array.Empty<string>();
-
-                    string regexPattern = @"^\s*\{[\s\S]*\}\s*$";
-                    bool isValid = Regex.IsMatch(OriginVal, regexPattern);
-
-                    try
+                    if (_newValue != null)
                     {
-                        if (isValid)
+                        if (_newValue is Array)
                         {
-                            val = JsonConvert.DeserializeObject<string[]>(OriginVal);
+                            return (Array)_newValue;
                         }
+                        else if (_newValue is string[])
+                        {
+                            return (string[])_newValue;
+                        }
+                        else if (_newValue is IEnumerable)
+                        {
+                            return ((IEnumerable)_newValue).Cast<object>().Select(x => x.ToString()).ToArray();
+                        }
+                        else
+                        {
+                            return _newValue;
+                        }
+                    }
 
-                        return val;
-
+                    var val = Array.Empty<string>();
+                    try
+                    {
+                        return JsonConvert.DeserializeObject<string[]>(OriginVal);
                     }
                     catch (Exception)
                     {
-
                         return val;
                     }
-
-
                 }
                 else if (FieldTypeName.Equals("下拉选择框") || FieldTypeName.Equals("复选框") || FieldTypeName.Equals("数字"))
                 {
-                    int.TryParse(OriginVal, out int val);
-                    OriginVal = val.ToString();
-                    return val;
+                    var val = 0;
+                    if (_newValue != null)
+                    {
+                        int.TryParse(_newValue.ToString(), out int val1);
+                        OriginVal = val1.ToString();
+                        val = val1;
+                    }
+                    else
+                    {
+                        int.TryParse(OriginVal, out int val2);
+                        OriginVal = val2.ToString();
+                        val = val2;
+                    }
+
+                    return OriginVal;
                 }
                 else if (FieldTypeName.Equals("单选按钮"))
                 {
                     var val = "无";
-                    if (OriginVal.ToUpper().Equals("TRUE") || OriginVal.Equals("有")) val = "有";
+                    if (OriginVal.Equals("有")) val = "有";
+
+                    if (_newValue != null)
+                    {
+                        if (_newValue.ToString().Equals("有")) val = "有";
+                    }
+
                     OriginVal = val;
                     return val;
                 }

+ 3 - 1
OASystem/OASystem.Domain/ViewModels/PersonnelModule/TaskAllocationView.cs

@@ -129,6 +129,8 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// </summary>
         public string? TaskName { get; set; }
 
+        public string TaskContent { get; set; }
+
         /// <summary>
         /// 任务等级
         /// </summary>
@@ -178,7 +180,7 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// </summary>
         public string? Consummator { get; set; }
 
-        public List<TaskerDetailsView>? TaskerDetails { get; set; }
+        public TaskerDetailsView[] TaskerDetails { get; set; } = Array.Empty<TaskerDetailsView>();
     }
 
     /// <summary>

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

@@ -46,6 +46,18 @@ namespace OASystem.Domain.ViewModels.System
         }
     }
 
+
+    public class EecSetDataInfoView 
+    {
+        public int ParentId { get; set; }
+
+        public int Id { get; set; }
+        /// <summary>
+        /// 分类名称
+        /// </summary>
+        public string Name { get; set; }
+    }
+
     /// <summary>
     /// 卡类型数据data
     /// </summary>
@@ -220,4 +232,12 @@ namespace OASystem.Domain.ViewModels.System
         public string StName { get; set; }
         public string CnName { get;set; }
     }
+
+    public class SetDataSortView
+    {
+        public int Id { get; set; }
+        public string Name { get; set; }
+
+        public int Index { get; set; }
+    }
 }

+ 50 - 40
OASystem/OASystem.Infrastructure/Repositories/Financial/DailyFeePaymentRepository.cs

@@ -26,8 +26,19 @@ namespace OASystem.Infrastructure.Repositories.Financial
         private readonly System.UsersRepository _UsersRep;
         private readonly System.CompanyRepository _CompanyRep;
 
-        public DailyFeePaymentRepository(SqlSugarClient sqlSugar, IMapper mapper, System.SetDataTypeRepository setDataTypeRep,
-            UsersRepository usersRep, CompanyRepository companyRep)
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="sqlSugar"></param>
+        /// <param name="mapper"></param>
+        /// <param name="setDataTypeRep"></param>
+        /// <param name="usersRep"></param>
+        /// <param name="companyRep"></param>
+        public DailyFeePaymentRepository(SqlSugarClient sqlSugar, 
+            IMapper mapper, 
+            System.SetDataTypeRepository setDataTypeRep,
+            UsersRepository usersRep, 
+            CompanyRepository companyRep)
             : base(sqlSugar)
         {
             this._mapper = mapper;
@@ -365,49 +376,48 @@ namespace OASystem.Infrastructure.Repositories.Financial
         {
             Result result = new Result() { Code = -2 };
             _sqlSugar.BeginTran();
-            try
-            {
-                var _fee = _mapper.Map<Fin_DailyFeePayment>(dto);
-                _fee.CreateUserId = dto.UserId;
 
-                /*
-                 * 2024-10-29
-                 * 各部门基础固定费用明细”里的费用数据新增后,财务和总经理审核都默认直接通过isAudit=1),并且可编辑,如果ispay=1的话将不可编辑
-                 */
-                var priceTypeInfo = await _sqlSugar.Queryable<Sys_SetData>().Where(x => x.IsDel == 0 && x.Id == dto.PriceTypeId).FirstAsync();
-                if (priceTypeInfo != null && priceTypeInfo.STid == 90)
+            var _fee = _mapper.Map<Fin_DailyFeePayment>(dto);
+            _fee.CreateUserId = dto.UserId;
+
+            /*
+             * 2024-10-29
+             * 各部门基础固定费用明细”里的费用数据新增后,财务和总经理审核都默认直接通过isAudit=1),并且可编辑,如果ispay=1的话将不可编辑
+             *  2025-02-24
+             * 团组费用 默认总经理审核通过
+             */
+            var priceTypeInfo = await _sqlSugar.Queryable<Sys_SetData>().FirstAsync(x => x.IsDel == 0 && x.Id == dto.PriceTypeId);
+            if (priceTypeInfo != null && (priceTypeInfo.STid == 90 || priceTypeInfo.STid == 104))
+            {
+                if (priceTypeInfo.STid == 90)
                 {
                     _fee.FAudit = 1;
                     _fee.FAuditDate = DateTime.Now;
-                    _fee.MAudit = 1;
-                    _fee.MAuditDate = DateTime.Now;
                 }
 
-                int? feeId = await _sqlSugar.Insertable(_fee).ExecuteReturnIdentityAsync();
+                _fee.MAudit = 1;
+                _fee.MAuditDate = DateTime.Now;
+            }
 
-                if (dto.FeeContents.Any())
-                {
-                    var _feeContents = _mapper.Map<List<Fin_DailyFeePaymentContent>>(dto.FeeContents);
+            int? feeId = await _sqlSugar.Insertable(_fee).ExecuteReturnIdentityAsync();
 
-                    foreach (var item in _feeContents)
-                    {
-                        item.DFPId = feeId == null ? -1 : Convert.ToInt32(feeId);
-                        item.CreateUserId = dto.UserId;
-                    }
-                    await _sqlSugar.Insertable(_feeContents).ExecuteCommandAsync();
+            if (dto.FeeContents.Any())
+            {
+                var _feeContents = _mapper.Map<List<Fin_DailyFeePaymentContent>>(dto.FeeContents);
+
+                foreach (var item in _feeContents)
+                {
+                    item.DFPId = feeId == null ? -1 : Convert.ToInt32(feeId);
+                    item.CreateUserId = dto.UserId;
                 }
+                await _sqlSugar.Insertable(_feeContents).ExecuteCommandAsync();
+            }
 
-                _sqlSugar.CommitTran();
-                result.Code = 0;
+            _sqlSugar.CommitTran();
+            result.Code = 0;
 
-                var data = new { dailyId = feeId, sign = 1 };
-                result.Data = data;
-            }
-            catch (Exception ex)
-            {
-                _sqlSugar.RollbackTran();
-                result.Msg = ex.Message;
-            }
+            var data = new { dailyId = feeId, sign = 1 };
+            result.Data = data;
 
             return result;
         }
@@ -422,17 +432,17 @@ namespace OASystem.Infrastructure.Repositories.Financial
             Result result = new Result() { Code = -2 };
 
             #region 已审核的数据不可编辑
-            var dailyFeePayment = await _sqlSugar.Queryable<Fin_DailyFeePayment>().Where(it => it.Id == dto.Id && it.IsDel == 0).FirstAsync();
-            if (dailyFeePayment != null)
+            var dailyFeeInfo = await _sqlSugar.Queryable<Fin_DailyFeePayment>().Where(it => it.Id == dto.Id && it.IsDel == 0).FirstAsync();
+            if (dailyFeeInfo != null)
             {
-                if (dailyFeePayment.FAudit == 1 || dailyFeePayment.MAudit == 1)
+                if (dailyFeeInfo.FAudit == 1 || dailyFeeInfo.MAudit == 1)
                 {
-                    var setData = await _sqlSugar.Queryable<Sys_SetData>().Where(x => x.IsDel == 0 && x.Id == dto.PriceTypeId).FirstAsync();
+                    var setData = await _sqlSugar.Queryable<Sys_SetData>().FirstAsync(x => x.IsDel == 0 && x.Id == dto.PriceTypeId);
                     if (setData != null)
                     {
-                        if (setData.STid == 90)
+                        if (setData.STid == 90 || setData.STid == 104)
                         {
-                            if (dailyFeePayment.IsPay == 1)
+                            if (dailyFeeInfo.IsPay == 1)
                             {
                                 result.Msg = "该笔费用已付款,不可修改!";
                                 return result;

+ 1 - 1
OASystem/OASystem.Infrastructure/Repositories/Groups/CarTouristGuideGroundRepository.cs

@@ -864,7 +864,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                     cityPrice ??= new Grp_NationalTravelFee
                     {
-                        FoodCost = "0",
+                        FoodCost = 0.00M,
                         Id = 0,
                     };
 

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

@@ -1,6 +1,7 @@
 using AutoMapper;
 using Newtonsoft.Json;
 using NPOI.OpenXmlFormats.Wordprocessing;
+using NPOI.POIFS.Properties;
 using NPOI.SS.Formula.Functions;
 using OASystem.Domain;
 using OASystem.Domain.AesEncryption;
@@ -23,6 +24,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Xml.Linq;
 
 namespace OASystem.Infrastructure.Repositories.Groups
 {
@@ -49,9 +51,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
             //_teamRateRep = teamRateRep;
         }
 
-
-
-
         #region 团组信息 团组详情共享Api
 
         /// <summary>
@@ -248,7 +247,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
         }
 
-
         #region 团组
 
         /// <summary>
@@ -294,7 +292,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
             return countrys;
         }
 
-
         /// <summary>
         /// 获取接团信息 Page List
         /// </summary>
@@ -366,7 +363,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
         }
 
-
         /// <summary>
         /// 获取接团信息List
         /// </summary>
@@ -440,7 +436,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //Web Or Android
             {
-                string sql = string.Format(@"Select Id,SalesQuoteNo,TourCode,JietuanOperator,TeamLevSId,TeamDid,TeamName,ClientName,
+                string sql = string.Format(@"Select Id,CityId,SalesQuoteNo,TourCode,JietuanOperator,TeamLevSId,TeamDid,TeamName,ClientName,
 	                                                ClientUnit,VisitCountry,VisitDate,VisitDays,VisitPNumber,TontractTime,IsBid,
 	                                                PayDay,PaymentMoney,VisitPurpose,SpecialNeeds,OtherNeeds,CGRWSPBMMC,CGRWSPWH,
 	                                                ZZSCBMMC,ZZSCSPWH,Remark,TellPhone,WeChatNo,OpRoyaltyLv,OpRoyaltyRemark,Officialneeds
@@ -452,12 +448,24 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     _DelegationInfo.TeamName = FormartTeamName(_DelegationInfo.TeamName);
                     _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry);
 
-                    //if (_DelegationInfo.TontractTime)
-                    //{
+                    //验证城市值 不存在则设置默认值
+                    var cityInfo = await CityInfoById(_DelegationInfo.CityId);
+                    if (cityInfo != null)
+                    {
+                        _DelegationInfo.CityName = cityInfo.Name;
+                    }
+                    else
+                    {
+                        _DelegationInfo.CityId = 3505;
+                        _DelegationInfo.CityName = "四川-成都";
+                    }
 
-                    //}
+                        //if (_DelegationInfo.TontractTime)
+                        //{
 
-                    result.Code = 0;
+                        //}
+
+                      result.Code = 0;
                     result.Msg = "成功!";
                     result.Data = _DelegationInfo;
 
@@ -562,6 +570,122 @@ namespace OASystem.Infrastructure.Repositories.Groups
             return result;
         }
 
+        /// <summary>
+        /// 获取接团信息 编辑 
+        /// 城市基础 数据源
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<List<CityTree>> ProvinceCityBasicSource()
+        {
+            var data = await _sqlSugar.Queryable<CityTree>().AS("Sys_Cities")
+                .Where(x => x.IsDel == 0 && x.CountriesId == 44)
+                .ToTreeAsync(it => it.Child, it => it.ParentId, 0);
+
+            if (data.Any())
+            {
+                //移动指定数据在最前面
+                data = MoveElementToFront(data, "云南");
+                data = MoveElementToFront(data, "贵州");
+                data = MoveElementToFront(data, "重庆");
+                data = MoveElementToFront(data, "四川");
+            }
+            return data;
+        }
+
+        /// <summary>
+        /// 获取接团信息 编辑 
+        /// 省份基础 数据源
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<GroupCityBasicSourceView[]> ProvinceBasicSource()
+        {
+            var list = Array.Empty<GroupCityBasicSourceView>();
+
+            var data = await ProvinceCityBasicSource();
+
+            if (data.Any())
+            {
+                //移动指定数据在最前面
+                data = MoveElementToFront(data, "北京");
+                data = MoveElementToFront(data, "云南");
+                data = MoveElementToFront(data, "贵州");
+                data = MoveElementToFront(data, "重庆");
+                data = MoveElementToFront(data, "四川");
+
+                list = data.Select(x => new GroupCityBasicSourceView() { Id = x.Id, Name = x.Name_CN }).ToArray();
+            }
+            return list;
+        }
+
+        /// <summary>
+        /// 获取接团信息 编辑 
+        /// 城市基础 数据源
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<GroupCityBasicSourceView[]> CityBasicSource()
+        {
+            var list = new List<GroupCityBasicSourceView>();
+
+            var data = await ProvinceCityBasicSource();
+
+            if (data.Any())
+            {
+                //移动指定数据在最前面
+                data = MoveElementToFront(data, "云南");
+                data = MoveElementToFront(data, "贵州");
+                data = MoveElementToFront(data, "重庆");
+                data = MoveElementToFront(data, "四川");
+
+                foreach (var province in data)
+                {
+                    foreach (var city in province.Child)
+                    {
+                        list.Add(new GroupCityBasicSourceView() { 
+                            Id = city.Id,
+                            Name = $"{province.Name_CN}-{city.Name_CN}"
+                        });
+                    }
+                }
+
+                //四川成都放在最前面
+                var cdInfo = list.FirstOrDefault(x => x.Name.Equals("四川-成都"));
+                if (cdInfo != null)
+                {
+                    list.Remove(cdInfo);
+                    list.Insert(0, cdInfo);
+                }
+            }
+            return list.ToArray();
+        }
+
+        /// <summary>
+        /// 获取接团信息 编辑 
+        /// 基础 数据源
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<GroupCityBasicSourceView> CityInfoById(int id)
+        {
+            var list = await CityBasicSource();
+            var info = list.FirstOrDefault(x => x.Id == id);
+
+            return info;
+        }
+
+        private List<CityTree> MoveElementToFront(List<CityTree> list, string elementName)
+        {
+            var element = list.FirstOrDefault(x => x.Name_CN == elementName);
+            if (element != null)
+            {
+                list.Remove(element);
+                list.Insert(0, element);
+            }
+            return list;
+        }
+
         /// <summary>
         /// 获取接团信息 编辑 
         /// 基础 数据源
@@ -641,7 +765,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     userData = userData1,
                     clientData = clientData1,
                     depData = userDepDatas,
-                    rankData = rankDatas
+                    rankData = rankDatas,
+                    cityData = await CityBasicSource()
                 };
             }
 
@@ -724,6 +849,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                     Grp_DelegationInfo delegationInfo = new Grp_DelegationInfo()
                     {
+                        CityId = dto.CityId,
                         SalesQuoteNo = dto.SalesQuoteNo,
                         TeamLevSId = dto.TeamLevSId,
                         ClientName = dto.ClientName,
@@ -791,6 +917,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 {
                     var updateStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo
                     {
+                        CityId = dto.CityId,
                         SalesQuoteNo = dto.SalesQuoteNo,
                         TeamLevSId = dto.TeamLevSId,
                         ClientName = dto.ClientName,
@@ -1190,13 +1317,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        public async Task<Result> EnterExitCostGroupNameAsync()
+        public async Task<EnterExitCostGroupNameView[]> EnterExitCostGroupNameAsync()
         {
-            var result = new Result() { Code = -2, Msg = "未知错误" };
-
             var groupSql = string.Format(@$"SELECT
   Id,
   TeamName GroupName,
+  CityId ProvinceId,
   CASE
     WHEN (
       SELECT
@@ -1216,9 +1342,64 @@ WHERE
 ORDER BY
   VisitStartDate Desc");
 
-            result.Data = await _sqlSugar.SqlQueryable<EnterExitCostGroupNameView>(groupSql).ToListAsync();
-            result.Code = 0;
-            return result;
+            var groupDatas = await _sqlSugar.SqlQueryable<EnterExitCostGroupNameView>(groupSql).ToArrayAsync();
+            var provCityDatas = await ProvinceCityBasicSource();
+            if (provCityDatas.Any() && groupDatas.Any())
+            {
+                foreach (var item in groupDatas)
+                {
+                    var provinceId = item.ProvinceId;
+                    var isDefualtVal = true;
+                    if (provinceId > 0)
+                    {
+                        Console.WriteLine(item.Id);
+                        if (item.Id == 2778)
+                        {
+                            var parentId = FindParentIdByChildId(provCityDatas, provinceId);
+                            if (parentId != null)
+                            {
+                                isDefualtVal = false;
+                                item.ProvinceId = (int)parentId;
+                            }
+                        }
+                    }
+
+                    if (isDefualtVal)
+                    {
+                        item.ProvinceId = 122; //默认四川
+                    }
+                }
+            }
+            
+            return groupDatas;
+        }
+
+        /// <summary>
+        /// 递归地遍历树状结构,查找子项的父类 Id。
+        /// </summary>
+        /// <param name="tree"></param>
+        /// <param name="childId"></param>
+        /// <returns></returns>
+        public int? FindParentIdByChildId(List<CityTree> tree, int childId)
+        {
+            foreach (var node in tree)
+            {
+                if (node.Child != null && node.Child.Any())
+                {
+                    if (node.Child.Any(c => c.Id == childId))
+                    {
+                        return node.Id;
+                    }
+
+                    var parentId = FindParentIdByChildId(node.Child, childId);
+                    if (parentId.HasValue)
+                    {
+                        return parentId;
+                    }
+                }
+            }
+
+            return null;
         }
 
         #endregion

+ 61 - 5
OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostDraftRepository.cs

@@ -287,6 +287,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
             if (dto.SumTDC == 0) dto.OutsideTDPay = 0;
 
             var enterExitCost = _mapper.Map<Grp_EnterExitCostDraft>(dto);
+
+            enterExitCost.ProvinceId = dto.ProvinceId;
             enterExitCost.Remark = dto.FirstItemRemark;
             //enterExitCost.InsidePay = enterExitCost.Visa + enterExitCost.YiMiao + enterExitCost.HeSuan + enterExitCost.Service + enterExitCost.Safe + enterExitCost.Ticket;
 
@@ -319,10 +321,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 {
                     int enterExitId = 0;
 
+                    //var isNull = _sqlSugar.Queryable<Grp_EnterExitCostDraft>().Where(it => it.IsDel == 0 && it.CreateUserId == dto.UserId && it.DraftName.Equals(dto.DraftName)).First();
+
                     var isNull = _sqlSugar.Queryable<Grp_EnterExitCostDraft>().Where(it => it.IsDel == 0 && it.DraftName.Equals(dto.DraftName)).First();
                     if (isNull != null) //修改
                     {
-
+                        enterExitId = isNull.Id;
                         (bool viewPerm,bool assignPerm)  = await PermissionValidationAsync(enterExitCost.Id, dto.UserId);
                         if (!viewPerm)
                         {
@@ -333,11 +337,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                         var updateId = _sqlSugar.Updateable(enterExitCost)
                             .IgnoreColumns(it => new { it.DeleteUserId, it.DeleteTime, it.CreateUserId, it.CreateTime, it.IsDel })
-                            .WhereColumns(it => it.DraftName)
+                            .Where(it => it.Id == enterExitId)
                             .ExecuteCommand();
 
-                        if (updateId > 0) enterExitId = isNull.Id;
-                        else
+                        if (updateId < 1)
                         {
                             _sqlSugar.RollbackTran();
                             result.Msg = "修改操作失败!";
@@ -430,7 +433,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     result.Code = 0;
                     result.Msg = "操作成功!";
                     result.Data = new { sign = enterExitId, draftName = enterExitCost.DraftName };
-
                 }
                 catch (Exception ex)
                 {
@@ -530,5 +532,59 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             return result;
         }
+
+        /// <summary>
+        /// 文件类型
+        /// </summary>
+        /// <param name="provinceId"></param>
+        /// <returns></returns>
+        public async Task<(SetDataInfoView[], SetDataInfoView[])> FileOwner(int provinceId = 122)
+        {
+            //122 四川
+            //108 贵州
+            //103 重庆
+            //132 云南
+
+            var datas = await _sqlSugar
+                .Queryable<Sys_SetData>()
+                .Where(x => x.IsDel == 0 && (x.STid == 72 || x.STid == 73))
+                .ToListAsync();
+
+
+            var wordTypeData = datas.Where(x => x.STid == 72 && x.Remark.Contains(provinceId.ToString()))
+                                .Select(x => new SetDataInfoView()
+                                {
+                                    Id = x.Id,
+                                    Name = x.Name,
+                                    Remark = x.Remark
+
+                                }).ToArray();
+            if (wordTypeData.Length < 1)
+            {
+                //ProvinceDefaultItem
+
+                var defaultItem = datas.Where(x => x.STid == 72 && x.Remark.Contains("ProvinceDefaultItem"))
+                                .Select(x => new SetDataInfoView()
+                                {
+                                    Id = x.Id,
+                                    Name = x.Name,
+                                    Remark = x.Remark
+
+                                }).FirstOrDefault();
+                wordTypeData = new SetDataInfoView[] { defaultItem };
+            }
+
+            var excelTypeData = datas.Where(x => x.STid == 73 && x.Remark.Contains(provinceId.ToString()))
+                                .Select(x => new SetDataInfoView()
+                                {
+                                    Id = x.Id,
+                                    Name = x.Name,
+                                    Remark = x.Remark
+
+                                }).ToArray();
+
+            return (wordTypeData, excelTypeData);
+        }
+
     }
 }

+ 13 - 14
OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostQuoteRepository.cs

@@ -19,7 +19,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
     /// </summary>
     public class EnterExitCostQuoteRepository : BaseRepository<Grp_EnterExitCostQuoteItem, EnterExitCostQuoteView>
     {
-        private readonly IMapper _mapper; 
+        private readonly IMapper _mapper;
+
         public EnterExitCostQuoteRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
         {
             _mapper = mapper;
@@ -42,11 +43,11 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 }).ToListAsync();
 
             var newList = origList.Select(x => new InitBasicItemView
-                {
-                    Id = x.Id,
-                    Name = removeNl ? x.Name.Replace("\\r\\n", "") : x.Name,
-                    Index = int.TryParse(x.Index,out int index) ? index : -1
-                })
+            {
+                Id = x.Id,
+                Name = removeNl ? x.Name.Replace("\\r\\n", "") : x.Name,
+                Index = int.TryParse(x.Index, out int index) ? index : -1
+            })
                 .OrderBy(x => x.Index)
                 .ToList();
             return newList;
@@ -171,7 +172,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             if (basicItems.Any())
             {
-                viewInfo.FeeItems = basicItems.Select(x => new QuoteItemInfo { ItemId = x.Id, ItemName = x.Name,Index = x.Index }).OrderBy(x => x.Index).ToArray();
+                viewInfo.FeeItems = basicItems.Select(x => new QuoteItemInfo { ItemId = x.Id, ItemName = x.Name, Index = x.Index }).OrderBy(x => x.Index).ToArray();
             }
 
             var quoteInfo = await _sqlSugar.Queryable<Grp_EnterExitCostQuote>()
@@ -200,7 +201,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                 if (quoteItems.Any())
                 {
-                    viewInfo.FeeItems = viewInfo.FeeItems.Select(x => new QuoteItemInfo { Index = x.Index, QuoteId = dto.Id,ItemId = x.ItemId,ItemName=x.ItemName,Infos = quoteItems.Where(y => y.ItemId == x.ItemId).OrderBy(y => y.Index).ToArray() }).ToArray();
+                    viewInfo.FeeItems = viewInfo.FeeItems.Select(x => new QuoteItemInfo { Index = x.Index, QuoteId = dto.Id, ItemId = x.ItemId, ItemName = x.ItemName, Infos = quoteItems.Where(y => y.ItemId == x.ItemId).OrderBy(y => y.Index).ToArray() }).ToArray();
                 }
             }
 
@@ -283,7 +284,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 }
                 jw.Msg = "新增成功!";
             }
-            else if (!isNull) //编辑 
+            else if (!isNull) //编辑
             {
                 var quoteUpd = await _sqlSugar.Updateable(quoteInfo).IgnoreColumns(x => new { x.CreateUserId, x.CreateTime, x.IsDel }).ExecuteCommandAsync();
                 if (quoteUpd < 1)
@@ -325,7 +326,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
             return jw;
         }
 
-
         /// <summary>
         /// ItemDel
         /// </summary>
@@ -349,7 +349,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 jw.Msg = MsgTips.Id;
                 return jw;
             }
-            var info = await _sqlSugar.Queryable<Grp_EnterExitCostQuoteItem>().FirstAsync(x => x.IsDel == 0 && x.Id  == id);
+            var info = await _sqlSugar.Queryable<Grp_EnterExitCostQuoteItem>().FirstAsync(x => x.IsDel == 0 && x.Id == id);
             if (info == null)
             {
                 jw.Msg = $"操作成功!";
@@ -367,7 +367,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 .ExecuteCommandAsync();
             if (del < 1)
             {
-                jw.Msg = $"删除失败!"; 
+                jw.Msg = $"删除失败!";
                 _sqlSugar.RollbackTran();
                 return jw;
             }
@@ -390,6 +390,5 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             return jw;
         }
-
     }
-}
+}

+ 61 - 16
OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostRepository.cs

@@ -225,6 +225,11 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 .FirstAsync(it => it.DiId == groupId && it.IsDel == 0);
             if (permissionType == 1)
             {
+                if (enterExitCostData == null)
+                {
+                    msg = $"数据不存在!";
+                    return (false, msg);
+                }
 
                 if (!assignPerm || enterExitCostData.CreateUserId != currUserId)
                 {
@@ -622,30 +627,30 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        public async Task<Result> PostNationalTravelFeeOperate(NationalTravelFeeOperateDto dto)
+        public async Task<JsonView> PostNationalTravelFeeOperate(NationalTravelFeeOperateDto dto)
         {
-            Result result = new Result();
+            var result = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" };
 
-            Grp_NationalTravelFee nationalTravelFee = _mapper.Map<Grp_NationalTravelFee>(dto);
-            nationalTravelFee.LastUpdateUserId = dto.UserId;
-            nationalTravelFee.CreateUserId = dto.UserId;
+            var info = _mapper.Map<Grp_NationalTravelFee>(dto);
+            info.LastUpdateUserId = dto.UserId;
+            info.CreateUserId = dto.UserId;
 
             if (dto.PortType == 1) //web
             {
 
-                var _nationalTravelFee = _sqlSugar.Storageable<Grp_NationalTravelFee>(nationalTravelFee).ToStorage();
+                var _nationalTravelFee = _sqlSugar.Storageable(info).ToStorage();
                 if (dto.Id == 0) //新增
                 {
-                    string selectSql = string.Format(@"Select * From Grp_NationalTravelFee 
-                                                   Where IsDel = 0 
-                                                   And Continent = '{0}' 
-                                                   And Country = '{1}'
-                                                   And City = '{2}'", dto.Continent, dto.Country, dto.City);
-                    Grp_NationalTravelFee nationalTravelFee1 = new Grp_NationalTravelFee();
-                    nationalTravelFee1 = await _sqlSugar.SqlQueryable<Grp_NationalTravelFee>(selectSql).FirstAsync();
-                    if (nationalTravelFee1 != null)
+                    var isNul = await _sqlSugar
+                        .Queryable<Grp_NationalTravelFee>()
+                        .FirstAsync(x => x.IsDel == 0 && 
+                            x.ProvinceId == info.ProvinceId &&
+                            info.Continent.Contains(dto.Continent) &&
+                            info.Country.Contains(dto.Country) &&
+                            info.City.Contains(dto.City));
+                    if (isNul != null)
                     {
-                        result.Msg = "该国家 城市已存在,请勿重复添加!";
+                        result.Msg = "该国家或者城市已存在,请勿重复添加!";
                         return result;
                     }
 
@@ -659,7 +664,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     .ExecuteCommand();   //存在更新
                 }
 
-                result.Code = 0;
+                result.Code = 200;
+                result.Msg = "操作成功!";
             }
             else if (dto.PortType == 2) //Android
             {
@@ -726,5 +732,44 @@ namespace OASystem.Infrastructure.Repositories.Groups
             return result;
         }
 
+        /// <summary>
+        /// 文件类型
+        /// </summary>
+        /// <param name="provinceId"></param>
+        /// <returns></returns>
+        public async Task<(SetDataInfoView[], SetDataInfoView[])> FileOwner(int provinceId = 122)
+        {
+            //122 四川
+            //108 贵州
+            //103 重庆
+            //132 云南
+
+            var datas = await _sqlSugar
+                .Queryable<Sys_SetData>()
+                .Where(x => x.IsDel == 0 && (x.STid == 72 || x.STid == 73))
+
+                .ToListAsync();
+
+
+            var wordTypeData = datas.Where(x => x.STid == 72 && x.Remark.Contains(provinceId.ToString()))
+                                .Select(x => new SetDataInfoView()
+                                {
+                                    Id = x.Id,
+                                    Name = x.Name,
+                                    Remark = x.Remark
+
+                                }).ToArray();
+            var excelTypeData = datas.Where(x => x.STid == 73 && x.Remark.Contains(provinceId.ToString()))
+                                .Select(x => new SetDataInfoView()
+                                {
+                                    Id = x.Id,
+                                    Name = x.Name,
+                                    Remark = x.Remark
+
+                                }).ToArray();
+
+            return (wordTypeData, excelTypeData);
+        }
+
     }
 }

+ 105 - 26
OASystem/OASystem.Infrastructure/Repositories/Groups/GroupOrderPreInfoRepository.cs

@@ -1,5 +1,6 @@
 using AutoMapper;
 using EyeSoft.Collections.Generic;
+using Newtonsoft.Json;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Entities.Groups;
@@ -28,17 +29,28 @@ namespace OASystem.Infrastructure.Repositories.Groups
         }
 
         /// <summary>
-        /// 获取模板信息
+        /// 获取基础信息
         /// </summary>
         /// <param name="tempId"></param>
         /// <returns></returns>
-        public async Task<JsonView> DataInit()
+        public async Task<JsonView> DataInit(int userId)
         {
             var jw = new JsonView() { Code = StatusCodes.Status200OK, Msg = "操作成功!" };
 
+            // 获取团组名称列表(端口类型为1)
             var groupNames = await _groupInfoRep.GetGroupNameList(new Domain.Dtos.Groups.GroupNameDto() { PortType = 1 });
-            var tempDatas = await _sqlSugar.Queryable<Sys_SetData>().Where(x => x.IsDel == 0 && x.STid == 109).Select(x => new { x.Id, x.Name }).ToListAsync();
-            var names = await _sqlSugar.Queryable<Grp_OrderPreInfo>().Where(x => x.IsDel == 0).OrderByDescending(x => x.Id).Select(x => new { x.Id, x.Name }).ToListAsync();
+
+            var tempDatas = await _sqlSugar.Queryable<Sys_SetData>()
+                .Where(x => x.IsDel == 0 && x.STid == 109)
+                .Select(x => new { x.Id, x.Name })
+                .ToListAsync();
+
+            var names = await _sqlSugar.Queryable<Grp_OrderPreInfo>()
+                .Where(x => x.IsDel == 0 && x.CreateUserId == userId)
+                .OrderByDescending(x => x.Id)
+                .Select(x => new { x.Id, x.Name })
+                .ToListAsync();
+
             jw.Data = new
             {
                 groupNames = groupNames,
@@ -52,7 +64,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <summary>
         /// 获取模板信息
         /// </summary>
-        /// <param name="tempId"></param>
+        /// <param name="tempId">模板编号,默认 1404</param>
         /// <returns></returns>
         public async Task<GrpOrderPreItemView[]> TempInfoById(int tempId = 1404)
         {
@@ -81,22 +93,24 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <summary>
         /// 获取团组下单前信息
         /// </summary>
-        /// <param name="id"></param>
+        /// <param name="id">下单前信息Id</param>
+        /// <param name="tempId">模板编号,默认 1404</param>
         /// <returns></returns>
         public async Task<JsonView> InfoAsync(int id, int tempId = 1404)
         {
             var jw = new JsonView() { Code = StatusCodes.Status200OK, Msg = "操作成功!" };
             var view = new GrpOrderPreInfoView();
-            var info = await _sqlSugar.Queryable<Grp_OrderPreInfo>().FirstAsync(x => x.IsDel == 0 && x.Id == id);
+            var info = await _sqlSugar.Queryable<Grp_OrderPreInfo>()
+                .FirstAsync(x => x.IsDel == 0 && x.Id == id);
 
             var temps = await TempInfoById(tempId);
             if (info == null)
             {
-                //view.TempId = tempId;
                 view.Items = temps;
                 jw.Data = view;
                 return jw;
             }
+
             view.Id = id;
             view.Name = info.Name;
             view.GroupId = info.GroupId;
@@ -114,32 +128,31 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     ParentId = opi.ParentId,
                     FieldTempId = ft.Id,
                     FieldName = sd1.Name,
-                    //FieldTypeName = !string.IsNullOrEmpty(ft.Remark) ? sd2.Name + "-" + ft.Remark : sd2.Name,
                     FieldTypeName = sd2.Name,
                     OriginVal = opi.Value,
+                    Remark = opi.Remark,
                     IsRequired = ft.IsRequired,
                     IsRemark = ft.IsRemark,
                     Index = ft.Index
                 })
                 .ToArrayAsync();
 
-            if (!items.Any()) view.Items = temps;
+            // 如果原始数据不存在或者数量不匹配,则补充模板中缺失的字段
+            if (!items.Any())
+            {
+                view.Items = temps;
+            }
             else
             {
-                if (items.Length != temps.Length)
+                var itemsList = items.ToList();
+                foreach (var temp in temps)
                 {
-                    foreach (var item in temps)
+                    if (!itemsList.Any(x => x.FieldName.Equals(temp.FieldName)))
                     {
-                        if (items.FirstOrDefault(x => x.FieldName.Equals(item.FieldName)) == null)
-                        {
-                            var arr = new GrpOrderPreItemView[] { item };
-                            view.Items.AddRange(arr);
-                        }
+                        itemsList.Add(temp);
                     }
                 }
-                else view.Items = items;
-
-                view.Items = view.Items.Length > 0 ? view.Items.OrderBy(x => x.Index).ToArray() : view.Items;
+                view.Items = itemsList.OrderBy(x => x.Index).ToArray();
             }
 
             jw.Data = view;
@@ -153,6 +166,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <returns></returns>
         public async Task<JsonView> OpAsync(GroupOrderPreInfoOpDto dto)
         {
+            int dataId = dto.Id;
             var jw = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作成功!" };
             int currUserId = dto.CurrUserId;
             if (currUserId < 1)
@@ -168,20 +182,30 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             var info = new Grp_OrderPreInfo()
             {
-                Id = dto.Id,
+                Id = dataId,
                 Name = dto.Name,
                 GroupId = dto.GroupId,
                 CreateUserId = currUserId
             };
+
             var items = new List<Grp_OrderPreItem>();
+            // 处理每一项信息
             foreach (var item in dto.Items)
             {
+                var val = "";
+                // 如果新值为 string[] 时,序列化为 JSON 字符串,否则直接转换
+                if (item.NewValue is Array obj)
+                {
+                    val =  JsonConvert.SerializeObject( (string[])item.NewValue);
+                }
+                else if(item.NewValue != null) val = item.NewValue.ToString();
+
                 items.Add(new Grp_OrderPreItem()
                 {
                     Id = item.Id,
                     ParentId = item.ParentId,
                     FormTempId = item.FieldTempId,
-                    Value = item.NewValue == null ? string.Empty: item.NewValue.ToString() ,
+                    Value = val,
                     CreateUserId = currUserId,
                     Remark = item.Remark
                 });
@@ -193,7 +217,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
             _sqlSugar.BeginTran();
             if (dto.Id > 0) //修改
             {
-                var infoUpd = await _sqlSugar.Updateable(info).UpdateColumns(x => new { x.Name, x.GroupId }).ExecuteCommandAsync();
+                var infoUpd = await _sqlSugar.Updateable(info)
+                    .UpdateColumns(x => new { x.Name, x.GroupId })
+                    .ExecuteCommandAsync();
+
                 if (infoUpd < 1)
                 {
                     _sqlSugar.RollbackTran();
@@ -215,19 +242,71 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     return jw;
                 }
 
-                var addId = await _sqlSugar.Insertable(info).ExecuteReturnIdentityAsync();
-                if (addId < 1)
+                dataId = await _sqlSugar.Insertable(info).ExecuteReturnIdentityAsync();
+                if (dataId < 1)
                 {
                     _sqlSugar.RollbackTran();
                     jw.Msg = $"新增失败!";
                     return jw;
                 }
 
-                foreach (var item in items) item.ParentId = addId;
+                // 设置所有项的 ParentId 为新增后的 Id
+                foreach (var item in items) item.ParentId = dataId;
 
                 if (items.Any()) await _sqlSugar.Insertable(items).ExecuteCommandAsync();
             }
 
+            _sqlSugar.CommitTran();
+            jw.Msg = $"操作成功!";
+            jw.Code = StatusCodes.Status200OK;
+            jw.Data = dataId;
+            return jw;
+        }
+
+        /// <summary>
+        /// 获取团组下单前信息 Del
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<JsonView> DelAsync(GroupOrderPreInfoDelDto dto)
+        {
+            var jw = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作成功!" };
+            int currUserId = dto.CurrUserId,
+                id = dto.Id;
+            if (currUserId < 1)
+            {
+                jw.Msg = MsgTips.UserId;
+                return jw;
+            }
+            if (currUserId < 1)
+            {
+                jw.Msg = MsgTips.Id;
+                return jw;
+            }
+
+            
+            _sqlSugar.BeginTran();
+           
+
+            var parentDel = await _sqlSugar.Updateable<Grp_OrderPreInfo>()
+                .SetColumns(a => new Grp_OrderPreInfo()
+                {
+                    DeleteUserId = currUserId,
+                    IsDel = 1,
+                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+                })
+                .Where(x => x.Id == id)
+                .ExecuteCommandAsync(); 
+            var subDel = await _sqlSugar.Updateable<Grp_OrderPreItem>()
+                .SetColumns(a => new Grp_OrderPreItem()
+                {
+                    DeleteUserId = currUserId,
+                    IsDel = 1,
+                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+                })
+                .Where(x => x.ParentId == id)
+                .ExecuteCommandAsync();
+
             _sqlSugar.CommitTran();
             jw.Msg = $"操作成功!";
             jw.Code = StatusCodes.Status200OK;

+ 26 - 8
OASystem/OASystem.Infrastructure/Repositories/PersonnelModule/TaskAllocationRepository.cs

@@ -268,13 +268,13 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
 
                 if (dto.Id == 0) //添加
                 {
-                    // 1 按 任务名称 查询重
-                    Pm_TaskAllocation taskAllocation1 = await _sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.IsDel == 0 && it.TaskName.Equals(_TaskAllocation.TaskName)).FirstAsync();
-                    if (taskAllocation1 != null)
-                    {
-                        _result.Msg = string.Format("任务名称重复,请重命名!");
-                        return _result;
-                    }
+                    //// 1 按 任务名称 查询重
+                    //Pm_TaskAllocation taskAllocation1 = await _sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.IsDel == 0 && it.TaskName.Equals(_TaskAllocation.TaskName)).FirstAsync();
+                    //if (taskAllocation1 != null)
+                    //{
+                    //    _result.Msg = string.Format("任务名称重复,请重命名!");
+                    //    return _result;
+                    //}
 
                     _sqlSugar.BeginTran();
 
@@ -410,6 +410,9 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                     _result.Msg = string.Format("请传入有效的Id参数!");
                     return _result;
                 }
+
+
+
             }
             else
             {
@@ -564,7 +567,7 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                 return _result;
             }
             
-            if (selectData.TaskStatus >= TaskerEnum.UnderWay)
+            if (selectData.TaskStatus >= TaskerEnum.WaitConfirm)
             {
                 _result.Msg = string.Format("该任务已提交待审核状态,不可重复提交!");
                 return _result;
@@ -885,6 +888,21 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                 _result.Msg = string.Format("请传入有效的taskId参数!");
                 return _result;
             }
+
+            var taskInfo = _sqlSugar.Queryable<Pm_TaskAllocation>().First(x => x.IsDel == 0 && x.Id == taskId);
+            if (taskInfo == null)
+            {
+                _result.Msg = "该任务不存在,不可执行终止!";
+                return _result;
+            }
+
+            if (taskInfo.Status == TaskEnum.Finished)
+            {
+                _result.Msg = "该任务已完成,不可执行终止!";
+                return _result;
+            }
+
+
             _sqlSugar.BeginTran();
             var taskUpdate = _sqlSugar.Updateable<Pm_TaskAllocation>()
                                       .SetColumns(it => it.Status == TaskEnum.TaskStop)

+ 13 - 0
OASystem/OASystem.Infrastructure/Tools/CommonFun.cs

@@ -680,4 +680,17 @@ public static class CommonFun
         return PinyinHelper.GetPinyin(chineseName, "").ToUpper();
     }
 
+    #region stringBuilder 扩展
+
+    /// <summary>
+    /// StringBuilder 验证是否有值
+    /// </summary>
+    /// <param name="sb"></param>
+    /// <returns></returns>
+    public static bool HasValue(this StringBuilder sb)
+    {
+        return sb != null && sb.Length > 0;
+    }
+    #endregion
+
 }