jiangjc 10 miesięcy temu
rodzic
commit
9de8ca3ad3

+ 11 - 3
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -5,8 +5,10 @@ using OASystem.API.OAMethodLib;
 using OASystem.API.OAMethodLib.Hub.HubClients;
 using OASystem.API.OAMethodLib.Hub.Hubs;
 using OASystem.API.OAMethodLib.QiYeWeChatAPI;
+using OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Dtos.PersonnelModule;
+using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Domain.ViewModels.PersonnelModule;
 using OASystem.Domain.ViewModels.QiYeWeChat;
@@ -1702,16 +1704,22 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> Test_QIYEWX(PostTourClientListDownloadFile _dto)
         {
-            GroupStatus_UserSimplelistView list = await _qiYeWeChatApiService.GroupStatus_GetUserList();
+            //GroupStatus_UserSimplelistView list = await _qiYeWeChatApiService.GroupStatus_GetUserList();
 
             //创建群聊
 
-            List<string> userList = new List<string>() { "huaju.liu", "Feint", "johnny.yang@pan-american-intl.com" };
+            //List<string> userList = new List<string>() { "huaju.liu", "Feint", "johnny.yang@pan-american-intl.com" };
 
-            GroupStatus_CreateChatView rst1 = await _qiYeWeChatApiService.GroupStatus_CreateChat("团组状态通知测试", "Feint", userList, "groupstatuschat01");
+            //GroupStatus_CreateChatView rst1 = await _qiYeWeChatApiService.GroupStatus_CreateChat("团组状态通知测试", "Feint", userList, "groupstatuschat01");
 
             //推送消息(模板)
 
+
+
+            //团组出发
+            //费用审核
+            //费用审核结果通知(通过情况下发送财务群)
+
             string q = "";
 
             return Ok(JsonView(true, "操作成功!"));

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

@@ -0,0 +1,110 @@
+using MathNet.Numerics.Statistics;
+using System.ComponentModel;
+
+namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
+{
+    public enum QiyeWeChatEnum
+    {
+        /// <summary>
+        /// 测试用
+        /// </summary>
+        [Description("groupstatuschat01")]
+        TestChat = 0,
+
+        /// <summary>
+        /// 团组通知-公司客户群(总经理;国交部经理、主管),发送条件(1.确认出团)
+        /// </summary>
+        [Description("CompanyCRMChat01")]
+        CompanyCRMChat = 1,
+
+        /// <summary>
+        /// 团组通知-市场客户群(市场部经理、主管;国交部经理、主管)发送条件(1.确认出团)
+        /// </summary>
+        [Description("MarketCRMChat01")]
+        MarketCRMChat,
+
+        /// <summary>
+        /// 团组通知-财务群(财务部全员),发送条件(1.费用审核-通过;2,团组出访时间出发-7 天,结束-3 天,通知财务三人签合同、收尾款)
+        /// </summary>
+        [Description("CaiWuChat01")]
+        CaiWuChat,
+
+        /// <summary>
+        /// 团组通知-国交管理群(国交部经理、主管),发送条件(1.费用审核-提交)
+        /// </summary>
+        [Description("GuoJiaoLeader01")]
+        GuoJiaoLeaderChat,
+    }
+
+    public class MarkdownLib
+    {
+
+        /// <summary>
+        /// 通知文本-确认出团
+        /// </summary>
+        /// <param name="info"></param>
+        /// <returns></returns>
+        public static string GroupStatus_Create(GroupStatus_CreateModel info)
+        {
+            string result = string.Format(@" `确认出团`  
+
+>**团组基本信息**  
+>团组名称:<font color='info'>{0}</font> 
+
+>团组类型:{1}
+>出访日期:<font color='comment'>{2}</font> 
+>出访人数/天数:{3}人/{4}天 
+>客户单位:{5}
+>客户名称:{6}
+
+[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/)
+", info.TeamName, info.TeamDid_Text, info.VisitDateRange, info.VisitPNumber, info.VisitDays, info.ClientUnit, info.ClientName);
+
+            return result;
+        }
+
+        /// <summary>
+        /// 通知文本-费用申请
+        /// </summary>
+        /// <returns></returns>
+        public static string GroupStatus_ApplyFee()
+        {
+            string result = string.Format(@" `费用审核`  
+
+>团组:<font color='info'>雅安市经合和外事局赴美国 6日</font> 
+
+<font color='comment'>- </font>新增一笔需要审核的费用
+
+>费用模块:签证
+>费用名称:<font color='warning'>于冀川等6人</font>
+>此次付款金额:<font color='warning'>8850.00 CNY</font>
+
+>申请人:李敏
+>申请时间:<font color='comment'>2024-05-06 17:21</font> 
+
+<font color='comment'>- </font>当前团组费用待审核数量: 1
+
+[详细信息请前往OA系统查看](http://oa.pan-american-intl.com:4399/) ");
+
+            return result;
+        }
+
+    }
+    #region 实体类
+
+    public class GroupStatus_ApplyFeeModel { }
+
+    public class GroupStatus_CreateModel
+    {
+        public string TeamName { get; set; }
+        public string TeamDid_Text { get; set; }
+        public string VisitDateRange { get; set; }
+        public int VisitPNumber { get; set; }
+        public int VisitDays { get; set; }
+        public string ClientUnit { get; set; }
+        public string ClientName { get; set; }
+    }
+
+    #endregion
+
+}

+ 69 - 0
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Library.cs

@@ -0,0 +1,69 @@
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels.QiYeWeChat;
+using OASystem.Infrastructure.Repositories.Groups;
+
+namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
+{
+    public static class AppNoticeLibrary
+    {
+        private static readonly IQiYeWeChatApiService _qiYeWeChatApiService = AutofacIocManager.Instance.GetService<IQiYeWeChatApiService>();
+
+        private static readonly DelegationInfoRepository _grpDeleRep = AutofacIocManager.Instance.GetService<DelegationInfoRepository>();
+
+        /// <summary>
+        /// 向指定群聊发送- 确认出团 -通知
+        /// </summary>
+        /// <param name="diId"></param>
+        /// <param name="qwEnum"></param>
+        /// <returns></returns>
+        public static async Task<bool> SendChatMsg_GroupStatus_Create(int diId, QiyeWeChatEnum qwEnum)
+        {
+            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
+            };
+            string chatId = qwEnum.GetEnumDescription();
+            //发送信息
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.GroupStatus_Create(info));
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// 向指定群聊发送- 费用审核 -通知
+        /// </summary>
+        /// <param name="diId"></param>
+        /// <param name="qwEnum"></param>
+        /// <returns></returns>
+        public static async Task<bool> SendChatMsg_GroupStatus_ApplyFee(int diId, QiyeWeChatEnum qwEnum)
+        {
+            string chatId = qwEnum.GetEnumDescription();
+            //发送信息
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.GroupStatus_ApplyFee());
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+    }
+}

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

@@ -161,6 +161,24 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
         /// </summary>
         /// <returns></returns>
         Task<GroupStatus_CreateChatView> GroupStatus_CreateChat(string chatName, string owner, List<string> userList, string chatId);
+
+        /// <summary>
+        /// 向群聊发送消息
+        /// </summary>
+        /// <param name="chatId"></param>
+        /// <param name="msgContent"></param>
+        /// <returns></returns>
+        Task<ResponseBase> GroupStatus_SendChatMsg_Markdown(string chatId, string msgContent, string msgType = "markdown");
+
+
+        /// <summary>
+        /// 向用户发送信息
+        /// </summary>
+        /// <param name="toUser"></param>
+        /// <param name="msgContent"></param>
+        /// <param name="msgType"></param>
+        /// <returns></returns>
+        Task<GroupStatus_SendMessageView> GroupStatus_SendMessage_ToUser(string toUser, string msgContent, string msgType = "markdown");
         #endregion
     }
 }

+ 47 - 1
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/QiYeWeChatApiService.cs

@@ -1409,6 +1409,53 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
             return result;
         }
 
