| | |
| | | using CommonUtil.Security; |
| | | using CommonUtil.Top; |
| | | using CommonUtil.Db; |
| | | using System.Text; |
| | | |
| | | namespace Api.Operater.Controllers |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 查询我的订单明细接口 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | [ProducesDefaultResponseType(typeof(GetTkTradeListResponse))] |
| | | public IActionResult GetTkTradeList([FromBody] GetTkTradeListRequest request) |
| | | { |
| | | //分页按时间查询账单明细 |
| | | var whereexpress = Expressionable.Create<TkTrade>() |
| | | .And(t => t.Memberid == request.Id.ToString()) |
| | | .AndIF(!request.stime.IsNull() && request.stime > DateTime.Parse("1900-01-01 00:00:00"), t => t.Created >= request.stime) |
| | | .AndIF(!request.etime.IsNull() && request.etime > DateTime.Parse("1900-01-01 00:00:00"), t => t.Created <= request.etime) |
| | | .AndIF(!request.tid.IsNullOrEmpty(), t => t.Tid == request.tid) |
| | | .ToExpression(); |
| | | int totalcount = 0; |
| | | var orderlist = new TkTradeDAL().ListPageGet(whereexpress, t => t.Created, DbEnum.OrderType.Desc, request.PageNo, request.PageSize, ref totalcount); |
| | | GetTkTradeListResponse getTkOrderRecord = new GetTkTradeListResponse(); |
| | | if (orderlist.Count > 0) |
| | | { |
| | | getTkOrderRecord.TkTrades = orderlist; |
| | | getTkOrderRecord.PageNo = request.PageNo; |
| | | getTkOrderRecord.PageSize = request.PageSize; |
| | | getTkOrderRecord.TotalCount = totalcount; |
| | | } |
| | | return Success(getTkOrderRecord); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 生成海报二维码 |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | |
| | | [HttpPost] |
| | | public IActionResult CreateQrCode([FromBody] CreateQrCodeRequest request) |
| | | { |
| | | int x = 231; int y = 474; int width = 305; int height=336; |
| | | string posterPath = Path.Combine("", @"D:\poster.png"); // 替换为你的实际海报的绝对路径 |
| | | |
| | | // 生成二维码 |
| | | QRCodeGenerator qrGenerator = new QRCodeGenerator(); |
| | | QRCodeData qrCodeData = qrGenerator.CreateQrCode(request.url, QRCodeGenerator.ECCLevel.Q); |
| | | QRCode qrCode = new QRCode(qrCodeData); |
| | | Bitmap qrCodeImage = qrCode.GetGraphic(20); // 调整 20 以控制二维码的大小 |
| | | |
| | | // 在海报中绘制二维码 |
| | | using (var posterImage = new Bitmap(posterPath)) |
| | | using (var graphics = Graphics.FromImage(posterImage)) |
| | | //获取access_token |
| | | string access_token = string.Empty; |
| | | MySqlHelper dbmain = new MySqlHelper(); |
| | | DataTable dt = dbmain.ExecuteDataTable("select fx_wx_token from appset"); |
| | | if (dt != null && dt.Rows.Count > 0) |
| | | { |
| | | // 将二维码绘制在指定区域 |
| | | RectangleF qrCodeArea = new RectangleF(x, y, width, height); |
| | | graphics.DrawImage(qrCodeImage, qrCodeArea); |
| | | access_token = dt.Rows[0]["fx_wx_token"].ToString(); |
| | | string url = $"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={access_token}"; |
| | | WebUtil util = new WebUtil(); |
| | | Dictionary<string, string> dic = new Dictionary<string, string>(); |
| | | dic.Add("scene", $"invite_code={request.invite_code}"); |
| | | // var result = Newtonsoft.Json.JsonConvert.DeserializeObject<GetwxacodeunlimitResponse>(PostJson(url, dic)); |
| | | var result = Post4Download(url, dic); |
| | | |
| | | // 将绘制后的海报保存为内存流 |
| | | using (var memoryStream = new MemoryStream()) |
| | | |
| | | //if (result.errcode != "0") |
| | | //{ |
| | | // return Error(result.errmsg); |
| | | //} |
| | | byte[] imagebytes =result.Item3; |
| | | Bitmap qrCodeImage = new Bitmap(new MemoryStream(imagebytes)); |
| | | int x = 430; int y = 1513; int width = 361; int height = 365; |
| | | string posterPath = Path.Combine("", @"D:\poster.png"); // 替换为你的实际海报的绝对路径 |
| | | // 在海报中绘制二维码 |
| | | using (var posterImage = new Bitmap(posterPath)) |
| | | using (var graphics = Graphics.FromImage(posterImage)) |
| | | { |
| | | posterImage.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); |
| | | // 将二维码绘制在指定区域 |
| | | RectangleF qrCodeArea = new RectangleF(x, y, width, height); |
| | | graphics.DrawImage(qrCodeImage, qrCodeArea); |
| | | |
| | | // 将内存流转换为字节数组 |
| | | byte[] imageBytes = memoryStream.ToArray(); |
| | | // 将绘制后的海报保存为内存流 |
| | | using (var memoryStream = new MemoryStream()) |
| | | { |
| | | posterImage.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); |
| | | |
| | | // 返回图像给前端 |
| | | return File(imageBytes, "image/png"); |
| | | // 将内存流转换为字节数组 |
| | | byte[] imageBytes = memoryStream.ToArray(); |
| | | |
| | | // 返回图像给前端 |
| | | return File(imageBytes, "image/png"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | return Error("获取access_token失败"); |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | public static Tuple<bool, string, byte[]> Post4Download(string postUrl, object dataObj) |
| | | { |
| | | try |
| | | { |
| | | var json = JsonConvert.SerializeObject(dataObj, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore, NullValueHandling = NullValueHandling.Ignore }); |
| | | var byteArray = Encoding.UTF8.GetBytes(json); |
| | | |
| | | var request = (HttpWebRequest)WebRequest.Create(postUrl); |
| | | request.Method = "POST"; |
| | | request.KeepAlive = false; |
| | | request.ProtocolVersion = HttpVersion.Version11; |
| | | request.Timeout = -1; |
| | | request.ReadWriteTimeout = -1; |
| | | request.ContentType = "application/json;charset=utf-8"; |
| | | request.ContentLength = byteArray.Length; |
| | | request.ServicePoint.Expect100Continue = false; |
| | | |
| | | using (var stream = request.GetRequestStream()) |
| | | { |
| | | stream.Write(byteArray, 0, byteArray.Length); |
| | | stream.Flush(); |
| | | } |
| | | |
| | | //接收返回信息 |
| | | var message = ""; |
| | | byte[] buf = null; |
| | | using (var response = (HttpWebResponse)request.GetResponse()) |
| | | { |
| | | if (response.StatusCode == HttpStatusCode.OK) |
| | | { |
| | | buf = new byte[response.ContentLength]; |
| | | var responseStream = response.GetResponseStream(); |
| | | if (responseStream != null) |
| | | { |
| | | var offset = 0; |
| | | do |
| | | { |
| | | var count = responseStream.Read(buf, offset, buf.Length - offset); |
| | | offset += count; |
| | | } while (offset < buf.Length); |
| | | } |
| | | else |
| | | { |
| | | message = "fail, responseStream is null."; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | message = $"fail, response.StatusCode is {response.StatusCode}."; |
| | | } |
| | | } |
| | | |
| | | request.Abort(); |
| | | |
| | | return new Tuple<bool, string, byte[]>(!message.StartsWith("fail, "), message, buf); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new Tuple<bool, string, byte[]>(false, $"fail, {ex.Message}", null); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |