Browse Source

企业微信应用-OA提醒

jiangjc 10 months ago
parent
commit
ac4431817c
20 changed files with 1440 additions and 111 deletions
  1. 57 4
      OASystem/OASystem.Api/Controllers/FinancialController.cs
  2. 144 2
      OASystem/OASystem.Api/Controllers/GroupsController.cs
  3. 34 4
      OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs
  4. 291 15
      OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Config.cs
  5. 723 4
      OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Library.cs
  6. 1 1
      OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/IQiYeWeChatApiService.cs
  7. 44 4
      OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/QiYeWeChatApiService.cs
  8. 6 26
      OASystem/OASystem.Api/OAMethodLib/Quartz/Business/DeleReminderMessage.cs
  9. 1 1
      OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/ALiYunPostMessageJob.cs
  10. 43 0
      OASystem/OASystem.Domain/Dtos/QiYeWeChat/ApprovalData_Request.cs
  11. 5 0
      OASystem/OASystem.Domain/Entities/System/Sys_Users.cs
  12. 11 5
      OASystem/OASystem.Infrastructure/Repositories/Financial/DailyFeePaymentRepository.cs
  13. 1 1
      OASystem/OASystem.Infrastructure/Repositories/Financial/ProceedsReceivedRepository.cs
  14. 8 3
      OASystem/OASystem.Infrastructure/Repositories/Groups/AirTicketResRepository.cs
  15. 22 13
      OASystem/OASystem.Infrastructure/Repositories/Groups/CarTouristGuideGroundRepository.cs
  16. 26 21
      OASystem/OASystem.Infrastructure/Repositories/Groups/CustomersRepository.cs
  17. 8 2
      OASystem/OASystem.Infrastructure/Repositories/Groups/DecreasePaymentsRepository.cs
  18. 3 0
      OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs
  19. 4 2
      OASystem/OASystem.Infrastructure/Repositories/Groups/InvitationOfficialActivitiesRepository.cs
  20. 8 3
      OASystem/OASystem.Infrastructure/Repositories/Groups/VisaPriceRepository.cs

+ 57 - 4
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -32,6 +32,9 @@ using SixLabors.ImageSharp.ColorSpaces;
 using OASystem.Domain.ViewModels.QiYeWeChat;
 using System.Diagnostics;
 using System.Security.Cryptography;
+using NPOI.POIFS.Crypt.Dsig;
+using OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice;
+using Org.BouncyCastle.Asn1.Ocsp;
 
 namespace OASystem.API.Controllers
 {
@@ -176,6 +179,21 @@ namespace OASystem.API.Controllers
             {
                 return Ok(JsonView(false, result.Msg));
             }
+
+            #region 应用推送
+            try
+            {
+                int dailyId = Convert.ToInt32(result.Data.dailyId);
+                int sign = Convert.ToInt32(result.Data.sign);
+
+                await AppNoticeLibrary.DailyPayReminders_Create_ToCaiwuChat(dailyId, sign, QiyeWeChatEnum.CaiWuChat);
+            }
+            catch (Exception ex)
+            {
+            }
+            #endregion
+
+
             return Ok(JsonView(true));
         }
 
@@ -194,6 +212,20 @@ namespace OASystem.API.Controllers
             {
                 return Ok(JsonView(false, result.Msg));
             }
+
+            #region 应用推送
+            try
+            {
+                int dailyId = Convert.ToInt32(result.Data.dailyId);
+                int sign = Convert.ToInt32(result.Data.sign);
+
+                await AppNoticeLibrary.DailyPayReminders_Create_ToCaiwuChat(dailyId, sign, QiyeWeChatEnum.CaiWuChat);
+            }
+            catch (Exception ex)
+            {
+            }
+            #endregion
+
             return Ok(JsonView(true));
         }
 
@@ -1789,10 +1821,10 @@ namespace OASystem.API.Controllers
                         {
                             feeDatas.Add(new ClientFeeInfoView
                             {
-                                client = item.Client+ "[未匹配上的已收数据(应收已收公司名称不一致)]",
+                                client = item.Client + "[未匹配上的已收数据(应收已收公司名称不一致)]",
                                 frMoney = "0.00",
-                                frCurrency =  "-",
-                                frRate ="0.0000",
+                                frCurrency = "-",
+                                frRate = "0.0000",
                                 prReceivablesType = setData.Find(it => it.Id == item?.ReceivablesType)?.Name ?? "",
                                 prTime = item?.SectionTime ?? "-",
                                 prMoney = item?.Price.ToString("#0.00") ?? "0.00",
@@ -2046,7 +2078,7 @@ namespace OASystem.API.Controllers
             var userDatas = _sqlSugar.Queryable<Sys_Users>().ToList();
             var setDatas = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0).ToList();
             var countryFeeDatas = _sqlSugar.Queryable<Grp_NationalTravelFee>().Where(it => it.IsDel == 0).ToList();
-           
+
             var hotelDatas = _sqlSugar.Queryable<Grp_HotelReservations>().Where(it => it.IsDel == 0 && groupIds.Contains(it.DiId)).ToList();
             var opDatas = _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservations>().Where(it => it.IsDel == 0 && groupIds.Contains(it.DiId)).ToList();
             var visaDatas = _sqlSugar.Queryable<Grp_VisaInfo>().Where(it => it.IsDel == 0 && groupIds.Contains(it.DIId)).ToList();
@@ -2564,6 +2596,27 @@ namespace OASystem.API.Controllers
                 if (changeStatus)
                 {
                     _sqlSugar.CommitTran();
+
+                    #region 应用推送
+                    try
+                    {
+                        foreach (int ccpId in groupIds)
+                        {
+                            List<string> tempList = new List<string>() { ccpId.ToString() };
+                            await AppNoticeLibrary.SendUserMsg_GroupStatus_PayResult(ccpId, tempList);
+                        }
+
+                        foreach (int dailyId in dailyPaymentIds)
+                        {
+                            List<string> tempList = new List<string>() { dailyId.ToString() };
+                            await AppNoticeLibrary.DailyPayReminder_Pay_ToUser(dailyId, tempList);
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                    }
+                    #endregion
+
                     return Ok(JsonView(true, "操作成功!"));
                 }
                 _sqlSugar.RollbackTran();

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

@@ -68,6 +68,8 @@ using NPOI.XSSF.Streaming.Values;
 using OASystem.API.OAMethodLib.Quartz.Business;
 using System.Linq;
 using NPOI.POIFS.NIO;
+using OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice;
+using OASystem.Domain.ViewModels.Statistics;
 
 namespace OASystem.API.Controllers
 {
@@ -809,7 +811,20 @@ namespace OASystem.API.Controllers
             #endregion
 
             #region 应用推送
-
+            try
+            {
+                await AppNoticeLibrary.SendChatMsg_GroupStatus_Create(dto.GroupId, QiyeWeChatEnum.CompanyCRMChat);
+                Sys_Users users = _airTicketResRep.Query<Sys_Users>(s => s.Id == groupInfo.JietuanOperator).First();
+                Sys_Department department = _airTicketResRep.Query<Sys_Department>(s => s.Id == users.DepId).First();
+                if (department.Id == 6 && !string.IsNullOrEmpty(users.QiyeChatUserId))
+                {
+                    List<string> userList = new List<string>() { users.QiyeChatUserId };
+                    await AppNoticeLibrary.SendUserMsg_GroupStatus_Create(dto.GroupId, userList);
+                }
+            }
+            catch (Exception ex)
+            {
+            }
             #endregion
 
             GroupStepForDelegation.CreateWorkStep(dto.GroupId); //创建管控流程
@@ -1864,6 +1879,7 @@ namespace OASystem.API.Controllers
             var groupDatas = _grpScheduleRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
 
             List<dynamic> msgDatas = new List<dynamic>();
+            Dictionary<int, int> dic_ccp_user = new Dictionary<int, int>() { };
             foreach (var item in idList)
             {
                 int CreditId = int.Parse(item);
@@ -1883,6 +1899,18 @@ namespace OASystem.API.Controllers
                 var creditData = creditDatas.Where(it => it.Id == CreditId).FirstOrDefault();
                 if (creditData != null)
                 {
+                    #region 应用通知配置
+
+                    try
+                    {
+                        dic_ccp_user.Add(creditData.Id, creditData.CreateUserId);
+                    }
+                    catch (Exception ex)
+                    {
+                    }
+
+                    #endregion
+
                     string auditStr = _dto.AuditCode == 1 ? "已通过" : _dto.AuditCode == 2 ? "未通过" : "未审核";
 
                     string groupNameStr = string.Empty;
@@ -1933,6 +1961,21 @@ namespace OASystem.API.Controllers
                     GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupExpenseAudit, item.MsgTitle, item.MsgContent, new List<int>() { item.UserId }, item.DiId);
                 }
 
+                #region 应用推送
+                try
+                {
+                    foreach (var ccpId in dic_ccp_user.Keys)
+                    {
+                        List<string> templist = new List<string>() { dic_ccp_user[ccpId].ToString() };
+                        await AppNoticeLibrary.SendUserMsg_GroupStatus_AuditFee(ccpId, templist, QiyeWeChatEnum.CaiWuChat);
+                    }
+                }
+                catch (Exception)
+                {
+                }
+                #endregion
+
+
                 return Ok(JsonView(true, "操作成功!"));
             }
 
@@ -2030,6 +2073,20 @@ namespace OASystem.API.Controllers
                 {
                     return Ok(JsonView(false, groupData.Msg));
                 }
+
+                #region 应用推送
+                try
+                {
+                    int ccpId = Convert.ToInt32(groupData.Data.ccpId);
+                    int sign = Convert.ToInt32(groupData.Data.sign);
+
+                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);
+                }
+                catch (Exception ex)
+                {
+                }
+                #endregion
+
                 return Ok(JsonView(true, groupData.Msg, groupData.Data));
             }
             catch (Exception ex)
@@ -2909,6 +2966,20 @@ namespace OASystem.API.Controllers
                 {
                     return Ok(JsonView(false, groupData.Msg));
                 }
+
+                #region 应用推送
+                try
+                {
+                    int ccpId = Convert.ToInt32(groupData.Data.ccpId);
+                    int sign = Convert.ToInt32(groupData.Data.sign);
+
+                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);
+                }
+                catch (Exception ex)
+                {
+                }
+                #endregion
+
                 return Ok(JsonView(true, groupData.Msg, groupData.Data));
             }
             catch (Exception ex)
@@ -3170,6 +3241,20 @@ namespace OASystem.API.Controllers
                 {
                     return Ok(JsonView(false, groupData.Msg));
                 }
+
+                #region 应用推送
+                try
+                {
+                    int ccpId = Convert.ToInt32(groupData.Data.ccpId);
+                    int sign = Convert.ToInt32(groupData.Data.sign);
+
+                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);
+                }
+                catch (Exception ex)
+                {
+                }
+                #endregion
+
                 return Ok(JsonView(true, groupData.Msg, groupData.Data));
             }
             catch (Exception ex)