+        /// <summary>
+        /// 向群聊发送信息
+        /// </summary>
+        /// <param name="chatId"></param>
+        /// <param name="msgContent"></param>
+        /// <param name="msgType"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<ResponseBase> GroupStatus_SendChatMsg_Markdown(string chatId, string msgContent, string msgType = "markdown")
+        {
+            ResponseBase result = new ResponseBase();
+
+            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 };
+
+            GroupStatus_AppChatSend_Markdown reqJson = new GroupStatus_AppChatSend_Markdown()
+            {
+                chatid = chatId,
+                msgtype = msgType,
+                markdown = markdown
+            };
+
+            string url = string.Format("/cgi-bin/appchat/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<ResponseBase>(stringResponse,
+                new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
+
+            return result;
+        }
+
+        public Task<GroupStatus_SendMessageView> GroupStatus_SendMessage_ToUser(string toUser, string msgContent, string msgType = "markdown")
+        {
+            throw new NotImplementedException();
+        }
+
+
         #endregion
 
         public long ConvertToTimeSpan(DateTime dt)
@@ -1417,6 +1464,5 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
         }
 
 
-
     }
 }

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

@@ -146,4 +146,11 @@ namespace OASystem.Domain.Dtos.QiYeWeChat
         /// </summary>
         public string chatid { get; set; }
     }
+
+    public class GroupStatus_AppChatSend_Markdown
+    {
+        public string chatid { get; set; }
+        public string msgtype { get; set; }
+        public RobotSendMsg_GroupInfo_Content markdown { get; set; }
+    }
 }

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

@@ -39,4 +39,39 @@ namespace OASystem.Domain.ViewModels.QiYeWeChat
     {
         public string chatid { get; set; }
     }
+
+    public class GroupStatus_SendMessageView : ResponseBase
+    {
+        /// <summary>
+        /// 不合法的userid,不区分大小写,统一转为小写
+        /// </summary>
+        public string invaliduser { get; set; }
+
+        /// <summary>
+        /// 不合法的partyid
+        /// </summary>
+        public string invalidparty { get; set; }
+
+        /// <summary>
+        /// 不合法的标签id
+        /// </summary>
+        public string invalidtag { get; set; }
+
+        /// <summary>
+        /// 没有基础接口许可(包含已过期)的userid
+        /// </summary>
+        public string unlicenseduser { get; set; }
+
+        /// <summary>
+        /// 消息id,用于撤回应用消息
+        /// </summary>
+        public string msgid { get; set; }
+
+        /// <summary>
+        /// 仅消息类型为“按钮交互型”,“投票选择型”和“多项选择型”的模板卡片消息返回,应用可使用response_code调用更新模版卡片消息接口,72小时内有效,且只能使用一次
+        /// </summary>
+        public string response_code { get; set; }
+    }
+
+
 }