Browse Source

Merge branch 'develop' of http://132.232.92.186:3000/XinXiBu/OA2023 into develop

leiy 10 months ago
parent
commit
0556ef03c1

+ 11 - 1
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -2797,7 +2797,17 @@ namespace OASystem.API.Controllers
             _entity.FilePath = dto.filePath;
             _entity.Remark = dto.remark;
             _entity.PriceCount = dto.PriceCount;
-            _entity.PriceDt = DateTime.Parse(dto.PriceDt);
+
+            DateTime dt_PriceDt;
+            bool b_PriceDt = DateTime.TryParse(dto.PriceDt, out dt_PriceDt);
+            if (b_PriceDt)
+            {
+                _entity.PriceDt = dt_PriceDt;
+            }
+            else
+            {
+                _entity.PriceDt = DateTime.MinValue;
+            }
             _entity.PriceSum = dto.price * dto.PriceCount;
 
             _daiRep.BeginTran();

+ 29 - 2
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -789,6 +789,29 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, groupData.Msg));
             }
 
+            var groupInfo = _groupRepository.Query(s => s.Id == dto.GroupId).First();
+
+            #region OA消息推送
+            try
+            {
+                string groupName = groupInfo.TeamName;
+                List<Sys_Users> listUser = _airTicketResRep.Query<Sys_Users>(s => s.DepId == 7 && s.IsDel == 0).ToList();
+                List<int> userIds = new List<int>();
+                listUser.ForEach(s => userIds.Add(s.Id));
+                string title = $"系统通知";
+                string content = $"团组[{groupName}]已确认出团!";
+                await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupBusinessOperations, title, content, userIds, dto.GroupId);
+            }
+            catch (Exception ex)
+            {
+
+            }
+            #endregion
+
+            #region 应用推送
+
+            #endregion
+
             GroupStepForDelegation.CreateWorkStep(dto.GroupId); //创建管控流程
 
             return Ok(JsonView(true, "操作成功!", groupData.Data));
@@ -11473,7 +11496,8 @@ namespace OASystem.API.Controllers
                 {
                     temp.CreateTime = dtCrt;
                 }
-                else {
+                else
+                {
                     temp.CreateTime = DateTime.Now;
                 }
 
@@ -11488,7 +11512,8 @@ namespace OASystem.API.Controllers
                 temp.PriceCurrency = item.Currency;
 
                 int detailId = 0;
-                if (dicDetail.ContainsKey(item.PriceTypeDetail)) {
+                if (dicDetail.ContainsKey(item.PriceTypeDetail))
+                {
                     detailId = dicDetail[item.PriceTypeDetail];
                 }
                 temp.PriceDetailType = detailId;
@@ -11511,5 +11536,7 @@ namespace OASystem.API.Controllers
 
             return Ok(JsonView(true, "操作成功!"));
         }
+
+        
     }
 }

+ 71 - 41
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -5,6 +5,7 @@ using OASystem.API.OAMethodLib;
 using OASystem.API.OAMethodLib.Hub.HubClients;
 using OASystem.API.OAMethodLib.Hub.Hubs;
 using OASystem.API.OAMethodLib.QiYeWeChatAPI;
+using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Dtos.PersonnelModule;
 using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Domain.ViewModels.PersonnelModule;
@@ -44,7 +45,7 @@ namespace OASystem.API.Controllers
         /// <param name="wageSheetRep"></param>
         /// <param name="usersRep"></param>
         /// <param name="mapper"></param>