@@ -5479,6 +5564,20 @@ namespace OASystem.API.Controllers
                 {
                     return Ok(JsonView(false, groupData.Msg));
                 }
+
+                #region 应用推送
+                try
+                {
+                    int ccpId = Convert.ToInt32(groupData.Data.ccpId);
+                    int sign = Convert.ToInt32(groupData.Data.sign);
+
+                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);
+                }
+                catch (Exception ex)
+                {
+                }
+                #endregion
+
                 return Ok(JsonView(true, groupData.Msg, groupData.Data));
             }
             catch (Exception ex)
@@ -5591,6 +5690,7 @@ namespace OASystem.API.Controllers
                 {
                     return Ok(JsonView(false, groupData.Msg));
                 }
+
                 return Ok(JsonView(true, groupData.Msg, groupData.Data));
             }
             catch (Exception ex)
@@ -5660,6 +5760,20 @@ namespace OASystem.API.Controllers
                 {
                     return Ok(JsonView(false, groupData.Msg));
                 }
+
+                #region 应用推送
+                try
+                {
+                    int ccpId = Convert.ToInt32(groupData.Data.ccpId);
+                    int sign = Convert.ToInt32(groupData.Data.sign);
+
+                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);
+                }
+                catch (Exception ex)
+                {
+                }
+                #endregion
+
                 return Ok(JsonView(true, groupData.Msg, groupData.Data));
             }
             catch (Exception ex)
@@ -9622,6 +9736,20 @@ namespace OASystem.API.Controllers
                 {
                     return Ok(JsonView(false, data.Msg));
                 }
+
+                #region 应用推送
+                try
+                {
+                    int ccpId = Convert.ToInt32(data.Data.ccpId);
+                    int sign = Convert.ToInt32(data.Data.sign);
+
+                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);
+                }
+                catch (Exception ex)
+                {
+                }
+                #endregion
+
                 return Ok(JsonView(true, data.Msg, data.Data));
             }
             catch (Exception ex)
@@ -10430,6 +10558,20 @@ namespace OASystem.API.Controllers
                 {
                     return Ok(JsonView(false, groupData.Msg));
                 }
+
+                #region 应用推送
+                try
+                {
+                    int ccpId = Convert.ToInt32(groupData.Data.ccpId);
+                    int sign = Convert.ToInt32(groupData.Data.sign);
+
+                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);
+                }
+                catch (Exception ex)
+                {
+                }
+                #endregion
+
                 return Ok(JsonView(true, groupData.Msg, groupData.Data));
             }
             catch (Exception ex)
@@ -11535,6 +11677,6 @@ namespace OASystem.API.Controllers
             return Ok(JsonView(true, "操作成功!"));
         }
 
-        
+
     }
 }

+ 34 - 4
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -1,4 +1,5 @@
-using Aspose.Cells;
+using Aliyun.Credentials.Utils;
+using Aspose.Cells;
 using Microsoft.AspNetCore.SignalR;
 using NPOI.POIFS.Crypt.Dsig;
 using OASystem.API.OAMethodLib;
@@ -15,6 +16,7 @@ using OASystem.Domain.ViewModels.QiYeWeChat;
 using OASystem.Infrastructure.Repositories.PersonnelModule;
 using StackExchange.Redis;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Data;
 using System.Diagnostics;
 using System.Globalization;
@@ -1708,17 +1710,45 @@ namespace OASystem.API.Controllers
 
             //创建群聊
 
-            //List<string> userList = new List<string>() { "huaju.liu", "Feint", "johnny.yang@pan-american-intl.com" };
+            //List<string> userList1 = new List<string>() {  "Feint", "amy.zhu@pan-american-intl.com", "judy.zeng@pan-american-intl.com", "FuHongJin" };
+            //List<string> userList2 = new List<string>() {  "Feint", "ZhaoYaQi", "LiaoWenYa" };
+            //List<string> userList3 = new List<string>() {  "Feint", "amy.zhu@pan-american-intl.com", "judy.zeng@pan-american-intl.com", "FuHongJin", "ZhaoYaQi", "LiaoWenYa" };
 
-            //GroupStatus_CreateChatView rst1 = await _qiYeWeChatApiService.GroupStatus_CreateChat("团组状态通知测试", "Feint", userList, "groupstatuschat01");
+            //GroupStatus_CreateChatView rst1 = await _qiYeWeChatApiService.GroupStatus_CreateChat("OA通知-财务部", "Feint", userList1, "CaiWuChat01");
+            //GroupStatus_CreateChatView rst2 = await _qiYeWeChatApiService.GroupStatus_CreateChat("OA通知-国交部", "Feint", userList2, "GuoJiaoLeader01");
+            //GroupStatus_CreateChatView rst3 = await _qiYeWeChatApiService.GroupStatus_CreateChat("OA通知-团组(公司客户)", "Feint", userList3, "CompanyCRMChat01");
 
             //推送消息(模板)
 
-
+            //List<string> userList = new List<string>() { "Feint", "huaju.liu", "johnny.yang@pan-american-intl.com" };
+            List<string> userList = new List<string>() { "Feint", "johnny.yang@pan-american-intl.com" };
 
             //团组出发
+            //AppNoticeLibrary.SendUserMsg_GroupStatus_Create(2358, userList);
+
             //费用审核
+            //AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(_dto.DiId, QiyeWeChatEnum.TestChat);
+
             //费用审核结果通知(通过情况下发送财务群)
+            //AppNoticeLibrary.SendUserMsg_GroupStatus_AuditFee(_dto.DiId, userList, QiyeWeChatEnum.TestChat);
+
+            //4、财务付款时:(1)对应版块人员【单独发,状态为已付款才发】
+            //AppNoticeLibrary.SendUserMsg_GroupStatus_PayResult(_dto.DiId, userList);
+
+            //团组提醒财务群
+            DateTime dtNow = DateTime.Now;
+            //List<Grp_DelegationInfo> listSource = _usersRep.Query<Grp_DelegationInfo>(s => s.IsDel == 0 && s.VisitStartDate >= dtNow).Take(3).ToList();
+            //List<Grp_DelegationInfo> listAdd7day = _usersRep.Query<Grp_DelegationInfo>(s => s.IsDel == 0 && s.VisitStartDate >= dtNow).Take(3).ToList();
+            //List<Grp_DelegationInfo> listAdd3day = new List<Grp_DelegationInfo>() { };
+
+            //AppNoticeLibrary.SendChatMsg_GroupRemindersToCaiwu(listAdd7day, listAdd3day, QiyeWeChatEnum.TestChat);
+
+
+            //日付申请提醒财务群
+            //AppNoticeLibrary.DailyPayReminders_Create_ToCaiwuChat(_dto.DiId, QiyeWeChatEnum.TestChat);
+            //日付申请结果推送用户、成功通知财务群
+            //AppNoticeLibrary.DailyPayReminder_Audit_ToUser(_dto.DiId, userList, QiyeWeChatEnum.TestChat);
+            //AppNoticeLibrary.DailyPayReminder_Pay_ToUser(_dto.DiId, userList);
 
             string q = "";
 

+ 291 - 15
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Config.cs

@@ -1,4 +1,5 @@
 using MathNet.Numerics.Statistics;
+using OASystem.Domain.Entities.Groups;
 using System.ComponentModel;
 
 namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
@@ -12,13 +13,13 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
         TestChat = 0,
 
         /// <summary>
-        /// 团组通知-公司客户群(总经理;国交部经理、主管),发送条件(1.确认出团)
+        /// 团组通知-公司客户群(国交部经理、主管、财务部),发送条件(1.确认出团)
         /// </summary>
         [Description("CompanyCRMChat01")]
         CompanyCRMChat = 1,
 
         /// <summary>
-        /// 团组通知-市场客户群(市场部经理、主管;国交部经理、主管)发送条件(1.确认出团)
+        /// 团组通知-市场客户群(市场部经理、主管;国交部经理、主管)发送条件(1.确认出团) 暂时不用
         /// </summary>
         [Description("MarketCRMChat01")]
         MarketCRMChat,
