BICouponController.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. using Microsoft.AspNetCore.Hosting;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.Extensions.Configuration;
  4. using Microsoft.Extensions.Options;
  5. using System.Net.Http;
  6. using TEAMModelOS.SDK.DI;
  7. using TEAMModelOS.SDK;
  8. using TEAMModelOS.Models;
  9. using System.Text.Json;
  10. using System.Threading.Tasks;
  11. using System.Collections.Generic;
  12. using System.Text;
  13. using TEAMModelOS.SDK.Extension;
  14. using System;
  15. using System.Net.Http.Json;
  16. using System.ComponentModel.DataAnnotations;
  17. using System.Net;
  18. using System.Net.Http.Headers;
  19. using Newtonsoft.Json;
  20. using System.Text.Encodings.Web;
  21. namespace TEAMModelBI.Controllers.BICommon
  22. {
  23. [Route("coupon")]
  24. [ApiController]
  25. public class BICouponController : ControllerBase
  26. {
  27. private readonly DingDing _dingDing;
  28. private readonly Option _option;
  29. private readonly IConfiguration _configuration;
  30. private readonly AzureServiceBusFactory _serviceBus;
  31. private readonly IHttpClientFactory _http;
  32. private readonly CoreAPIHttpService _coreAPIHttpService;
  33. private readonly IWebHostEnvironment _environment; //读取文件
  34. private readonly HttpClient _httpClient;
  35. public BICouponController(DingDing dingDing, IOptionsSnapshot<Option> option, IConfiguration configuration, AzureServiceBusFactory serviceBus, IHttpClientFactory http, CoreAPIHttpService coreAPIHttpService, IWebHostEnvironment hostingEnvironment, HttpClient httpClient)
  36. {
  37. _dingDing = dingDing;
  38. _option = option?.Value;
  39. _configuration = configuration;
  40. _serviceBus = serviceBus;
  41. _http = http;
  42. _coreAPIHttpService = coreAPIHttpService;
  43. _environment = hostingEnvironment;
  44. _httpClient = httpClient;
  45. }
  46. /// <summary>
  47. /// 建立優惠券
  48. /// </summary>
  49. /// <param name="GenerateCouponRequest"></param>
  50. /// <returns></returns>
  51. //[AuthToken(Roles = "admin,rdc,assist,sales")]
  52. [HttpPost("create-coupon")]
  53. public async Task<IActionResult> CreateCoupon(GenerateCouponRequest request)
  54. {
  55. try
  56. {
  57. //string url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
  58. string url = "https://api2.teammodel.net";
  59. if (request.srvAdr == "China") url = "https://api2.teammodel.cn";
  60. string AccessToken = await getCoreAccessToken();
  61. var client = _http.CreateClient();
  62. client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);
  63. HttpResponseMessage response = await client.PostAsJsonAsync($"{url}/Service/GenerateCoupon", request);
  64. if (response.StatusCode == HttpStatusCode.OK)
  65. {
  66. string jsonStr = await response.Content.ReadAsStringAsync();
  67. var options1 = new JsonSerializerOptions
  68. {
  69. Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
  70. };
  71. await _dingDing.SendBotMsg(System.Text.Json.JsonSerializer.Serialize(request, options1), GroupNames.高飛);
  72. return Ok(jsonStr.ToObject<JsonElement>());
  73. }
  74. else {
  75. return BadRequest();
  76. }
  77. }
  78. catch (Exception ex) {
  79. return BadRequest();
  80. }
  81. }
  82. /// <summary>
  83. /// 歸戶
  84. /// </summary>
  85. /// <param name="GenerateCouponRequest"></param>
  86. /// <returns></returns>
  87. //[AuthToken(Roles = "admin,rdc,assist,sales")]
  88. [HttpPost("consolidation-coupon")]
  89. public async Task<IActionResult> ConsolidationCoupon(ConsolidationCouponRequest request)
  90. {
  91. try
  92. {
  93. //string url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
  94. string url = "https://api2.teammodel.net";
  95. if (request.srvAdr == "China") url = "https://api2.teammodel.cn";
  96. string AccessToken = await getCoreAccessToken();
  97. var client = _http.CreateClient();
  98. client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);
  99. HttpResponseMessage response = await client.PostAsJsonAsync($"{url}/Service/CouponConsolidation", request);
  100. if (response.StatusCode == HttpStatusCode.OK)
  101. {
  102. return Ok(new { state = 0, msg = "歸戶成功" });
  103. }
  104. else
  105. {
  106. return BadRequest();
  107. }
  108. }
  109. catch (Exception ex)
  110. {
  111. return BadRequest();
  112. }
  113. }
  114. /// <summary>
  115. /// 通知
  116. /// </summary>
  117. /// <param name="GenerateCouponRequest"></param>
  118. /// <returns></returns>
  119. //[AuthToken(Roles = "admin,rdc,assist,sales")]
  120. [HttpPost("push-notify")]
  121. public async Task<IActionResult> PushNotify(PushNotifyRequest request)
  122. {
  123. try
  124. {
  125. //string url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
  126. string url = "https://api2.teammodel.net";
  127. if (request.srvAdr == "China") url = "https://api2.teammodel.cn";
  128. string AccessToken = await getCoreAccessToken();
  129. var client = _http.CreateClient();
  130. client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);
  131. HttpResponseMessage response = await client.PostAsJsonAsync($"{url}/Service/PushNotify", request);
  132. if (response.StatusCode == HttpStatusCode.OK)
  133. {
  134. return Ok(new { state = 0, msg = "發送成功" });
  135. }
  136. else
  137. {
  138. return BadRequest();
  139. }
  140. }
  141. catch (Exception ex)
  142. {
  143. return BadRequest();
  144. }
  145. }
  146. private async Task<string> getCoreAccessToken()
  147. {
  148. string AccessToken = "";
  149. try
  150. {
  151. string Url = _configuration.GetValue<string>("HaBookAuth:CoreAPI") + "/oauth2/token";
  152. string GrantType = "device";
  153. string ClientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
  154. string Secret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
  155. var content = new { grant_type = GrantType, client_id = ClientID, client_secret = Secret };
  156. var response = await _http.CreateClient().PostAsJsonAsync($"{Url}", content);
  157. if (response.IsSuccessStatusCode)
  158. {
  159. string responseBody = response.Content.ReadAsStringAsync().Result;
  160. using (JsonDocument document = JsonDocument.Parse(responseBody.ToString()))
  161. {
  162. if (document.RootElement.TryGetProperty("access_token", out JsonElement AccessTokenObj))
  163. {
  164. AccessToken = AccessTokenObj.ToString();
  165. }
  166. }
  167. }
  168. return AccessToken;
  169. }
  170. catch (Exception ex)
  171. {
  172. return AccessToken;
  173. }
  174. }
  175. }
  176. public class info
  177. {
  178. public string l { get; set; }
  179. public string n { get; set; }
  180. public string u { get; set; }
  181. }
  182. public class CouponRule
  183. {
  184. public string q { get; set; }
  185. //可獲得的權益
  186. public string b { get; set; }
  187. //若已有權益 則給積分
  188. public int p { get; set; } = 0;
  189. }
  190. public record GenerateCouponRequest([Required] string srvAdr, [Required] string CouponType, List<string> targets, string couponName, int quantity, [Required] long expire, [Required] List<CouponRule> rule, string eventName, List<info> info, int maxTaker = -1);
  191. public record ConsolidationCouponRequest([Required] string srvAdr, [Required] string coupon, [Required] List<string> ids);
  192. public record PushNotifyRequest([Required] string srvAdr, [Required] string title, [Required] string body, [Required] List<string> tags, [Required] string sender, [Required] string hubName, string data = null);
  193. }