-        public PersonnelModuleController(IQiYeWeChatApiService qiYeWeChatApiService,WageSheetRepository wageSheetRep, UsersRepository usersRep, IMapper mapper, 
+        public PersonnelModuleController(IQiYeWeChatApiService qiYeWeChatApiService, WageSheetRepository wageSheetRep, UsersRepository usersRep, IMapper mapper,
             TaskAllocationRepository taskAllocationRep, IHubContext<ChatHub, IChatClient> hubContext)
         {
             _mapper = mapper;
@@ -87,7 +88,7 @@ namespace OASystem.API.Controllers
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> GetWageSheetMonthWorkdays(string startDt, string endDt )
+        public async Task<IActionResult> GetWageSheetMonthWorkdays(string startDt, string endDt)
         {
 
             //参数处理
@@ -153,7 +154,7 @@ namespace OASystem.API.Controllers
 
             var _sqlSugar = _wageSheetRep._sqlSugar;
             _sqlSugar.BeginTran();
-            
+
             try
             {
                 List<Sys_Calendar> sys_Calendars_add = new List<Sys_Calendar>();
@@ -266,11 +267,12 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, nameData.Msg));
             }
 
-            var data = new {
+            var data = new
+            {
                 compnayData = compnayData,
                 depData = depData,
                 userNames = nameData.Data
-        };
+            };
 
 
             return Ok(JsonView(true, "查询成功!", data));
@@ -289,10 +291,10 @@ namespace OASystem.API.Controllers
                                          Where Isdel = 0 And YearMonth Like '%{0}%'
                                          Order By YearMonth Asc", dto.Year);
 
-            var data  = await _wageSheetRep._sqlSugar.SqlQueryable<WageYearMonthView>(sql).ToListAsync();
-            
-           
-            return Ok(JsonView(true,"操作成功!", data));
+            var data = await _wageSheetRep._sqlSugar.SqlQueryable<WageYearMonthView>(sql).ToListAsync();
+
+
+            return Ok(JsonView(true, "操作成功!", data));
         }
 
         /// <summary>
@@ -417,7 +419,7 @@ namespace OASystem.API.Controllers
                                          pm_WageSheet.ReservedFunds + pm_WageSheet.WithholdingInsurance + pm_WageSheet.OtherDeductions + pm_WageSheet.OtherDeductions;
 
                 //实发合计 不含个税
-                if (pm_WageSheet.RegularDays >= pm_WageSheet.WorkDays )
+                if (pm_WageSheet.RegularDays >= pm_WageSheet.WorkDays)
                 {
                     pm_WageSheet.RegularDays = pm_WageSheet.WorkDays;
                     salary = salary + pm_WageSheet.Mealsupplement + pm_WageSheet.OtherHandle;
@@ -431,9 +433,9 @@ namespace OASystem.API.Controllers
                     else
                     {
                         salary = PayrollComputation.ConvertToDecimal(salary / pm_WageSheet.WorkDays * pm_WageSheet.RegularDays + pm_WageSheet.Mealsupplement + pm_WageSheet.OtherHandle);
-                    }    
+                    }
                 }
-                
+
                 decimal actualTotal = salary - totalDeduction;
                 pm_WageSheet.Should = salary;
                 pm_WageSheet.TotalDeductions = totalDeduction;
@@ -454,7 +456,7 @@ namespace OASystem.API.Controllers
 
                 return Ok(JsonView(false, ex.Message));
             }
-                
+
             return Ok(JsonView(true, _result.Msg, _result.Data));
         }
 
@@ -472,7 +474,7 @@ namespace OASystem.API.Controllers
             //参数处理
             string ymFormat = "yyyy-MM";
             string dtFormat = "yyyy-MM-dd";
-            DateTime yearMonthDt,startDt,endDt;
+            DateTime yearMonthDt, startDt, endDt;
             bool yearMonthDtIsValid = DateTime.TryParseExact(dto.yearMonth, ymFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out yearMonthDt);
             bool startDtIsValid = DateTime.TryParseExact(dto.startDt, dtFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out startDt);
             bool endDtIsValid = DateTime.TryParseExact(dto.endDt, dtFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out endDt);
@@ -490,7 +492,7 @@ namespace OASystem.API.Controllers
 
             //本月工资是否有数据 有数据则不计算
             result = await _wageSheetRep.Get_WageSheet_ListByYearMonthAsync(thisYearMonth);