@@ -48,7 +49,6 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
         {
             string result = string.Format(@" `确认出团`  
 
->**团组基本信息**  
 >团组名称:<font color='info'>{0}</font> 
 
 >团组类型:{1}
@@ -67,32 +67,308 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
         /// 通知文本-费用申请
         /// </summary>
         /// <returns></returns>
-        public static string GroupStatus_ApplyFee()
+        public static string GroupStatus_ApplyFee(GroupStatus_ApplyFeeModel info)
         {
-            string result = string.Format(@" `费用审核`  
+            string result = string.Format(@" `团组费用录入`  
 
->团组:<font color='info'>雅安市经合和外事局赴美国 6日</font> 
+>团组:<font color='info'>{0}</font> 
 
-<font color='comment'>- </font>新增一笔需要审核的费用
+<font color='comment'>- </font>{7}
 
->费用模块:签证
->费用名称:<font color='warning'>于冀川等6人</font>
->此次付款金额:<font color='warning'>8850.00 CNY</font>
+>费用模块:{1}
+>费用名称:<font color='warning'>{2}</font>
+>付款金额:<font color='warning'>{3}</font>
 
->申请人:李敏
->申请时间:<font color='comment'>2024-05-06 17:21</font> 
+>申请人:{4}
+>申请时间:<font color='comment'>{5}</font> 
 
-<font color='comment'>- </font>当前团组费用待审核数量: 1
+<font color='comment'>- </font>当前团组费用待审核数量: {6}
 
-[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/) ");
+[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/) ", info.TeamName, info.PriceModule, info.PriceName, info.Price, info.CreateUser, info.CreateDt, info.QueueCount,info.TitleStr);
+
+            return result;
+        }
+
+        /// <summary>
+        /// 费用审核通知-团组费用-群聊
+        /// </summary>
+        /// <param name="info"></param>
+        /// <returns></returns>
+        public static string AuditResult_ApplyFee_Chat(AuditResult_ApplyFee_GroupModel info)
+        {
+            string result = string.Format(@" `{0}`  
+
+<font color='{1}'>{2}</font>
+>审核时间:<font color='comment'>{8}</font>
+
+>团组:{3}
+
+>费用模块:{4}
+>费用名称:<font color='warning'>{5}</font>
+>付款金额:<font color='warning'>{6}</font>
+
+>申请人:{7}
+
+[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/) ", info.Title, info.ResultColor, info.Result, info.TeamName, info.PriceModule, info.PriceName, info.Price, info.CreateUser, info.GMAuditDate);
+
+            return result;
+        }
+
+
+        /// <summary>
+        /// 费用审核通知-团组费用-用户
+        /// </summary>
+        /// <param name="info"></param>
+        /// <returns></returns>
+        public static string AuditResult_ApplyFee_User(AuditResult_ApplyFee_GroupModel info)
+        {
+            string result = string.Format(@" `{0}`  
+
+<font color='{1}'>{2}</font>
+>审核时间:<font color='comment'>{7}</font>
+
+>团组:{3}
+
+>费用模块:{4}
+>费用名称:<font color='warning'>{5}</font>
+>付款金额:<font color='warning'>{6}</font>
+
+[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/) ", info.Title, info.ResultColor, info.Result, info.TeamName, info.PriceModule, info.PriceName, info.Price, info.GMAuditDate);
+
+            return result;
+        }
+
+        /// <summary>
+        /// 费用支付通知-团组费用-用户
+        /// </summary>
+        /// <param name="info"></param>
+        /// <returns></returns>
+        public static string PayResult_Group_ToUser(PayResult_Group_ToUserModel info)
+        {
+            string result = string.Format(@" `团组费用支付`  
+
+>团组:{0}
+
+>费用模块:{1}
+>费用名称:<font color='warning'>{2}</font>
+>付款金额:<font color='warning'>{3}</font>
+
+><font color='info'>该笔费用已支付</font>
+>支付时间:<font color='comment'>{4}</font>
+
+[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/) ", info.TeamName, info.PriceModule, info.PriceName, info.Price, info.PayDt);
+
+            return result;
+        }
+
+        /// <summary>
+        /// 团组出发前一周提醒财务检查合同、尾款
+        /// </summary>
+        /// <returns></returns>
+        public static string GroupRemindersToCaiwuChat(List<Grp_DelegationInfo> list_7day, List<Grp_DelegationInfo> list_3day)
+        {
+            string teamNames1 = "><font color='comment'>暂无</font>";
+            string teamNames2 = "><font color='comment'>暂无</font>";
+
+            if (list_7day.Count > 0)
+            {
+                teamNames1 = "";
+                list_7day.ForEach(s => teamNames1 += ">" + s.TeamName + "\n\n");
+            }
+
+            if (list_3day.Count > 0)
+            {
+                teamNames2 = "";
+                list_3day.ForEach(s => teamNames2 += ">" + s.TeamName + "\n\n");
+            }
+
+
+            string result = string.Format(@" `团组状态提醒`  
+
+><font color='warning'> - 下列团组将于7天后出发:</font>
+{0}
+
+><font color='warning'> - 下列团组将于3天后结束:</font>
+{1}
+
+<font color='info'>请注意检查合同、尾款状态</font>
+
+[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/)  ", teamNames1, teamNames2);
+
+            return result;
+        }
+
+        /// <summary>
+        /// 日付申请提交时推送财务群
+        /// </summary>
+        /// <returns></returns>
+        public static string DailyPayReminders_Create_ToCaiwuChat(DailyPayReminders_Create_ToCaiwuChatModel info)
+        {
+            string result = string.Format(@" `日付申请录入`  
+
+<font color='comment'>- </font>{6}
+
+>费用名称:<font color='warning'>{0}</font>
+>公司:<font color='comment'>{5}</font>
+>费用标识:<font color='comment'>{4}</font>
+>付款金额:<font color='warning'>{1}</font>
+
+>申请人:{2}
+>申请时间:<font color='comment'>{3}</font>
+
+[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/)  ", info.PriceName, info.Price, info.CreateUser, info.CreateDt, info.FeeSign, info.Company, info.TitleStr);
+
+            return result;
+        }
+
+
+        /// <summary>
+        /// 日付申请审核结果推送给申请人
+        /// </summary>
+        /// <returns></returns>
+        public static string DailyPayReminder_Audit_ToUser(DailyPayReminder_Audit_ToUserModel info)
+        {
+            string result = string.Format(@" `日付申请`  
+
+<font color='{0}'>{1}</font>
+
+>费用名称:{2}
+>付款金额:<font color='warning'>{3}</font>
+
+>审核时间:<font color='comment'>{4}</font>
+
+ ", info.ResultColor, info.Result, info.PriceName, info.Price, info.AuditDate);
+
+            return result;
+        }
+
+        /// <summary>
+        /// 日付申请审核结果推送给财务群(总经理审核通过)
+        /// </summary>
+        /// <returns></returns>
+        public static string DailyPayReminder_Audit_ToCaiwuChat(DailyPayReminder_Audit_ToCaiwuChatModel info)
+        {
+            string result = string.Format(@" `日付申请`  
+
+<font color='info'> - 新增一笔通过总经理审核的日付申请</font>
+
+>费用名称:{0}
+>付款金额:<font color='warning'>{1}</font>
+
+>申请人:{2}
+
+>审核时间:<font color='comment'>{3}</font>
+
+ ", info.PriceName, info.Price, info.CreateUser, info.AuditDate);
+
+            return result;
+        }
+
+        /// <summary>
+        /// 日付申请已付款推送给申请人
+        /// </summary>
+        /// <returns></returns>
+        public static string DailyPayReminder_Pay_ToUser(DailyPayReminder_Pay_ToUserModel info)
+        {
+            string result = string.Format(@" `日付申请`  
+
+<font color='info'>你有一笔日付申请费用已付款</font>
+
+>费用名称:{0}
+>付款金额:<font color='warning'>{1}</font>
+
+>支付时间:<font color='comment'>{2}</font>
+
+ ", info.PriceName, info.Price, info.PayDt);
 
             return result;
         }
 
     }
+
+
     #region 实体类
 
-    public class GroupStatus_ApplyFeeModel { }
+    public class DailyPayReminder_Pay_ToUserModel
+    {
+        public string PriceName { get; set; }
+        public string Price { get; set; }
+        public string PayDt { get; set; }
+    }
+
+    public class DailyPayReminder_Audit_ToCaiwuChatModel
+    {
+        public string PriceName { get; set; }
+        public string Price { get; set; }
+        public string CreateUser { get; set; }
+        public string AuditDate { get; set; }
+    }
+
+    public class DailyPayReminder_Audit_ToUserModel
+    {
+
+        public string ResultColor { get; set; } = "info"; //warning
+        public string Result { get; set; } = "你有一笔日付申请已通过审核"; // 你有一笔日付申请未通过财务/总经理审核
+        public string PriceName { get; set; }
+        public string Price { get; set; }
+
+        /// <summary>
+        /// 财务或总经理审核时间
+        /// </summary>
+        public string AuditDate { get; set; }
+    }
+
+    public class DailyPayReminders_Create_ToCaiwuChatModel
+    {
+        public string PriceName { get; set; }
+        public string Price { get; set; }
+        public string CreateUser { get; set; }
+        public string CreateDt { get; set; }
+        public string FeeSign { get; set; }
+        public string Company { get; set; }
+        /// <summary>
+        /// [更新]一项费用待审核
+        /// </summary>
+        public string TitleStr { get; set; } = "[新增]一项费用待审核";
+    }
+
+    public class PayResult_Group_ToUserModel
+    {
+        public string TeamName { get; set; }
+        public string PriceModule { get; set; }
+        public string PriceName { get; set; }
+        public string Price { get; set; }
+        public string PayDt { get; set; }
+    }
+
+    public class AuditResult_ApplyFee_GroupModel
+    {
+        public string Title { get; set; } = "团组费用审核结果";
+        public string ResultColor { get; set; } = "info";  //info 或 warning
+        public string Result { get; set; } = "总经理审核通过"; //总经理审核通过 或 总经理审核未通过 
+        public string TeamName { get; set; }
+        public string PriceModule { get; set; }
+        public string PriceName { get; set; }
+        public string Price { get; set; }
+        public string CreateUser { get; set; }
+        public string GMAuditDate { get; set; }
+    }
+
+    public class GroupStatus_ApplyFeeModel
+    {
+        public string TeamName { get; set; }
+        public string PriceModule { get; set; }
+        public string PriceName { get; set; }
+        public string Price { get; set; }
+        public string CreateUser { get; set; }
+        public string CreateDt { get; set; }
+        public int QueueCount { get; set; }
+
+        /// <summary>
+        /// [更新]一项费用待审核
+        /// </summary>
+        public string TitleStr { get; set; } = "[新增]一项费用待审核"; 
+    }
 
     public class GroupStatus_CreateModel
     {

+ 723 - 4
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Library.cs

@@ -1,4 +1,7 @@
-using OASystem.Domain.Entities.Groups;
+using NPOI.SS.Formula.Functions;
+using OASystem.Domain.Entities.Financial;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels.Groups;
 using OASystem.Domain.ViewModels.QiYeWeChat;
 using OASystem.Infrastructure.Repositories.Groups;
 
@@ -10,6 +13,8 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
 
         private static readonly DelegationInfoRepository _grpDeleRep = AutofacIocManager.Instance.GetService<DelegationInfoRepository>();
 
+        #region 确认出团
+
         /// <summary>
         /// 向指定群聊发送- 确认出团 -通知
         /// </summary>
@@ -47,16 +52,295 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
         }
 
         /// <summary>
-        /// 向指定群聊发送- 费用审核 -通知
+        /// 向指定用户发送- 确认出团 -通知
+        /// </summary>
+        /// <param name="diId"></param>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        public static async Task<bool> SendUserMsg_GroupStatus_Create(int diId, List<string> userId)
+        {
+            Grp_DelegationInfo entity = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == diId).First();
+
+            string dateRange = string.Format(@"{0}至{1}", entity.VisitStartDate.ToString("yyyy-MM-dd"), entity.VisitEndDate.ToString("yyyy-MM-dd"));
+
+            string grpTypeStr = (_grpDeleRep.Query<Sys_SetData>(s => s.Id == entity.TeamDid).First()).Name;
+
+            GroupStatus_CreateModel info = new GroupStatus_CreateModel()
+            {
+                ClientName = entity.ClientName,
+                ClientUnit = entity.ClientUnit,
+                TeamName = entity.TeamName,
+                VisitDays = entity.VisitDays,
+                VisitPNumber = entity.VisitPNumber,
+                VisitDateRange = dateRange,
+                TeamDid_Text = grpTypeStr
+            };
+
+            //发送信息
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(userId, MarkdownLib.GroupStatus_Create(info));
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        #endregion
+
+        #region 团组费用审核
+
+
+        /// <summary>
+        /// 向指定群聊发送- 费用申请 -通知
         /// </summary>
         /// <param name="diId"></param>
         /// <param name="qwEnum"></param>
         /// <returns></returns>
-        public static async Task<bool> SendChatMsg_GroupStatus_ApplyFee(int diId, QiyeWeChatEnum qwEnum)
+        public static async Task<bool> SendChatMsg_GroupStatus_ApplyFee(int Grp_CreditCardPaymentId, int sign, QiyeWeChatEnum qwEnum)
+        {
+            string chatId = qwEnum.GetEnumDescription();
+
+            Grp_CreditCardPayment ccp = _grpDeleRep.Query<Grp_CreditCardPayment>(s => s.Id == Grp_CreditCardPaymentId).First();
+            Grp_DelegationInfo group = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == ccp.DIId).First();
+
+            Sys_SetData payMoneyCurrencySetData = _grpDeleRep.Query<Sys_SetData>(s => s.Id == ccp.PaymentCurrency).First();
+            string priceStr = string.Format(@"{0} {1}", ccp.PayMoney, payMoneyCurrencySetData.Name);
+
+            List<Grp_CreditCardPayment> entityList = _grpDeleRep
+                   .Query<Grp_CreditCardPayment>(s => s.DIId == ccp.DIId && s.IsDel == 0 && s.CreateUserId > 0 && s.IsAuditGM == 0)
+                   .ToList();
+            
+            GroupStatus_ApplyFeeModel info = new GroupStatus_ApplyFeeModel()
+            {
+                QueueCount = entityList.Count,
+                TeamName = group.TeamName,
+                Price = priceStr
+            };
+
+            if (sign == 2)
+            {
+                info.TitleStr = "[更新]一项费用待审核";
+            }
+
+            //CTable
+            #region CTable
+
+            if (ccp.CTable == 76)//76,酒店预订
+            {
+                Grp_HotelReservations _HotelReservations = _grpDeleRep.Query<Grp_HotelReservations>(s => s.Id == ccp.CId).First();
+                info.CreateDt = _HotelReservations.CreateTime.ToString("yyyy-MM-dd HH:mm");
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _HotelReservations.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "酒店预订";
+                info.PriceName = _HotelReservations.HotelName;
+            }
+            else if (ccp.CTable == 79) //79://车/导游地接
+            {
+                Grp_CarTouristGuideGroundReservations _CarTouristGuideGroundReservations = _grpDeleRep.Query<Grp_CarTouristGuideGroundReservations>(s => s.Id == ccp.CId).First();
+                info.CreateDt = _CarTouristGuideGroundReservations.CreateTime.ToString("yyyy-MM-dd HH:mm");
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _CarTouristGuideGroundReservations.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "车/导游地接";
+                info.PriceName = _CarTouristGuideGroundReservations.PriceName;
+            }
+            else if (ccp.CTable == 80) //签证
+            {
+                List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
+                Grp_VisaInfo _VisaInfos = _grpDeleRep.Query<Grp_VisaInfo>(s => s.Id == ccp.CId).First();
+                info.CreateDt = _VisaInfos.CreateTime.ToString("yyyy-MM-dd HH:mm");
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _VisaInfos.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "签证";
+                info.PriceName = getClientNameStr(clientNameList, _VisaInfos.VisaClient);
+            }
+            else if (ccp.CTable == 81)//邀请/公务活动
+            {
+                Grp_InvitationOfficialActivities _InvitationOfficialActivities = _grpDeleRep.Query<Grp_InvitationOfficialActivities>(s => s.Id == ccp.CId).First();
+                info.CreateDt = _InvitationOfficialActivities.CreateTime.ToString("yyyy-MM-dd HH:mm");
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _InvitationOfficialActivities.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "邀请/公务活动";
+                info.PriceName = _InvitationOfficialActivities.InviterArea;
+            }
+            else if (ccp.CTable == 82)//团组客户保险
+            {
+                List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
+                Grp_Customers _Customers = _grpDeleRep.Query<Grp_Customers>(s => s.Id == ccp.CId).First();
+                info.CreateDt = _Customers.CreateTime.ToString("yyyy-MM-dd HH:mm");
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _Customers.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "团组客户保险";
+                info.PriceName = getClientNameStr(clientNameList, _Customers.ClientName);
+            }
+            else if (ccp.CTable == 85) //机票预订
+            {
+                Grp_AirTicketReservations _AirTicketReservations = _grpDeleRep.Query<Grp_AirTicketReservations>(s => s.Id == ccp.CId).First();
+                info.CreateDt = _AirTicketReservations.CreateTime.ToString("yyyy-MM-dd HH:mm");
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _AirTicketReservations.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "机票预订";
+                info.PriceName = "(" + _AirTicketReservations.FlightsCode + ")";
+            }
+            else if (ccp.CTable == 98) //其他款项
+            {
+                Grp_DecreasePayments _DecreasePayments = _grpDeleRep.Query<Grp_DecreasePayments>(s => s.Id == ccp.CId).First();
+                info.CreateDt = _DecreasePayments.CreateTime.ToString("yyyy-MM-dd HH:mm");
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _DecreasePayments.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "其他款项";
+                info.PriceName = _DecreasePayments.PriceName;
+            }
+            #endregion
+
+
+            //发送信息
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.GroupStatus_ApplyFee(info));
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// 向财务群发送费用审核结果通知(审核通过条件下发送)
+        /// </summary>
+        /// <param name="Grp_CreditCardPaymentId"></param>
+        /// <param name="qwEnum"></param>
+        /// <returns></returns>
+        public static async Task<bool> SendChatMsg_GroupStatus_AuditFee(int Grp_CreditCardPaymentId, QiyeWeChatEnum qwEnum)
         {
+
             string chatId = qwEnum.GetEnumDescription();
+
+            Grp_CreditCardPayment ccp = _grpDeleRep.Query<Grp_CreditCardPayment>(s => s.Id == Grp_CreditCardPaymentId).First();
+            Grp_DelegationInfo group = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == ccp.DIId).First();
+
+            Sys_SetData payMoneyCurrencySetData = _grpDeleRep.Query<Sys_SetData>(s => s.Id == ccp.PaymentCurrency).First();
+            string priceStr = string.Format(@"{0} {1}", ccp.PayMoney, payMoneyCurrencySetData.Name);
+
+            AuditResult_ApplyFee_GroupModel info = new AuditResult_ApplyFee_GroupModel()
+            {
+                TeamName = group.TeamName,
+                Price = priceStr,
+                GMAuditDate = "-"
+            };
+
+            DateTime gmAuditDt;
+            bool bGMAuditDt = DateTime.TryParse(ccp.AuditGMDate, out gmAuditDt);
+            info.GMAuditDate = gmAuditDt.ToString("yyyy-MM-dd HH:mm");
+
+            //CTable
+            #region CTable
+
+            if (ccp.CTable == 76)//76,酒店预订
+            {
+                Grp_HotelReservations _HotelReservations = _grpDeleRep.Query<Grp_HotelReservations>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _HotelReservations.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "酒店预订";
+                info.PriceName = _HotelReservations.HotelName;
+            }
+            else if (ccp.CTable == 79) //79://车/导游地接
+            {
+                Grp_CarTouristGuideGroundReservations _CarTouristGuideGroundReservations = _grpDeleRep.Query<Grp_CarTouristGuideGroundReservations>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _CarTouristGuideGroundReservations.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "车/导游地接";
+                info.PriceName = _CarTouristGuideGroundReservations.PriceName;
+            }
+            else if (ccp.CTable == 80) //签证
+            {
+                List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
+                Grp_VisaInfo _VisaInfos = _grpDeleRep.Query<Grp_VisaInfo>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _VisaInfos.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "签证";
+                info.PriceName = getClientNameStr(clientNameList, _VisaInfos.VisaClient);
+            }
+            else if (ccp.CTable == 81)//邀请/公务活动
+            {
+                Grp_InvitationOfficialActivities _InvitationOfficialActivities = _grpDeleRep.Query<Grp_InvitationOfficialActivities>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _InvitationOfficialActivities.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "邀请/公务活动";
+                info.PriceName = _InvitationOfficialActivities.InviterArea;
+            }
+            else if (ccp.CTable == 82)//团组客户保险
+            {
+                List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
+                Grp_Customers _Customers = _grpDeleRep.Query<Grp_Customers>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _Customers.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "团组客户保险";
+                info.PriceName = getClientNameStr(clientNameList, _Customers.ClientName);
+            }
+            else if (ccp.CTable == 85) //机票预订
+            {
+                Grp_AirTicketReservations _AirTicketReservations = _grpDeleRep.Query<Grp_AirTicketReservations>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _AirTicketReservations.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "机票预订";
+                info.PriceName = "(" + _AirTicketReservations.FlightsCode + ")";
+            }
+            else if (ccp.CTable == 98) //其他款项
+            {
+                Grp_DecreasePayments _DecreasePayments = _grpDeleRep.Query<Grp_DecreasePayments>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _DecreasePayments.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "其他款项";
+                info.PriceName = _DecreasePayments.PriceName;
+            }
+            #endregion
+
             //发送信息
-            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.GroupStatus_ApplyFee());
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.AuditResult_ApplyFee_Chat(info));
             if (result.errcode != 0)
             {
                 //抄送日志 
@@ -65,5 +349,440 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
 
             return true;
         }
+
+
+        /// <summary>
+        /// 向指定用户发送-团组费用审核结果
+        /// </summary>
+        /// <param name="Grp_CreditCardPaymentId"></param>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        public static async Task<bool> SendUserMsg_GroupStatus_AuditFee(int Grp_CreditCardPaymentId, List<string> userId, QiyeWeChatEnum qwEnum)
+        {
+            Grp_CreditCardPayment ccp = _grpDeleRep.Query<Grp_CreditCardPayment>(s => s.Id == Grp_CreditCardPaymentId).First();
+            Grp_DelegationInfo group = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == ccp.DIId).First();
+
+            Sys_SetData payMoneyCurrencySetData = _grpDeleRep.Query<Sys_SetData>(s => s.Id == ccp.PaymentCurrency).First();
+            string priceStr = string.Format(@"{0} {1}", ccp.PayMoney, payMoneyCurrencySetData.Name);
+
+            AuditResult_ApplyFee_GroupModel info = new AuditResult_ApplyFee_GroupModel()
+            {
+                TeamName = group.TeamName,
+                Price = priceStr,
+                GMAuditDate = "-"
+            };
+
+            DateTime gmAuditDt;
+            bool bGMAuditDt = DateTime.TryParse(ccp.AuditGMDate, out gmAuditDt);
+            info.GMAuditDate = gmAuditDt.ToString("yyyy-MM-dd HH:mm");
+
+            if (ccp.IsAuditGM == 2)
+            {
+                info.Result = "总经理审核未通过";
+                info.ResultColor = "warning";
+            }
+
+            //CTable
+            #region CTable
+
+            if (ccp.CTable == 76)//76,酒店预订
+            {
+                Grp_HotelReservations _HotelReservations = _grpDeleRep.Query<Grp_HotelReservations>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _HotelReservations.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "酒店预订";
+                info.PriceName = _HotelReservations.HotelName;
+            }
+            else if (ccp.CTable == 79) //79://车/导游地接
+            {
+                Grp_CarTouristGuideGroundReservations _CarTouristGuideGroundReservations = _grpDeleRep.Query<Grp_CarTouristGuideGroundReservations>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _CarTouristGuideGroundReservations.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "车/导游地接";
+                info.PriceName = _CarTouristGuideGroundReservations.PriceName;
+            }
+            else if (ccp.CTable == 80) //签证
+            {
+                List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
+                Grp_VisaInfo _VisaInfos = _grpDeleRep.Query<Grp_VisaInfo>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _VisaInfos.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "签证";
+                info.PriceName = getClientNameStr(clientNameList, _VisaInfos.VisaClient);
+            }
+            else if (ccp.CTable == 81)//邀请/公务活动
+            {
+                Grp_InvitationOfficialActivities _InvitationOfficialActivities = _grpDeleRep.Query<Grp_InvitationOfficialActivities>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _InvitationOfficialActivities.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "邀请/公务活动";
+                info.PriceName = _InvitationOfficialActivities.InviterArea;
+            }
+            else if (ccp.CTable == 82)//团组客户保险
+            {
+                List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
+                Grp_Customers _Customers = _grpDeleRep.Query<Grp_Customers>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _Customers.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "团组客户保险";
+                info.PriceName = getClientNameStr(clientNameList, _Customers.ClientName);
+            }
+            else if (ccp.CTable == 85) //机票预订
+            {
+                Grp_AirTicketReservations _AirTicketReservations = _grpDeleRep.Query<Grp_AirTicketReservations>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _AirTicketReservations.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "机票预订";
+                info.PriceName = "(" + _AirTicketReservations.FlightsCode + ")";
+            }
+            else if (ccp.CTable == 98) //其他款项
+            {
+                Grp_DecreasePayments _DecreasePayments = _grpDeleRep.Query<Grp_DecreasePayments>(s => s.Id == ccp.CId).First();
+
+                Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _DecreasePayments.CreateUserId).First();
+                Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+                info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
+
+                info.PriceModule = "其他款项";
+                info.PriceName = _DecreasePayments.PriceName;
+            }
+            #endregion
+
+            //发送信息
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(userId, MarkdownLib.AuditResult_ApplyFee_User(info));
+            if (ccp.IsAuditGM == 1)
+            {
+                await SendChatMsg_GroupStatus_AuditFee(Grp_CreditCardPaymentId, qwEnum);
+            }
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// 向指定用户发送-团组费用支付结果
+        /// </summary>
+        /// <param name="Grp_CreditCardPaymentId"></param>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        public static async Task<bool> SendUserMsg_GroupStatus_PayResult(int Grp_CreditCardPaymentId, List<string> userId)
+        {
+            Grp_CreditCardPayment ccp = _grpDeleRep.Query<Grp_CreditCardPayment>(s => s.Id == Grp_CreditCardPaymentId).First();
+            Grp_DelegationInfo group = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == ccp.DIId).First();
+
+            Sys_SetData payMoneyCurrencySetData = _grpDeleRep.Query<Sys_SetData>(s => s.Id == ccp.PaymentCurrency).First();
+            string priceStr = string.Format(@"{0} {1}", ccp.PayMoney, payMoneyCurrencySetData.Name);
+
+            PayResult_Group_ToUserModel info = new PayResult_Group_ToUserModel()
+            {
+                PayDt = DateTime.Now.ToString("yyyy-MM-dd HH:mm"),
+                Price = priceStr,
+                TeamName = group.TeamName
+            };
+
+            #region CTable
+
+            if (ccp.CTable == 76)//76,酒店预订
+            {
+                Grp_HotelReservations _HotelReservations = _grpDeleRep.Query<Grp_HotelReservations>(s => s.Id == ccp.CId).First();
+
+                info.PriceModule = "酒店预订";
+                info.PriceName = _HotelReservations.HotelName;
+            }
+            else if (ccp.CTable == 79) //79://车/导游地接
+            {
+                Grp_CarTouristGuideGroundReservations _CarTouristGuideGroundReservations = _grpDeleRep.Query<Grp_CarTouristGuideGroundReservations>(s => s.Id == ccp.CId).First();
+
+                info.PriceModule = "车/导游地接";
+                info.PriceName = _CarTouristGuideGroundReservations.PriceName;
+            }
+            else if (ccp.CTable == 80) //签证
+            {
+                List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
+                Grp_VisaInfo _VisaInfos = _grpDeleRep.Query<Grp_VisaInfo>(s => s.Id == ccp.CId).First();
+
+                info.PriceModule = "签证";
+                info.PriceName = getClientNameStr(clientNameList, _VisaInfos.VisaClient);
+            }
+            else if (ccp.CTable == 81)//邀请/公务活动
+            {
+                Grp_InvitationOfficialActivities _InvitationOfficialActivities = _grpDeleRep.Query<Grp_InvitationOfficialActivities>(s => s.Id == ccp.CId).First();
+
+                info.PriceModule = "邀请/公务活动";
+                info.PriceName = _InvitationOfficialActivities.InviterArea;
+            }
+            else if (ccp.CTable == 82)//团组客户保险
+            {
+                List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
+                Grp_Customers _Customers = _grpDeleRep.Query<Grp_Customers>(s => s.Id == ccp.CId).First();
+
+                info.PriceModule = "团组客户保险";
+                info.PriceName = getClientNameStr(clientNameList, _Customers.ClientName);
+            }
+            else if (ccp.CTable == 85) //机票预订
+            {
+                Grp_AirTicketReservations _AirTicketReservations = _grpDeleRep.Query<Grp_AirTicketReservations>(s => s.Id == ccp.CId).First();
+
+                info.PriceModule = "机票预订";
+                info.PriceName = "(" + _AirTicketReservations.FlightsCode + ")";
+            }
+            else if (ccp.CTable == 98) //其他款项
+            {
+                Grp_DecreasePayments _DecreasePayments = _grpDeleRep.Query<Grp_DecreasePayments>(s => s.Id == ccp.CId).First();
+
+                info.PriceModule = "其他款项";
+                info.PriceName = _DecreasePayments.PriceName;
+            }
+            #endregion
+
+            //发送信息
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(userId, MarkdownLib.PayResult_Group_ToUser(info));
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        #endregion
+
+        #region 团组出发、结束提醒(财务群)
+
+        public static async Task<bool> SendChatMsg_GroupRemindersToCaiwu(List<Grp_DelegationInfo> list_7day, List<Grp_DelegationInfo> list_3day, QiyeWeChatEnum qwEnum)
+        {
+            string chatId = qwEnum.GetEnumDescription();
+
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.GroupRemindersToCaiwuChat(list_7day, list_3day));
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        #endregion
+
+        #region 日付申请审核
+
+        /// <summary>
+        ///  日付申请提交时推送财务群
+        /// </summary>
+        /// <param name="dailyPayId"></param>
+        /// <param name="qwEnum"></param>
+        /// <returns></returns>
+        public static async Task<bool> DailyPayReminders_Create_ToCaiwuChat(int dailyPayId, int sign, QiyeWeChatEnum qwEnum)
+        {
+            string chatId = qwEnum.GetEnumDescription();
+            Fin_DailyFeePayment fin_DailyFeePayment = _grpDeleRep.Query<Fin_DailyFeePayment>(s => s.Id == dailyPayId).First();
+
+            Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == fin_DailyFeePayment.CreateUserId).First();
+            Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+            string users = string.Format(@"{0}-{1}", user.CnName, job.JobName);
+
+            string[] companyArr = new string[] { "未知", "成都泛美商务有限公司", "四川泛美交流有限公司", "成都纽茵教育科技有限公司", "成都鸿企中元科技有限公司", "测试公司1" };
+            string companyStr = "未知";
+            if (fin_DailyFeePayment.CompanyId < companyArr.Length)
+            {
+                companyStr = companyArr[fin_DailyFeePayment.CompanyId];
+            }
+
+            Sys_SetData sd_tansferType = _grpDeleRep.Query<Sys_SetData>(s => s.Id == fin_DailyFeePayment.TransferTypeId).First();
+            Sys_SetData sd_priceType = _grpDeleRep.Query<Sys_SetData>(s => s.Id == fin_DailyFeePayment.PriceTypeId).First();
+            string feeSignStr = string.Format(@"{0}-{1}", sd_tansferType.Name, sd_priceType.Name);
+
+            string priceStr = fin_DailyFeePayment.SumPrice.ToString("#0.00");
+
+
+
+            DailyPayReminders_Create_ToCaiwuChatModel info = new DailyPayReminders_Create_ToCaiwuChatModel()
+            {
+                CreateDt = fin_DailyFeePayment.CreateTime.ToString("yyyy-MM-dd HH:mm"),
+                CreateUser = users,
+                Price = priceStr,
+                Company = companyStr,
+                FeeSign = feeSignStr,
+                PriceName = fin_DailyFeePayment.Instructions
+
+            };
+
+            if (sign == 2)
+            {
+                info.TitleStr = "[更新]一项费用待审核";
+            }
+
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.DailyPayReminders_Create_ToCaiwuChat(info));
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// 日付申请审核结果推送给申请人
+        /// </summary>
+        /// <param name="dailyPayId"></param>
+        /// <param name="userId"></param>
+        /// <param name="qwEnum"></param>
+        /// <returns></returns>
+        public static async Task<bool> DailyPayReminder_Audit_ToUser(int dailyPayId, List<string> userId, QiyeWeChatEnum qwEnum)
+        {
+            Fin_DailyFeePayment fin_DailyFeePayment = _grpDeleRep.Query<Fin_DailyFeePayment>(s => s.Id == dailyPayId).First();
+
+            Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == fin_DailyFeePayment.CreateUserId).First();
+            Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
+            string users = string.Format(@"{0}-{1}", user.CnName, job.JobName);
+
+            string priceStr = fin_DailyFeePayment.SumPrice.ToString("#0.00");
+
+            DailyPayReminder_Audit_ToUserModel info = new DailyPayReminder_Audit_ToUserModel()
+            {
+                Price = priceStr,
+                PriceName = fin_DailyFeePayment.Instructions
+            };
+
+            if (fin_DailyFeePayment.FAudit == 1)
+            {
+                info.AuditDate = fin_DailyFeePayment.MAuditDate.ToString("yyyy-MM-dd HH:mm");
+                if (fin_DailyFeePayment.MAudit == 1)
+                {
+                    info.Result = "你有一笔日付申请已通过审核";
+                    info.ResultColor = "info";
+
+                    //发送至财务群
+
+                    DailyPayReminder_Audit_ToCaiwuChatModel chatInfo = new DailyPayReminder_Audit_ToCaiwuChatModel()
+                    {
+                        AuditDate = info.AuditDate,
+                        CreateUser = users,
+                        Price = priceStr,
+                        PriceName = fin_DailyFeePayment.Instructions
+                    };
+
+                    string chatId = qwEnum.GetEnumDescription();
+                    await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.DailyPayReminder_Audit_ToCaiwuChat(chatInfo));
+                }
+                else if (fin_DailyFeePayment.MAudit == 2)
+                {
+                    info.Result = "你有一笔日付申请未通过总经理审核";
+                    info.ResultColor = "warning";
+                }
+            }
+            else if (fin_DailyFeePayment.FAudit == 2)
+            {
+                info.AuditDate = fin_DailyFeePayment.FAuditDate.ToString("yyyy-MM-dd HH:mm");
+                info.Result = "你有一笔日付申请未通过财务审核";
+                info.ResultColor = "warning";
+            }
+
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(userId, MarkdownLib.DailyPayReminder_Audit_ToUser(info));
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// 日付申请已付款推送给申请人
+        /// </summary>
+        /// <returns></returns>
+        public static async Task<bool> DailyPayReminder_Pay_ToUser(int dailyPayId, List<string> userId)
+        {
+            Fin_DailyFeePayment fin_DailyFeePayment = _grpDeleRep.Query<Fin_DailyFeePayment>(s => s.Id == dailyPayId).First();
+            string priceStr = fin_DailyFeePayment.SumPrice.ToString("#0.00");
+
+            DailyPayReminder_Pay_ToUserModel info = new DailyPayReminder_Pay_ToUserModel()
+            {
+                PayDt = DateTime.Now.ToString("yyyy-MM-dd HH:mm"),
+                PriceName = fin_DailyFeePayment.Instructions,
+                Price = priceStr
+            };
+
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(userId, MarkdownLib.DailyPayReminder_Pay_ToUser(info));
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        #endregion
+
+        #region Helper
+
+        private static string getClientNameStr(List<SimplClientInfo> list, string origin)
+        {
+            string result = origin;
+
+            if (Regex.Match(origin, @"\d+,?").Value.Length > 0)
+            {
+                string[] temparr = origin.Split(',');
+                string fistrStr = temparr[0];
+                int count = temparr.Count();
+
+                int tempId;
+                bool success = int.TryParse(fistrStr, out tempId);
+                if (success)
+                {
+                    SimplClientInfo tempInfo = list.FirstOrDefault(s => s.Id == tempId);
+                    if (tempInfo != null)
+                    {
+                        if (count > 1)
+                        {
+                            result = string.Format(@"{0}{1}等{2}人", tempInfo.LastName, tempInfo.FirstName, count);
+                        }
+                        else
+                        {
+                            result = string.Format(@"{0}{1}", tempInfo.LastName, tempInfo.FirstName);
+                        }
+                    }
+                }
+            }
+
+            return result;
+        }
+
+        private static List<SimplClientInfo> getSimplClientList(int diId)
+        {
+            string sql = string.Format("select b.Id,b.Pinyin,b.lastName,b.firstName,b.phone from  Grp_TourClientList a, Crm_DeleClient b where a.clientid = b.id and a.isdel = 0 and a.diid = {0}", diId);
+            List<SimplClientInfo> arr = _grpDeleRep._sqlSugar.SqlQueryable<SimplClientInfo>(sql).ToList();
+            return arr;
+        }
+
+        #endregion
+
     }
 }

+ 1 - 1
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/IQiYeWeChatApiService.cs

@@ -184,7 +184,7 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
         /// <param name="msgContent"></param>
         /// <param name="msgType"></param>
         /// <returns></returns>
-        Task<GroupStatus_SendMessageView> GroupStatus_SendMessage_ToUser(string toUser, string msgContent, string msgType = "markdown");
+        Task<GroupStatus_SendMessageView> GroupStatus_SendMessage_ToUser_Markdown(List<string> toUser, string msgContent, string msgType = "markdown");
         #endregion
     }
 }

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

@@ -180,14 +180,15 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
         /// 获取成员信息
         /// </summary>
         /// <returns></returns>
-        public async Task<QYWX_UserInfosView> GetUserInfosAsync() {
+        public async Task<QYWX_UserInfosView> GetUserInfosAsync()
+        {
 
             QYWX_UserInfosView infoViews = new QYWX_UserInfosView();
 
             //获取员工useridList
             UserIdListView useridView = await GetUserIdListAsync();
 
-            if (useridView.errcode != 0 )
+            if (useridView.errcode != 0)
             {
                 infoViews.errcode = useridView.errcode;
                 infoViews.errmsg = useridView.errmsg;
@@ -1517,9 +1518,48 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
             return result;
         }
 
-        public Task<GroupStatus_SendMessageView> GroupStatus_SendMessage_ToUser(string toUser, string msgContent, string msgType = "markdown")
+        /// <summary>
+        /// 向用户发送Markdown信息
+        /// </summary>
+        /// <param name="toUser"></param>
+        /// <param name="msgContent"></param>
+        /// <param name="msgType"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<GroupStatus_SendMessageView> GroupStatus_SendMessage_ToUser_Markdown(List<string> toUser, string msgContent, string msgType = "markdown")
         {
-            throw new NotImplementedException();
+            GroupStatus_SendMessageView result = new GroupStatus_SendMessageView();
+
+            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;
+            }
+
+            RobotSendMsg_GroupInfo_Content markdown = new RobotSendMsg_GroupInfo_Content() { content = msgContent };
+            string userIds = "";
+            toUser.ForEach(s => userIds += s + "|");
+            userIds = userIds.TrimEnd('|');
+
+            GroupStatus_AppSend_Markdown reqJson = new GroupStatus_AppSend_Markdown()
+            {
+                markdown = markdown,
+                touser = userIds
+            };
+
+
+            string url = string.Format("/cgi-bin/message/send?access_token={0}", 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_SendMessageView>(stringResponse,
+                new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
+
+            return result;
         }
 
 

+ 6 - 26
OASystem/OASystem.Api/OAMethodLib/Quartz/Business/DeleReminderMessage.cs

@@ -1,5 +1,6 @@
 using OASystem.API.OAMethodLib.ALiYun;
 using OASystem.API.OAMethodLib.QiYeWeChatAPI;
+using OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice;
 using OASystem.Domain.Dtos.Business;
 using OASystem.Domain.Entities.Business;
 using OASystem.Domain.Entities.Groups;
@@ -91,38 +92,17 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
         public static async void PostMessageByWebhook()
         {
             DateTime dtNow = DateTime.Now;
-            string add2day = dtNow.AddDays(3).ToString("yyyy-MM-dd"); //结束出访前3天
+            string add3day = dtNow.AddDays(3).ToString("yyyy-MM-dd"); //结束出访前3天
             string add7day = dtNow.AddDays(7).ToString("yyyy-MM-dd"); //开始出访前1周
 
-            string sql = string.Format(@" Select * From Grp_DelegationInfo With(Nolock) Where IsDel=0 And VisitEndDate ='{0}' Or VisitStartDate='{1}' ", add2day, add7day);
+            string sql = string.Format(@" Select * From Grp_DelegationInfo With(Nolock) Where IsDel=0 And VisitEndDate ='{0}' Or VisitStartDate='{1}' ", add3day, add7day);
             List<Grp_DelegationInfo> list_source = _grpDeleRep._sqlSugar.SqlQueryable<Grp_DelegationInfo>(sql).ToList();
 
-            if (list_source.Count > 0)
-            {
-                List<Grp_DelegationInfo> listAdd7day = list_source.Where(s => s.VisitStartDate.Equals(add7day)).ToList();
-                List<Grp_DelegationInfo> listAdd2day = list_source.Where(s => s.VisitEndDate.Equals(add2day)).ToList();
-                string dayStr = dtNow.ToString("yyyy年MM月dd日");
-                string content = string.Format(@" 今天是{0},\n ", dayStr);
-
-                if (listAdd7day.Count > 0)
-                {
-                    string tempStr1 = string.Format(@" \n\n检查到7天后开始的团组数量: <font color='warning'>** {1} **</font>\n ", dayStr, listAdd7day.Count);
-                    listAdd7day.ForEach(s => tempStr1 += string.Format(@">{0} \n", s.TeamName));
-                    content += tempStr1;
-                }
+            List<Grp_DelegationInfo> listAdd7day = list_source.Where(s => s.VisitStartDate.Equals(add7day)).ToList();
+            List<Grp_DelegationInfo> listAdd3day = list_source.Where(s => s.VisitEndDate.Equals(add3day)).ToList();
 
-                if (listAdd2day.Count > 0)
-                {
-                    string tempStr2 = string.Format(@" \n\n检查到3天后结束的团组数量: <font color='info'>** {1} **</font>\n ", dayStr, listAdd2day.Count);
-                    listAdd7day.ForEach(s => tempStr2 += string.Format(@">{0} \n", s.TeamName));
-                    content += tempStr2;
-                }
+            await AppNoticeLibrary.SendChatMsg_GroupRemindersToCaiwu(listAdd7day, listAdd3day, QiyeWeChatEnum.CaiWuChat);
 
-                content += string.Format(@"\n\n请注检查合同、款项等信息");
-
-
-                OASystem.Domain.ViewModels.QiYeWeChat.ResponseBase result = await _qiYeWeChatApiService.RobotSendMsg_GroupInfo(content);
-            }
         }
     }
 }

+ 1 - 1
OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/ALiYunPostMessageJob.cs

@@ -15,7 +15,7 @@ namespace QuzrtzJob.Factory
         {
             _logger.LogInformation("调用阿里云短信接口 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
             //在此处编写任务业务代码
-            DeleReminderMessage.PostMessage();
+            DeleReminderMessage.PostMessageByWebhook();
 
             return Task.CompletedTask;
         }

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

@@ -153,4 +153,47 @@ namespace OASystem.Domain.Dtos.QiYeWeChat
         public string msgtype { get; set; }
         public RobotSendMsg_GroupInfo_Content markdown { get; set; }
     }
+
+    public class GroupStatus_AppSend_Markdown
+    {
+        /// <summary>
+        /// 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
+        /// </summary>
+        public string touser { get; set; } = "";
+
+        /// <summary>
+        /// 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
+        /// </summary>
+        public string toparty { get; set; } = "";
+
+        /// <summary>
+        /// 标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
+        /// </summary>
+        public string totag { get; set; } = "";
+
+        /// <summary>
+        /// 消息类型,此时固定为:markdown
+        /// </summary>
+        public string msgtype { get; set; } = "markdown";
+
+        /// <summary>
+        /// 企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值
+        /// </summary>
+        public int agentid { get; set; } = 1000008;
+
+        /// <summary>
+        /// markdown内容,最长不超过2048个字节,必须是utf8编码
+        /// </summary>
+        public RobotSendMsg_GroupInfo_Content markdown { get; set; }
+
+        /// <summary>
+        /// 表示是否开启重复消息检查,0表示否,1表示是,默认0
+        /// </summary>
+        public int enable_duplicate_check { get; set; } = 0;
+
+        /// <summary>
+        /// 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时
+        /// </summary>
+        public int duplicate_check_interval { get; set; } = 1800;
+    }
 }

+ 5 - 0
OASystem/OASystem.Domain/Entities/System/Sys_Users.cs

@@ -157,6 +157,11 @@ namespace OASystem.Domain.Entities.System
         [SugarColumn(IsNullable = true,ColumnDataType ="int")]
         public int HrAudit { get; set; }
 
+        /// <summary>
+        /// 企微Id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string QiyeChatUserId { get; set; }
     }
 
     #region 附加字段

+ 11 - 5
OASystem/OASystem.Infrastructure/Repositories/Financial/DailyFeePaymentRepository.cs

@@ -1,4 +1,5 @@
 using AutoMapper;
+using NPOI.SS.Formula.Functions;
 using OASystem.Domain;
 using OASystem.Domain.Dtos;
 using OASystem.Domain.Dtos.Financial;
@@ -233,7 +234,7 @@ namespace OASystem.Infrastructure.Repositories.Financial
                                                 ) temp ", sqlWhere);
             #endregion
 
