/// <summary> /// 测试初始化 /// </summary> public WHLogsServiceTest() { _scope = Ioc.BeginScope(); _wHLogsRepository = _scope.Create <IWHLogsRepository>(); _wHLogsService = _scope.Create <IWHLogsService>(); _wHLogsDto = WHLogsDtoTest.Create(); }
/// <summary> /// 转换为网络勾子推送内容日志实体 /// </summary> /// <param name="dto">网络勾子推送内容日志数据传输对象</param> public static WHLogs ToEntity(this WHLogsDto dto) { if (dto == null) { return(new WHLogs()); } return(dto.MapTo(new WHLogs(dto.Id.ToGuid()))); }
/// <summary> /// 转换为网络勾子推送内容日志实体 /// </summary> /// <param name="dto">网络勾子推送内容日志数据传输对象</param> public static WHLogs ToEntity2(this WHLogsDto dto) { if (dto == null) { return(new WHLogs()); } return(new WHLogs(dto.Id.ToGuid()) { WhId = dto.WhId, WHTypes = dto.WHTypes.SafeValue(), RequestTop = dto.RequestTop, Content = dto.Content, ResponseTop = dto.ResponseTop, ResponseContent = dto.ResponseContent, ResponseBody = dto.ResponseBody, CreationTime = dto.CreationTime, IsDeleted = dto.IsDeleted.SafeValue(), Version = dto.Version, }); }
/// <summary> /// 调用钉钉机器人发送文本内容 /// </summary> /// <param name="Access_Token">来源于</param> /// <returns></returns> public async Task <IActionResult> Send([FromQuery] string Access_Token) { var WHMiddlewareService = Ioc.Create <IWHMiddlewareService>(); var WHLogsService = Ioc.Create <IWHLogsService>(); var model = await WHMiddlewareService.GetByToken(Access_Token); if (model == null) { return(Fail("指定的数据不存在")); } WebHook_Token = model.PushUrl; if (!model.PushUrl.Contains("access_token") && !model.PushToken.IsNullOrEmpty()) { WebHook_Token += $"?access_token={model.PushToken}"; } var dic = new Dictionary <string, string>(); foreach (var row in HttpContext.Request.Headers) { dic.Add(row.Key, row.Value); } var content = await Web.GetBodyAsync(); var Id = ""; if (!content.IsNullOrEmpty()) { var modelwhlogs = new WHLogsDto(); modelwhlogs.WhId = model.Id.ToString(); modelwhlogs.WHTypes = true; modelwhlogs.RequestTop = dic.ToJson(); modelwhlogs.Content = content; modelwhlogs.CreationTime = DateTime.Now; Id = await WHLogsService.CreateAsync(modelwhlogs); } switch (model.Source) { case 1: { //消息类型 var msgtype = MsgTypeEnum.actionCard.ToString(); var modelContent = JObject.Parse(content); var repository = modelContent["repository"]; var pusher = modelContent["pusher"]; var Ref = modelContent["ref"].ToString(); var commits = JArray.Parse(modelContent["commits"].ToString()); var repositorychild = repository.Children().OfType <JProperty>() .ToDictionary(p => p.Name, p => p.Value); var pushchild = pusher.Children().OfType <JProperty>() .ToDictionary(p => p.Name, p => p.Value); var parser = new HtmlParser(); var document = await parser.ParseDocumentAsync(repositorychild["html_url"].ToString()); var html_url = document.QuerySelector("a").GetAttribute("href"); var build = Pool.StringBuilder.Get(); var title = ""; if (dic.ContainsKey("X-Coding-Event")) { if (dic["X-Coding-Event"] == "push") { build.Append("# Repo Push Event\n- "); title = $"{pushchild["name"]}提交源码"; } } build.Append($"Repo: **[{repositorychild["name"].ToString()}]({html_url})**\n- Ref: **[{Ref.Substring(Ref.LastIndexOf("/") + 1)}]({html_url}/git/tree/{Ref.Substring(Ref.LastIndexOf("/") + 1)})**\n- Pusher: **{pushchild["name"]}**\n"); build.Append($"## Total {commits.Count} commits(s)\n\u003e "); var i = 0; foreach (var item in commits) { var author = JObject.Parse(item["author"].ToString()); build.Append($"{i}. [{item["id"].ToString().Substring(0, 7)}]({html_url}/{Ref.Substring(Ref.LastIndexOf("/") + 1)}/commit/{item["id"].ToString()}) {author["name"].ToString()} - {item["message"].ToString()} "); if (i < commits.Count) { build.Append("\u003e "); } i++; } //actionCard内容 var actionCard = new ActionCard { Text = build.Put(true), Title = title, HideAvatar = "0", BtnOrientation = "0", SingleTitle = "查看详情", SingleURL = html_url }; //指定目标人群 var at = new At() { AtMobiles = new List <string>() { "18307555593" }, IsAtAll = false }; var response = await SendDingTalkMessage(new { msgtype, actionCard, at }); var modelwhlogs = await WHLogsService.GetByIdAsync(Id); var dicResponse = new Dictionary <string, string>(); foreach (var row in response.Headers) { dicResponse.Add(row.Key, row.Value.Join()); } modelwhlogs.ResponseTop = dicResponse.ToJson(); modelwhlogs.ResponseContent = await response.Content.ReadAsStringAsync(); modelwhlogs.ResponseBody = response.ToJson(); await WHLogsService.UpdateAsync(modelwhlogs); return(Ok(response)); } case 2: case 3: default: { //消息类型 var msgtype = MsgTypeEnum.markdown.ToString(); var modelContent = JObject.Parse(content); var text = modelContent["text"].ToString(); if (text.IsNullOrEmpty()) { return(Fail("内容为空")); } var title = text.Split("[")[0]; //markdown内容 var markdown = new MarkDown { Text = text, Title = title }; //指定目标人群 var at = new At() { AtMobiles = new List <string>() { "18307555593" }, IsAtAll = false }; var response = await SendDingTalkMessage(new { msgtype, markdown, at }); return(Ok(response)); } } }