-            if (result.Code == 0 )
+            if (result.Code == 0)
             {
                 return Ok(JsonView(false, thisYearMonth + " 工资数据已存在,若无人员工资请手动添加!"));
             }
@@ -498,22 +500,22 @@ namespace OASystem.API.Controllers
             //获取上个月工资信息
             List<Pm_WageSheet> preWageSheetItems = await _wageSheetRep._sqlSugar.Queryable<Pm_WageSheet>().Where(it => it.IsDel == 0 && it.YearMonth == preYearMonth).ToListAsync();
             preWageSheetItems = preWageSheetItems.OrderBy(it => it.UserId).ToList();
-            if (preWageSheetItems.Count <= 0) 
+            if (preWageSheetItems.Count <= 0)
             {
                 return Ok(JsonView(false, thisYearMonth + " 上月工资数据不存在,请手动添加!"));
             }
             //处理上个月同月同人 多条数据
             List<Pm_WageSheet> preWageSheetItems1 = new List<Pm_WageSheet>();
-            preWageSheetItems1 = preWageSheetItems.GroupBy(it => new { it.YearMonth,it.UserId })
-                                                  .Select(it => it.FirstOrDefault(item => item.Basic !=0))
+            preWageSheetItems1 = preWageSheetItems.GroupBy(it => new { it.YearMonth, it.UserId })
+                                                  .Select(it => it.FirstOrDefault(item => item.Basic != 0))
                                                   .ToList();
 
-             //获取OA系统内所有用户
-            List<UserNameView> userNames =  _usersRep._sqlSugar.SqlQueryable<UserNameView>("Select Id,CnName From Sys_Users").ToList();
+            //获取OA系统内所有用户
+            List<UserNameView> userNames = _usersRep._sqlSugar.SqlQueryable<UserNameView>("Select Id,CnName From Sys_Users").ToList();
 
             List<Pm_WageSheet> wageSheets = new List<Pm_WageSheet>();
 
-            _result = await PayrollComputation.SalaryCalculatorAsync(preWageSheetItems1, userNames,dto.UserId, thisYearMonth, thisStartDt,thisEndDt);
+            _result = await PayrollComputation.SalaryCalculatorAsync(preWageSheetItems1, userNames, dto.UserId, thisYearMonth, thisStartDt, thisEndDt);
 
             #region 批量添加
 
@@ -550,7 +552,7 @@ namespace OASystem.API.Controllers
             #endregion
 
             sw.Stop();
-            return Ok(JsonView(true, "操作成功! 耗时:" + (sw.ElapsedMilliseconds/1000) + "s"));
+            return Ok(JsonView(true, "操作成功! 耗时:" + (sw.ElapsedMilliseconds / 1000) + "s"));
         }
 
         /// <summary>
@@ -568,7 +570,7 @@ namespace OASystem.API.Controllers
             //参数处理
             string ymFormat = "yyyy-MM";
             string ymdFormat = "yyyy-MM-dd";
-            DateTime yearMonthDt,startDt,endDt;
+            DateTime yearMonthDt, startDt, endDt;
             bool yearMonthDtIsValid = DateTime.TryParseExact(dto.YearMonth, ymFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out yearMonthDt);
             bool startDtIsValid = DateTime.TryParseExact(dto.StartDate, ymdFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out startDt);
             bool endDtIsValid = DateTime.TryParseExact(dto.EndDate, ymdFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out endDt);
@@ -582,7 +584,7 @@ namespace OASystem.API.Controllers
             List<Pm_WageSheet> wageSheets = new List<Pm_WageSheet>();
             Pm_WageSheet wageSheet = _mapper.Map<Pm_WageSheet>(dto);
             Pm_WageSheet wageSheet1 = await _wageSheetRep._sqlSugar.Queryable<Pm_WageSheet>().Where(it => it.UserId == dto.UserId && it.YearMonth == dto.YearMonth && it.StartDate == dto.StartDate && it.EndDate == dto.EndDate).FirstAsync();
