123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.Options;
- using System.Net.Http;
- using TEAMModelOS.SDK.DI;
- using TEAMModelOS.SDK;
- using TEAMModelOS.Models;
- using System.Text.Json;
- using System.Threading.Tasks;
- using System.Collections.Generic;
- using System.Text;
- using TEAMModelOS.SDK.Extension;
- using System;
- using System.Net.Http.Json;
- using System.ComponentModel.DataAnnotations;
- using System.Net;
- using System.Net.Http.Headers;
- using Newtonsoft.Json;
- using System.Text.Encodings.Web;
- namespace TEAMModelBI.Controllers.BICommon
- {
- [Route("coupon")]
- [ApiController]
- public class BICouponController : ControllerBase
- {
- private readonly DingDing _dingDing;
- private readonly Option _option;
- private readonly IConfiguration _configuration;
- private readonly AzureServiceBusFactory _serviceBus;
- private readonly IHttpClientFactory _http;
- private readonly CoreAPIHttpService _coreAPIHttpService;
- private readonly IWebHostEnvironment _environment; //读取文件
- private readonly HttpClient _httpClient;
- public BICouponController(DingDing dingDing, IOptionsSnapshot<Option> option, IConfiguration configuration, AzureServiceBusFactory serviceBus, IHttpClientFactory http, CoreAPIHttpService coreAPIHttpService, IWebHostEnvironment hostingEnvironment, HttpClient httpClient)
- {
- _dingDing = dingDing;
- _option = option?.Value;
- _configuration = configuration;
- _serviceBus = serviceBus;
- _http = http;
- _coreAPIHttpService = coreAPIHttpService;
- _environment = hostingEnvironment;
- _httpClient = httpClient;
- }
- /// <summary>
- /// 建立優惠券
- /// </summary>
- /// <param name="GenerateCouponRequest"></param>
- /// <returns></returns>
- //[AuthToken(Roles = "admin,rdc,assist,sales")]
- [HttpPost("create-coupon")]
- public async Task<IActionResult> CreateCoupon(GenerateCouponRequest request)
- {
- try
- {
- //string url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
- string url = "https://api2.teammodel.net";
- if (request.srvAdr == "China") url = "https://api2.teammodel.cn";
-
- string AccessToken = await getCoreAccessToken();
- var client = _http.CreateClient();
- client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);
- HttpResponseMessage response = await client.PostAsJsonAsync($"{url}/Service/GenerateCoupon", request);
- if (response.StatusCode == HttpStatusCode.OK)
- {
- string jsonStr = await response.Content.ReadAsStringAsync();
- var options1 = new JsonSerializerOptions
- {
- Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
- };
- await _dingDing.SendBotMsg(System.Text.Json.JsonSerializer.Serialize(request, options1), GroupNames.高飛);
- return Ok(jsonStr.ToObject<JsonElement>());
- }
- else {
- return BadRequest();
- }
- }
- catch (Exception ex) {
- return BadRequest();
- }
- }
- /// <summary>
- /// 歸戶
- /// </summary>
- /// <param name="GenerateCouponRequest"></param>
- /// <returns></returns>
- //[AuthToken(Roles = "admin,rdc,assist,sales")]
- [HttpPost("consolidation-coupon")]
- public async Task<IActionResult> ConsolidationCoupon(ConsolidationCouponRequest request)
- {
- try
- {
- //string url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
- string url = "https://api2.teammodel.net";
- if (request.srvAdr == "China") url = "https://api2.teammodel.cn";
- string AccessToken = await getCoreAccessToken();
- var client = _http.CreateClient();
- client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);
- HttpResponseMessage response = await client.PostAsJsonAsync($"{url}/Service/CouponConsolidation", request);
- if (response.StatusCode == HttpStatusCode.OK)
- {
- return Ok(new { state = 0, msg = "歸戶成功" });
- }
- else
- {
- return BadRequest();
- }
- }
- catch (Exception ex)
- {
- return BadRequest();
- }
- }
- /// <summary>
- /// 通知
- /// </summary>
- /// <param name="GenerateCouponRequest"></param>
- /// <returns></returns>
- //[AuthToken(Roles = "admin,rdc,assist,sales")]
- [HttpPost("push-notify")]
- public async Task<IActionResult> PushNotify(PushNotifyRequest request)
- {
- try
- {
- //string url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
- string url = "https://api2.teammodel.net";
- if (request.srvAdr == "China") url = "https://api2.teammodel.cn";
- string AccessToken = await getCoreAccessToken();
- var client = _http.CreateClient();
- client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);
- HttpResponseMessage response = await client.PostAsJsonAsync($"{url}/Service/PushNotify", request);
- if (response.StatusCode == HttpStatusCode.OK)
- {
- return Ok(new { state = 0, msg = "發送成功" });
- }
- else
- {
- return BadRequest();
- }
- }
- catch (Exception ex)
- {
- return BadRequest();
- }
- }
- private async Task<string> getCoreAccessToken()
- {
- string AccessToken = "";
- try
- {
- string Url = _configuration.GetValue<string>("HaBookAuth:CoreAPI") + "/oauth2/token";
- string GrantType = "device";
- string ClientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
- string Secret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
- var content = new { grant_type = GrantType, client_id = ClientID, client_secret = Secret };
- var response = await _http.CreateClient().PostAsJsonAsync($"{Url}", content);
- if (response.IsSuccessStatusCode)
- {
- string responseBody = response.Content.ReadAsStringAsync().Result;
- using (JsonDocument document = JsonDocument.Parse(responseBody.ToString()))
- {
- if (document.RootElement.TryGetProperty("access_token", out JsonElement AccessTokenObj))
- {
- AccessToken = AccessTokenObj.ToString();
- }
- }
- }
- return AccessToken;
- }
- catch (Exception ex)
- {
- return AccessToken;
- }
- }
- }
- public class info
- {
- public string l { get; set; }
- public string n { get; set; }
- public string u { get; set; }
- }
- public class CouponRule
- {
- public string q { get; set; }
- //可獲得的權益
- public string b { get; set; }
- //若已有權益 則給積分
- public int p { get; set; } = 0;
- }
- 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);
- public record ConsolidationCouponRequest([Required] string srvAdr, [Required] string coupon, [Required] List<string> ids);
- 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);
- }
|