-           
+
             if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web
             {
                 //Fin_DailyFeePaymentPageCount
@@ -241,7 +242,7 @@ namespace OASystem.Infrastructure.Repositories.Financial
                 var DailyFeePaymentData = await _sqlSugar.SqlQueryable<Fin_DailyFeePaymentPageListView>(sqlPage).ToListAsync();
 
                 int totalCount = dailyFeePaymentCount.Count;
-                
+
                 dailyFeePaymentPageList = new ListViewBase<Fin_DailyFeePaymentPageListView>
                 {
                     CurrPageIndex = dto.PageIndex,
@@ -332,9 +333,12 @@ namespace OASystem.Infrastructure.Repositories.Financial
                     }
                     await _sqlSugar.Insertable(_feeContents).ExecuteCommandAsync();
                 }
-               
+
                 _sqlSugar.CommitTran();
                 result.Code = 0;
+
+                var data = new { dailyId = feeId, sign = 1 };
+                result.Data = data;
             }
             catch (Exception ex)
             {
@@ -428,6 +432,8 @@ namespace OASystem.Infrastructure.Repositories.Financial
 
                 _sqlSugar.CommitTran();
                 result.Code = 0;
+                var data = new { dailyId = dto.Id, sign = 2 };
+                result.Data = data;
             }
             catch (Exception ex)
             {
@@ -451,7 +457,7 @@ namespace OASystem.Infrastructure.Repositories.Financial
                                   .Where(a => a.Id == dto.Id)
                                   .SetColumns(a => new Fin_DailyFeePayment
                                   {
-                                      IsDel =1,
+                                      IsDel = 1,
                                       DeleteUserId = dto.Id,
                                       DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                   }).ExecuteCommandAsync();
@@ -501,6 +507,6 @@ namespace OASystem.Infrastructure.Repositories.Financial
             return result;
         }
 