-            if (wageSheet1 != null )
+            if (wageSheet1 != null)
             {
                 wageSheet.Id = wageSheet1.Id;
             }
@@ -618,12 +620,12 @@ namespace OASystem.API.Controllers
                     return it;
                 }
             ).ToList();
-                #endregion
+            #endregion
 
             sw.Stop();
             return Ok(JsonView(true, "操作成功!耗时:" + (sw.ElapsedMilliseconds / 1000) + "s", wageSheetItems[0]));
-           
-            
+
+
         }
 
         /// <summary>
@@ -670,10 +672,10 @@ namespace OASystem.API.Controllers
             WorkbookDesigner designer = new WorkbookDesigner();
 
             designer.Workbook = new Workbook(AppSettingsHelper.Get("ExcelBasePath") + "Template/工资详细清单.xlsx");
-            designer.Workbook.Worksheets[0].Name = yearMonth +" 工资单";
+            designer.Workbook.Worksheets[0].Name = yearMonth + " 工资单";
             designer.SetDataSource("WageSheet", wageSheetList);
             designer.SetDataSource("YearMonth", yearMonth);
-            designer.SetDataSource("StartEndDt", wageSheetList[0].StartDate +" - "+ wageSheetList[0].EndDate);
+            designer.SetDataSource("StartEndDt", wageSheetList[0].StartDate + " - " + wageSheetList[0].EndDate);
             designer.SetDataSource("WorkDays", wageSheetList[0].WorkDays);
             designer.SetDataSource("SumPrice", SumPrice);
             designer.SetDataSource("WageSheetTitle", "工资单");//
@@ -869,10 +871,10 @@ namespace OASystem.API.Controllers
                                     wageSheets1 = _mapper.Map<List<Pm_WageSheet>>(wageSheetList);
                                     var updateStatus = _wageSheetRep._sqlSugar
                                         .Updateable(wageSheets1)
-                                        .UpdateColumns(it => new { it.WithholdingTax,it.TotalRealHair})
+                                        .UpdateColumns(it => new { it.WithholdingTax, it.TotalRealHair })
                                         .ExecuteCommand();
 
-                                    if (updateStatus<0)
+                                    if (updateStatus < 0)
                                     {
                                         return Ok(JsonView(false, "操作失败!"));
                                     }
@@ -916,7 +918,7 @@ namespace OASystem.API.Controllers
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> Test(string startDt,string endDt) 
+        public async Task<IActionResult> Test(string startDt, string endDt)
         {
             UserIdListView userIdListView = await _qiYeWeChatApiService.GetUserIdListAsync();
             if (userIdListView.errcode != 0)
@@ -928,7 +930,7 @@ namespace OASystem.API.Controllers
             List<string> qyWhchatIdList = new List<string>();
             qyWhchatIdList = userIdListView.dept_user.Select(it => it.userid).ToList();
 
-            var data = await _qiYeWeChatApiService.GetCheckinDataAsync(qyWhchatIdList,2,Convert.ToDateTime(startDt), Convert.ToDateTime(endDt));
+            var data = await _qiYeWeChatApiService.GetCheckinDataAsync(qyWhchatIdList, 2, Convert.ToDateTime(startDt), Convert.ToDateTime(endDt));
             return Ok(JsonView(true, "操作成功!", data.checkindata));
         }
 
@@ -977,7 +979,7 @@ namespace OASystem.API.Controllers
                 #endregion
 
                 var _view = await _taskAllocationRep._Init(_dto.PortType, _dto.UserId);
-                if (_view.Code==0)
+                if (_view.Code == 0)
                 {
                     return Ok(JsonView(true, "查询成功!", _view.Data));
                 }
@@ -1024,7 +1026,7 @@ 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 指派给我
                 {
@@ -1172,7 +1174,7 @@ namespace OASystem.API.Controllers
                     if (pageFunAuthView.EditAuth == 0) return Ok(JsonView(false, "您没有编辑权限!"));
                 }
 
-                
+
                 #endregion
 
                 #endregion
@@ -1186,7 +1188,7 @@ namespace OASystem.API.Controllers
                         string title = $"[{_dto.TaskName}] 任务新建成功!";
                         string content = $"[{_dto.TaskName}] 任务新建成功,请前往任务页面查看详情!";
 
-                        await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate,title,content,_dto.UserIds);
+                        await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content, _dto.UserIds);
                     }
 
                     return Ok(JsonView(true, "操作成功!"));
@@ -1211,7 +1213,7 @@ namespace OASystem.API.Controllers
         {
             try
             {
-                var _view = await _taskAllocationRep._TaskerDetails( _dto.Id);
+                var _view = await _taskAllocationRep._TaskerDetails(_dto.Id);
                 if (_view.Code == 0)
                 {
                     return Ok(JsonView(true, "操作成功!", _view.Data));
@@ -1266,7 +1268,7 @@ namespace OASystem.API.Controllers
                         await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.TaskProgressUpdate, title, content1, new List<int>() { _dto.UserId }); //设置任务人 发送消息
 
                     }
-                   
+
                     return Ok(JsonView(true, "操作成功!"));
                 }
 
@@ -1350,7 +1352,7 @@ namespace OASystem.API.Controllers
                     if (taskUserData != null)
                     {
                         var taskData = _taskAllocationRep._sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.Id == taskUserData.TAId).First();
-                        
+
                         if (taskData != null)
                         {
 
@@ -1430,7 +1432,7 @@ namespace OASystem.API.Controllers
         {
             try
             {
-                var _view = await _taskAllocationRep._TaskSetUnFinishedStatus(_dto.SubId,_dto.Cause);
+                var _view = await _taskAllocationRep._TaskSetUnFinishedStatus(_dto.SubId, _dto.Cause);
                 if (_view.Code == 0)
                 {
                     //发送消息
@@ -1688,5 +1690,33 @@ namespace OASystem.API.Controllers
             }
         }
         #endregion
+
+        #region 团组状态通知
+
+        /// <summary>
+        /// 测试
+        /// </summary>
+        /// <param name="_dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> Test_QIYEWX(PostTourClientListDownloadFile _dto)
+        {
+            GroupStatus_UserSimplelistView list = await _qiYeWeChatApiService.GroupStatus_GetUserList();
+
+            //创建群聊
+
+            List<string> userList = new List<string>() { "huaju.liu", "Feint", "johnny.yang@pan-american-intl.com" };
+
+            GroupStatus_CreateChatView rst1 = await _qiYeWeChatApiService.GroupStatus_CreateChat("团组状态通知测试", "Feint", userList, "groupstatuschat01");
+
+            //推送消息(模板)
+
+            string q = "";
+
+            return Ok(JsonView(true, "操作成功!"));
+        }
+
+        #endregion
     }
 }

+ 22 - 0
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/IQiYeWeChatApiService.cs

@@ -16,6 +16,7 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
         ///// 1:人事助手 
         ///// 2:打卡
         ///// 3:邮件
+        ///// 6:团组状态通知
         ///// </param>
         ///// <returns></returns>
         //Task<Access_TokenView> GetToken(int applicationType);
@@ -139,6 +140,27 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
         /// <returns></returns>
         Task<ApprovalDetailView> GetApprovalDetailAsync(string spNo);
 
+
+        /// <summary>
+        /// hook 发送团组出发信息给财务群
+        /// </summary>
+        /// <param name="msg"></param>
+        /// <returns></returns>
         Task<ResponseBase> RobotSendMsg_GroupInfo(string msg);