-        
+
     }
 }

+ 1 - 1
OASystem/OASystem.Infrastructure/Repositories/Financial/ProceedsReceivedRepository.cs

@@ -257,7 +257,7 @@ namespace OASystem.Infrastructure.Repositories.Financial
                 return result;
             }
 
-
+            
             int addCount = 0, updateCount = 0;
             if (dto.PortType == 1)
             {

+ 8 - 3
OASystem/OASystem.Infrastructure/Repositories/Groups/AirTicketResRepository.cs

@@ -29,6 +29,7 @@ using Aspose.Words.Tables;
 using Aspose.Words;
 using System.Reflection;
 using OASystem.Domain.Entities.Financial;
+using NPOI.SS.Formula.Functions;
 
 namespace OASystem.Infrastructure.Repositories.Groups
 {
@@ -630,8 +631,9 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             FlightsDescription = dto.AirTicketResOpData.FlightsDescription,
                         });
                         CommitTran();
-                        
-                        return result = new Result() { Code = 0, Msg = "添加成功!" };
+
+                        var data = new { ccpId = id, sign = 1 };
+                        return result = new Result() { Code = 0, Msg = "添加成功!", Data = data };
                     }
                     else
                     {
@@ -855,7 +857,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         }
                         else
                         {
-                            result = new Result() { Code = 0, Msg = "修改成功!" };
+                            Grp_CreditCardPayment ccp = Query<Grp_CreditCardPayment>(a => a.Id == dto.CardPaymentOpData.Id).First();
+
+                            var data = new { ccpId = ccp.Id, sign = 2 };
+                            result = new Result() { Code = 0, Msg = "修改成功!", Data = data };
                         }
                     }
                     else