+
+        #region 团组状态通知
+
+        /// <summary>
+        /// 获取部门成员
+        /// </summary>
+        /// <returns></returns>
+        Task<GroupStatus_UserSimplelistView> GroupStatus_GetUserList(int departmentId = 8402038);
+
+        /// <summary>
+        /// 创建群聊
+        /// </summary>
+        /// <returns></returns>
+        Task<GroupStatus_CreateChatView> GroupStatus_CreateChat(string chatName, string owner, List<string> userList, string chatId);
+        #endregion
     }
 }

+ 104 - 4
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/QiYeWeChatApiService.cs

@@ -29,6 +29,8 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
         private readonly string AddressBook_Corpsecret = "Y1tnjh7j-BvbqAytAoXZPUbmDR6dqLTL6mXtc6PZ7fo";  //通讯录同步 凭证密钥
         private readonly string Approve_AgentId = "3010040";     //审批 Id
         private readonly string Approve_Corpsecret = "k_Jo69Jw9Hqg_in-Rypbs30PNbxOYa1t4e-dxYuT-kw";  //审批 凭证密钥
+        private readonly string GroupStatus_AgentId = "1000008"; //团组状态通知 Id
+        private readonly string GroupStatus_Corpsecret = "7J_ST3jTPzbZpFwl7ttToTVufjEx6O2wuApvKHxt2Ak"; //团组状态通知Secret
 
         private readonly DateTime _1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0);
         private readonly JobPostRepository _jobPostRep;
@@ -53,6 +55,7 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
         /// 3:邮件
         /// 4:通讯录同步
         /// 5:审批
+        /// 6:团组状态通知
         /// </param>
         /// <returns></returns>
         private async Task<Access_TokenView> GetTokenAsync(int applicationType)
@@ -86,6 +89,11 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
                 access_Token.corpsecret = Approve_Corpsecret;
                 cacheName = "Approve_Access_Token";
             }
+            else if (applicationType == 6) //团组状态通知
+            {
+                access_Token.corpsecret = GroupStatus_Corpsecret;
+                cacheName = "GroupStatus_Access_Token";
+            }
             else
             {
                 tokenResult.errmsg = "未识别应用类型Id!";
@@ -1284,10 +1292,8 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
         }
         #endregion
 
-        public long ConvertToTimeSpan(DateTime dt)
-        {
-            return (dt.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
-        }
+        #region hook机器人
+
 
         /// <summary>
         /// 发送团组信息给财务群
@@ -1318,5 +1324,99 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
 
             return sendMsgView;
         }