+ 22 - 13
OASystem/OASystem.Infrastructure/Repositories/Groups/CarTouristGuideGroundRepository.cs

@@ -62,6 +62,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         }
                         else
                         {
+
+
                             result = new Result() { Code = 0, Msg = "添加成功!" };
                         }
 
@@ -395,7 +397,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         checkedItemId = weiKuanArr.Select(x => x.Id).ToList();
                         checkedItem = weiKuanArr.Select(x => x.Name).ToList();
                     }
-                   
+
                     var weiPrice = weiKuanResultArr.Find(x => x.SId == 1070);
                     if (weiPrice != null)
                     {
@@ -742,7 +744,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     var addsTourClientList = new List<Grp_TourClientList>();
                     var carExtraList = carTouristList.Where(x => x.SId == 982 && x.Price != 0).ToList();
                     var mealPriceList = carTouristList.Where(x => (x.SId == 93 || x.SId == 988 || x.SId == 989) && x.Price != 0).GroupBy(x => x.DatePrice).ToList();
-                    var tgOvertime = carTouristList.Where(x => x.SId == 1059 && x.Price != 0 ).ToList();
+                    var tgOvertime = carTouristList.Where(x => x.SId == 1059 && x.Price != 0).ToList();
 
                     //成本数据
                     List<Grp_GroupCost> _GroupCosts = new List<Grp_GroupCost>();
@@ -803,7 +805,7 @@ 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;
+                        priceCity = cityPrice == null ? string.Empty : cityPrice.Country + cityPrice?.City;
                     }
                     else
                     {
@@ -836,7 +838,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                 Coefficient = 1,
                                 DiId = dto.DiId,
                                 PriceCurrency = item.Currency,
-                                PriceName = di.TeamName +"-"+ priceCity + "-" + "车超时费(地接导入)",
+                                PriceName = di.TeamName + "-" + priceCity + "-" + "车超时费(地接导入)",
                                 PriceType = 1028,
                                 PriceDt = item.DatePrice.ObjToDate(),
                                 PriceSum = item.Price * item.Count,
@@ -888,12 +890,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         {
                             foreach (DataRow item in tb.Rows)
                             {
-                                var listTime =  Convert.ToDateTime(item["日期"]);
-                                var costFliterArr = _GroupCosts.Where(x => DateTime.TryParse(x.Date, out DateTime costData) 
+                                var listTime = Convert.ToDateTime(item["日期"]);
+                                var costFliterArr = _GroupCosts.Where(x => DateTime.TryParse(x.Date, out DateTime costData)
                                 && costData.ToString("yyyy-MM-dd") == listTime.ToString("yyyy-MM-dd")).ToList();
 
                                 //成本日期费用
-                                decimal foodCost = (costFliterArr.Sum(x=>x.D) + costFliterArr.Sum(x => x.L) + costFliterArr.Sum(x => x.B)) * di.VisitPNumber;
+                                decimal foodCost = (costFliterArr.Sum(x => x.D) + costFliterArr.Sum(x => x.L) + costFliterArr.Sum(x => x.B)) * di.VisitPNumber;
 
                                 var price = Convert.ToDecimal(item["费用"]);
                                 if (item["币种"].ToString() != _GroupCostParameters.Currency.ToString().Trim()) //币种不相同
@@ -902,9 +904,9 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                     var b = _GroupCostParameters.Currency.ToString().Trim();
 
                                     //币种str匹配不上在匹配Name
-                                    if (int.TryParse(a,out int a1))
+                                    if (int.TryParse(a, out int a1))
                                     {
-                                        a = _sqlSugar.Queryable<Sys_SetData>().First(x=>x.IsDel ==0 && x.Id == a1).Name; 
+                                        a = _sqlSugar.Queryable<Sys_SetData>().First(x => x.IsDel == 0 && x.Id == a1).Name;
                                     }
 
                                     if (int.TryParse(b, out int b1))
@@ -912,7 +914,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                         b = _sqlSugar.Queryable<Sys_SetData>().First(x => x.IsDel == 0 && x.Id == b1).Name;
                                     }
 
-                                    if (a != b) 
+                                    if (a != b)
                                     {
                                         //全部转换为rmb;
                                         item["费用"] = price * currOp;
@@ -1104,7 +1106,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 //}
                 #endregion
 
-                var rate = await _setDataRep.PostCurrencyByDiid(dto.DiId, 79 ,dto.Currency);
+                var rate = await _setDataRep.PostCurrencyByDiid(dto.DiId, 79, dto.Currency);
                 if (rate.Code == 0)
                 {
                     var rateData = rate.Data as CurrencyInfo;
@@ -1114,6 +1116,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         c.DayRate = rateData.Rate;
                     }
                 }
+                int noticeSign = 1; //企业微信通知标识
+                int noticeCcpId = 0;
 
                 Grp_CreditCardPayment grp_CreditCard = _sqlSugar.Queryable<Grp_CreditCardPayment>().First(a => a.CId == dto.CTGGRId && a.IsDel == 0 && a.CTable == 79 && a.DIId == dto.DiId);
                 if (grp_CreditCard != null)//修改
@@ -1132,7 +1136,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         DayRate = c.DayRate,
 
                     }).ExecuteCommandAsync();
-
+                    noticeSign = 2;
+                    noticeCcpId = grp_CreditCard.Id;
                     if (CTable == 0)
                     {
                         RollbackTran();
@@ -1142,12 +1147,14 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 else//添加
                 {
                     int id = await _sqlSugar.Insertable(c).ExecuteReturnIdentityAsync();
+                    noticeCcpId = id;
                     if (id == 0)
                     {
                         RollbackTran();
                         return result = new Result() { Code = -2, Msg = "添加失败" };
                     }
                 }
+
                 int CarTouristGuideCTable = await _sqlSugar.Updateable<Grp_CarTouristGuideGroundReservations>().Where(a => a.Id == dto.CTGGRId && a.DiId == dto.DiId && a.IsDel == 0).SetColumns(a => new Grp_CarTouristGuideGroundReservations
                 {
                     CId = dto.Currency,
@@ -1161,7 +1168,9 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     RollbackTran();
                     return result = new Result() { Code = -2, Msg = "修改失败" };
                 }
-                result = new Result() { Code = 0, Msg = "保存成功" };
+
+                var data = new { ccpId = noticeCcpId, sign = noticeSign };
+                result = new Result() { Code = 0, Msg = "保存成功", Data = data };
                 CommitTran();
             }
             catch (Exception ex)

+ 26 - 21
OASystem/OASystem.Infrastructure/Repositories/Groups/CustomersRepository.cs

@@ -24,7 +24,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         private readonly IMapper _mapper;
         private readonly TeamRateRepository _teamRateRep;
 
-        public CustomersRepository(SqlSugarClient sqlSugar, IMapper mapper, TeamRateRepository teamRateRep) 
+        public CustomersRepository(SqlSugarClient sqlSugar, IMapper mapper, TeamRateRepository teamRateRep)
             : base(sqlSugar)
         {
             _mapper = mapper;
@@ -68,8 +68,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                     var parseIntValue = 0;
                     var CrmIds = (from item in Customers
-                                 where item.ClientName.Contains(",") || int.TryParse(item.ClientName, out parseIntValue)
-                                 select item.ClientName).ToList();
+                                  where item.ClientName.Contains(",") || int.TryParse(item.ClientName, out parseIntValue)
+                                  select item.ClientName).ToList();
                     var strCrmIds = string.Join(',', CrmIds);
                     List<Crm_DeleClient> clietArr = new List<Crm_DeleClient>();
                     if (!string.IsNullOrWhiteSpace(strCrmIds))
@@ -96,8 +96,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             {
                                 if (int.TryParse(client, out parseIntValue))
                                 {
-                                   var clientObject = clietArr.Find(x => x.Id == parseIntValue);
-                                   name += (clientObject?.LastName + clientObject?.FirstName + " ");
+                                    var clientObject = clietArr.Find(x => x.Id == parseIntValue);
+                                    name += (clientObject?.LastName + clientObject?.FirstName + " ");
                                 }
                             }
 
@@ -247,7 +247,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
             Result result = new Result() { Code = -2, Msg = "未知错误" };
             try
             {
-                Grp_Customers grp_Customers = _sqlSugar.Queryable<Grp_Customers>().First(a=>a.Id==dto.Id && a.IsDel==0);
+                Grp_Customers grp_Customers = _sqlSugar.Queryable<Grp_Customers>().First(a => a.Id == dto.Id && a.IsDel == 0);
                 CustomersByIdView customersById = _mapper.Map<CustomersByIdView>(grp_Customers);
 
                 if (customersById != null)
@@ -264,7 +264,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         customersById.InsuranceBalance = Math.Round(Iid.RechargeCost - dataCount.CountCost, 2);
                     }
 
-                    
+
 
                     Sys_SetData Currency = _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == customersById.Currency);
                     if (Currency != null) customersById.CurrencyStr = Currency.Name;
@@ -274,13 +274,13 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                     Sys_SetData CTDId = _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == creditCardView.CTDId);
                     if (CTDId != null) creditCardView.CTDIdStr = CTDId.Name;