+
+        #endregion
+
+        #region 团组状态通知
+
+        /// <summary>
+        /// 获取部门成员
+        /// </summary>
+        /// <param name="departmentId"></param>
+        /// <returns></returns>
+        public async Task<GroupStatus_UserSimplelistView> GroupStatus_GetUserList(int departmentId = 8402038)
+        {
+            GroupStatus_UserSimplelistView result = new GroupStatus_UserSimplelistView();
+
+            Access_TokenView access_Token = await GetTokenAsync(6);
+            if (access_Token.errcode != 0)
+            {
+                result.errcode = access_Token.errcode;
+                result.errmsg = string.Format("【企业微信】【团组状态通知】【Token】【Msg】{0}", access_Token.errmsg);
+                return result;
+            }
+
+            string url = string.Format("/cgi-bin/user/simplelist?access_token={0}&department_id={1}", access_Token.access_token, departmentId);
+
+            var simplelist_Req = await _httpClient.GetAsync(url);
+
+            if (simplelist_Req.IsSuccessStatusCode)
+            {
+                var stringResponse = await simplelist_Req.Content.ReadAsStringAsync();
+
+                result = System.Text.Json.JsonSerializer.Deserialize<GroupStatus_UserSimplelistView>(stringResponse,
+                    new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
+
+
+            }
+            else
+            {
+                result.errcode = -1;
+                result.errmsg = "企业微信部门列表未获取到!";
+            }
+
+
+            return result;
+        }
+
+        /// <summary>
+        /// 创建群聊
+        /// </summary>
+        /// <param name="chatName"></param>
+        /// <param name="owner"></param>
+        /// <param name="userList"></param>
+        /// <param name="chatId"></param>
+        /// <returns></returns>
+        public async Task<GroupStatus_CreateChatView> GroupStatus_CreateChat(string chatName, string owner, List<string> userList, string chatId)
+        {
+            GroupStatus_CreateChatView result = new GroupStatus_CreateChatView();
+
+            Access_TokenView access_Token = await GetTokenAsync(6);
+            if (access_Token.errcode != 0)
+            {
+                result.errcode = access_Token.errcode;
+                result.errmsg = string.Format("【企业微信】【团组状态通知】【Token】【Msg】{0}", access_Token.errmsg);
+                return result;
+            }
+
+            GroupStatus_CreateChat reqJson = new GroupStatus_CreateChat()
+            {
+                chatid = chatId,
+                name = chatName,
+                owner = owner,
+                userlist = userList
+            };
+
+            string url = string.Format("/cgi-bin/appchat/create?access_token={0}&debug=1", access_Token.access_token);
+            var json = System.Text.Json.JsonSerializer.Serialize(reqJson);
+            var content = new StringContent(json, Encoding.UTF8, "application/json");
+            var create_Req = await _httpClient.PostAsync(url, content);
+            var stringResponse = await create_Req.Content.ReadAsStringAsync();
+
+            result = System.Text.Json.JsonSerializer.Deserialize<GroupStatus_CreateChatView>(stringResponse,
+                new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
+
+            return result;
+        }
+
+        #endregion
+
+        public long ConvertToTimeSpan(DateTime dt)
+        {
+            return (dt.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
+        }
+
+
+
     }
 }

+ 23 - 0
OASystem/OASystem.Domain/Dtos/QiYeWeChat/ApprovalData_Request.cs

@@ -123,4 +123,27 @@ namespace OASystem.Domain.Dtos.QiYeWeChat
     {
         public string content { get; set; }
     }
+
+    public class GroupStatus_CreateChat
+    {
+        /// <summary>
+        /// 群聊名,最多50个utf8字符,超过将截断
+        /// </summary>
+        public string name { get; set; }
+
+        /// <summary>
+        /// 指定群主的id。如果不指定,系统会随机从userlist中选一人作为群主
+        /// </summary>
+        public string owner { get; set; }
+
+        /// <summary>
+        /// 群成员id列表。至少2人,至多2000人
+        /// </summary>
+        public List<string> userlist { get; set; }
+
+        /// <summary>
+        /// 群聊的唯一标志,不能与已有的群重复;字符串类型,最长32个字符。只允许字符0-9及字母a-zA-Z。如果不填,系统会随机生成群id
+        /// </summary>
+        public string chatid { get; set; }
+    }
 }

+ 42 - 0
OASystem/OASystem.Domain/ViewModels/QiYeWeChat/GroupStatusView.cs

@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.QiYeWeChat
+{
+    /// <summary>
+    /// 部门成员列表
+    /// </summary>
+    public class GroupStatus_UserSimplelistView : ResponseBase
+    {
+        public List<GroupStatus_UserSimplelistItem> userlist { get; set; }
+    }
+
+    public class GroupStatus_UserSimplelistItem
+    {
+        /// <summary>
+        /// 成员UserID。对应管理端的账号
+        /// </summary>
+        public string userid { get; set; }
+
+        /// <summary>
+        /// 成员名称
+        /// </summary>
+        public string name { get; set; }
+
+        /// <summary>
+        /// 成员所属部门列表
+        /// </summary>
+        public List<int> department { get; set; }
+    }
+
+    /// <summary>
+    /// 创建群聊
+    /// </summary>
+    public class GroupStatus_CreateChatView : ResponseBase
+    {
+        public string chatid { get; set; }
+    }
+}