-                    creditCardView.OrbitalPrivateTransferStr= creditCardView.OrbitalPrivateTransfer== 0 ? "公转" : "私转";
-                    
-                    Sys_SetData PaymentCurrency= _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == creditCardView.PaymentCurrency);
+                    creditCardView.OrbitalPrivateTransferStr = creditCardView.OrbitalPrivateTransfer == 0 ? "公转" : "私转";
+
+                    Sys_SetData PaymentCurrency = _sqlSugar.Queryable<Sys_SetData>().First(a => a.IsDel == 0 && a.Id == creditCardView.PaymentCurrency);
                     if (PaymentCurrency != null) creditCardView.PaymentCurrencyStr = PaymentCurrency.Name;
 
-                    
-                   
+
+
                     var data = new
                     {
                         customers = customersById,
@@ -308,8 +308,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
             Result result = new Result() { Code = -2, Msg = "未知错误" };
             try
             {
-                
-                
+
+
                 List<Sys_SetData> Payment = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 14 && a.IsDel == 0).ToList();
                 List<SetDataInfoView> _Payment = _mapper.Map<List<SetDataInfoView>>(Payment);
 
@@ -318,13 +318,13 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 List<SetDataCurrencyInfoView> _BankCard = _mapper.Map<List<SetDataCurrencyInfoView>>(BankCard);
 
                 //保险名称
-                List<Grp_InsuranceCost> _InsuranceCosts=_sqlSugar.Queryable<Grp_InsuranceCost>().Where(a=>a.IsDel==0).ToList();
+                List<Grp_InsuranceCost> _InsuranceCosts = _sqlSugar.Queryable<Grp_InsuranceCost>().Where(a => a.IsDel == 0).ToList();
                 List<InsuranceCostView> insuranceCostViews = new List<InsuranceCostView>();
                 foreach (var item in _InsuranceCosts)
                 {
-                    InsuranceCostView costView=new InsuranceCostView();
-                    costView.Id=item.Id;
-                    costView.GName=item.GName;
+                    InsuranceCostView costView = new InsuranceCostView();
+                    costView.Id = item.Id;
+                    costView.GName = item.GName;
                     costView.Balance = 0.00M;
                     string CountSql = string.Format(@"select sum(InsuranceCosts) as CountCost from Grp_Customers where isdel=0 and Iid=" + item.Id);
                     DataCountCost dataCount = _sqlSugar.SqlQueryable<DataCountCost>(CountSql).First();
@@ -339,7 +339,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 PostGroupTeamRatedto.PortType = dto.PortType;
 
                 var _teamRate = await _teamRateRep.PostGroupTeamRateItemByDiIdAndCTableId(dto.PortType, dto.DiId, 82);
-                
+
                 var data = new
                 {
                     Payment = _Payment,
@@ -412,7 +412,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             int cId = await _sqlSugar.Insertable(c).ExecuteReturnIdentityAsync();
                             if (cId != 0)
                             {
-                                result = new Result() { Code = 0, Msg = "添加成功!" };
+                                var data = new { ccpId = cId, sign = 1 };
+                                result = new Result() { Code = 0, Msg = "添加成功!", Data = data };
 
                             }
                             else
@@ -472,7 +473,11 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         }
                         else
                         {
-                            result = new Result() { Code = 0, Msg = "修改成功!" };
+                            Grp_CreditCardPayment ccp = Query<Grp_CreditCardPayment>(a => a.CId == cus.Id && a.CTable == 82).First();
+
+                            var data = new { ccpId = ccp.Id, sign = 2 };
+
+                            result = new Result() { Code = 0, Msg = "修改成功!", Data = data };
                         }
 
                     }

+ 8 - 2
OASystem/OASystem.Infrastructure/Repositories/Groups/DecreasePaymentsRepository.cs

@@ -1,4 +1,5 @@
 using AutoMapper;
+using NPOI.SS.Formula.Functions;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Entities.Financial;
@@ -225,7 +226,9 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         if (cId != 0)
                         {
                             CommitTran();
-                            return new Result() { Code = 0, Msg = "添加成功!" };
+
+                            var data = new { ccpId = cId, sign = 1 };
+                            return new Result() { Code = 0, Msg = "添加成功!", Data = data };
                         }
                         else
                         {
@@ -296,7 +299,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             if (CTable > 0)
                             {
                                 CommitTran();
-                                return new Result() { Code = 0, Msg = "修改成功!" };
+
+                                var data = new { ccpId = grp_CreditCardPayment.Id, sign = 2 };
+
+                                return new Result() { Code = 0, Msg = "修改成功!", Data = data };
                             }
                             else
                             {

+ 3 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs

@@ -12,6 +12,7 @@ using OASystem.Domain.ViewModels.Financial;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Infrastructure.Repositories.Resource;
 using OASystem.Infrastructure.Tools;
+using Org.BouncyCastle.Asn1.Ocsp;
 using SqlSugar;
 using StackExchange.Redis;
 using System;
@@ -942,6 +943,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                     _result.Msg = "操作成功!";
                     _result.Code = 0;
+                    _result.Data = new { ccpId = ccpId, sign = 1 };
                     _sqlSugar.CommitTran(); // 提交
                 }
                 else if (_dto.Id > 0) //Edit
@@ -1041,6 +1043,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                     _result.Msg = "操作成功!";
                     _result.Code = 0;
+                    _result.Data = new { ccpId = _CreditCardPayment.Id, sign = 2 };
                     _sqlSugar.CommitTran(); // 提交
                 }
                 else if (_dto.Id < 0) //不正确的Id

+ 4 - 2
OASystem/OASystem.Infrastructure/Repositories/Groups/InvitationOfficialActivitiesRepository.cs

@@ -395,9 +395,10 @@ Order By i.id  Desc ", sqlWhere);
                             }
 
                             int cId = await _sqlSugar.Insertable(C).ExecuteReturnIdentityAsync();
+                            var data = new { ccpId = cId, sign = 1 };
                             if (cId != 0)
                             {
-                                result = new Result() { Code = 0, Msg = "添加成功!" };
+                                result = new Result() { Code = 0, Msg = "添加成功!", Data = data };
                             }
                             else
                             {
@@ -519,7 +520,8 @@ Order By i.id  Desc ", sqlWhere);
                                                         }).ExecuteCommandAsync();
                             if (CTable != 0)
                             {
-                                result = new Result() { Code = 0, Msg = "修改成功!" };
+                                var data = new { ccpId = grp_CreditCardPayment.Id, sign = 2 };
+                                result = new Result() { Code = 0, Msg = "修改成功!", Data = data };
                             }
                             else
                             {

+ 8 - 3
OASystem/OASystem.Infrastructure/Repositories/Groups/VisaPriceRepository.cs

@@ -336,7 +336,8 @@ From Grp_VisaInfo as v With(Nolock) left Join Grp_CreditCardPayment as c With(No
                 if (c.PayDId == 72)
                 {
                     c.IsPay = 1;
-                }else c.IsPay = 0;
+                }
+                else c.IsPay = 0;
                 c.RMBPrice = c.PayMoney;
                 c.DayRate = 1;
                 Grp_TeamRate _TeamRate = _sqlSugar.Queryable<Grp_TeamRate>().First(a => a.DiId == dto.DiId && a.IsDel == 0 && a.CTable == 80);
@@ -372,7 +373,8 @@ From Grp_VisaInfo as v With(Nolock) left Join Grp_CreditCardPayment as c With(No
                             int cId = await _sqlSugar.Insertable(c).ExecuteReturnIdentityAsync();
                             if (cId != 0)
                             {
-                                result = new Result() { Code = 0, Msg = "添加成功!" };
+                                var data = new { ccpId = cId, sign = 1 };
+                                result = new Result() { Code = 0, Msg = "添加成功!", Data = data };
 
                             }
                             else
@@ -429,7 +431,10 @@ From Grp_VisaInfo as v With(Nolock) left Join Grp_CreditCardPayment as c With(No
 
                         }).ExecuteCommandAsync();
 
-                        result = new Result() { Code = 0, Msg = "修改成功!" };
+                        Grp_CreditCardPayment ccp = Query<Grp_CreditCardPayment>(a => a.CId == grp_Visa1.Id && a.CTable == 80).First();
+
+                        var data = new { ccpId = ccp.Id, sign = 2 };
+                        result = new Result() { Code = 0, Msg = "修改成功!", Data = data };
                     }
                     else
                     {