+ 9 - 6
OASystem/OASystem.Infrastructure/Repositories/Groups/CarTouristGuideGroundRepository.cs

@@ -748,9 +748,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     });
 
                     //限制只能选择地区
-                    var opSingle = _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservations>().First(x => x.Id == dto.CTGGRId);
+                    var opSingle = _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservations>().First(x => x.Id == dto.CTGGRId && x.IsDel == 0);
                     var opSingleCityId = 0;
                     Grp_NationalTravelFee cityPrice = null;
+                    string priceCity = string.Empty;
 
                     //三公费用
                     if (int.TryParse(opSingle.Area, out opSingleCityId))
@@ -758,18 +759,20 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         cityPrice = _sqlSugar.Queryable<Grp_NationalTravelFee>().Where(x =>
                          x.Id == opSingleCityId
                         ).First();
+                        priceCity = cityPrice == null ? string.Empty :cityPrice.Country + cityPrice?.City;
                     }
                     else
                     {
                         cityPrice = _sqlSugar.Queryable<Grp_NationalTravelFee>().Where(x =>
                             !string.IsNullOrEmpty(x.City) && x.City.Contains(opSingle.Area)
                         ).First();
+                        priceCity = opSingle.Area;
                     }
 
                     //超支费用表(数据添加)  Fin_GroupExtraCost
                     List<Fin_GroupExtraCost> groupExtraCostsArr = new List<Fin_GroupExtraCost>();
 
-                    var di = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.Id == dto.DiId);
+                    var di = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.Id == dto.DiId && x.IsDel == 0);
                     if (di == null)
                     {
                         result.Code = -1;
@@ -789,7 +792,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                 Coefficient = 1,
                                 DiId = dto.DiId,
                                 PriceCurrency = item.Currency,
-                                PriceName = di.TeamName + "车超时费(地接导入)",
+                                PriceName = di.TeamName + priceCity + "车超时费(地接导入)",
                                 PriceType = 1028,
                                 PriceDt = item.DatePrice.ObjToDate(),
                                 PriceSum = item.Price * item.Count,
@@ -823,7 +826,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                 {
                                     //全部转换为rmb;
                                     item["费用"] = price * currOp;
-                                    cityPrice.FoodCost = (foodCost * cityCurr).ToString("F2");
+                                    foodCost = (foodCost * cityCurr);
 
                                     item["币种"] = "836";
                                     cityPrice.Currency = 836;
@@ -840,7 +843,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                         Coefficient = 1,
                                         DiId = dto.DiId,
                                         PriceCurrency = cityPrice.Currency,
-                                        PriceName = di.TeamName + "餐费(地接导入)",
+                                        PriceName = di.TeamName + priceCity + "餐费(地接导入)",
                                         PriceType = 1028,
                                         PriceDt = Convert.ToDateTime(item["日期"]),
                                         PriceSum = price - foodCost,
@@ -859,7 +862,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     {
                         foreach (var item in groupExtraCostsArr)
                         {
-                            var QuerySgin = _sqlSugar.Queryable<Fin_GroupExtraCost>().Where(x => x.PriceName == item.PriceName && x.DiId == item.DiId && x.IsDel == 0 && item.PriceDt.ToString("yyyy-MM-dd") == item.PriceDt.ToString("yyyy-MM-dd")).First();
+                            var QuerySgin = _sqlSugar.Queryable<Fin_GroupExtraCost>().Where(x => x.PriceName == item.PriceName && x.DiId == item.DiId && x.IsDel == 0 && x.PriceDt.ToString("yyyy-MM-dd") == item.PriceDt.ToString("yyyy-MM-dd")).First();
                             if (QuerySgin == null)
                             {
                                 var resultThis = await PostGroupExtraCost_Operator(new Fin_GroupExtraCostDto_OP