using CommonUtil;
|
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Mvc;
|
using DbAccess;
|
using System.Data;
|
using CommonUtil;
|
using CommonUtil.Web;
|
using System.Collections;
|
using System.Collections.Generic;
|
using Operater.DTO.Tk;
|
using Operater.DAL;
|
using Operater.DbModel;
|
using NPOI.SS.UserModel;
|
using Snowflake.Core;
|
using SqlSugar;
|
using System;
|
using System.Linq.Expressions;
|
using Newtonsoft.Json;
|
using System.Net.Http.Headers;
|
using System.Net.Http;
|
using System.Security.Policy;
|
using System.Threading.Tasks;
|
using System.IO;
|
using System.Net;
|
using DkSdkCore.Response;
|
using System.Drawing.Imaging;
|
using System.Drawing;
|
using QRCoder;
|
using NPOI.SS.Formula.Functions;
|
using CommonUtil.Security;
|
using CommonUtil.Top;
|
using CommonUtil.Db;
|
|
namespace Api.Operater.Controllers
|
{
|
[Route(TopConstants.API_ROUTE)]
|
public class TkUserinfoController : BaseController
|
{
|
/// <summary>
|
/// 获取微信openid
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ProducesDefaultResponseType(typeof(string))]
|
public IActionResult GetWxOpenid([FromBody] GetOpenidRequest request)
|
{
|
|
|
//获取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)
|
{
|
access_token = dt.Rows[0]["fx_wx_token"].ToString();
|
string url = $"https://api.weixin.qq.com/wxa/getpluginopenpid?access_token={access_token}";
|
WebUtil util = new WebUtil();
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
dic.Add("code", request.code);
|
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<GetOpenidResponse>(PostJson(url, dic));
|
if (result.errcode != "0")
|
{
|
return Error(result.errmsg);
|
}
|
return Success(result.openpid);
|
|
}
|
else {
|
return Error("获取access_token失败");
|
}
|
}
|
|
/// <summary>
|
/// 获取微信手机号
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ProducesDefaultResponseType(typeof(string))]
|
public IActionResult GetWxUserPhone([FromBody] GetOpenidRequest request)
|
{
|
//获取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)
|
{
|
access_token = dt.Rows[0]["fx_wx_token"].ToString();
|
string url = $"https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token={access_token}";
|
WebUtil util = new WebUtil();
|
Dictionary<string, object> dic = new Dictionary<string, object>();
|
dic.Add("code", request.code);
|
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<GetUserPhoneResponse>(PostJson(url, dic));
|
if (result.errcode != "0")
|
{
|
return Error(result.errmsg);
|
}
|
return Success(result.phone_info.phoneNumber);
|
|
}
|
else
|
{
|
return Error("获取access_token失败");
|
}
|
|
|
}
|
|
/// <summary>
|
/// 注册会员
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ProducesDefaultResponseType(typeof(TkUserinfo))]
|
public IActionResult AddTkUserinfo([FromBody]AddUserinfoRequest request)
|
{
|
long parentid = 0;
|
//检测是否有邀请码
|
if (!string.IsNullOrEmpty(request.Invite_code))
|
{
|
//邀请码不为空,则绑定父级
|
//根据邀请码查询父级ID
|
var whereexpress= Expressionable.Create<TkUserinfo>()
|
.And(t => t.Invitecode == request.Invite_code)
|
.ToExpression();
|
var parentuser=new TkUserinfoDAL().GetSingle(whereexpress);
|
if (parentuser != null && parentuser.Id > 0)
|
{
|
parentid=parentuser.Id;
|
}
|
}
|
//根据手机号验证该会员是否存在
|
var whereexpress1 = Expressionable.Create<TkUserinfo>()
|
.And(t => t.mobile == request.mobile)
|
.ToExpression();
|
var userinfo = new TkUserinfoDAL().GetSingle(whereexpress1);
|
if (userinfo != null && userinfo.Id > 0)
|
{
|
return Error("该手机号已注册");
|
}
|
|
//生成会员ID
|
var worker = new IdWorker(1, 1);
|
long memberid=worker.NextId();
|
//生成邀请码
|
string invitecode =SecurityUtil.createInvitecode(memberid);
|
//验证邀请码是否重复
|
while (true)
|
{
|
var whereexpress2 = Expressionable.Create<TkUserinfo>()
|
.And(t => t.Invitecode == invitecode)
|
.ToExpression();
|
var userinfo2 = new TkUserinfoDAL().GetSingle(whereexpress2);
|
if (userinfo2 != null && userinfo2.Id > 0)
|
{
|
//重复重新生成邀请码
|
invitecode = SecurityUtil.createInvitecode(memberid);
|
}
|
else
|
{
|
break;
|
}
|
}
|
TkUserinfo adduserinfo = new TkUserinfo()
|
{
|
Id =memberid,
|
mobile= request.mobile,
|
openid= request.openid,
|
unionid= request.unionid,
|
grade= 1,
|
parentid=parentid,
|
createtime=DateTime.Now,
|
lastvisittime=DateTime.Now,
|
is_black=0,
|
balance=0,
|
Invitecode= invitecode
|
|
};
|
//添加会员
|
var result = new TkUserinfoDAL().Insert(adduserinfo);
|
if (result)
|
{
|
return Success(adduserinfo);
|
}
|
else
|
{
|
return Error("注册失败!");
|
}
|
}
|
|
/// <summary>
|
/// 查询会员信息
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ProducesDefaultResponseType(typeof(TkUserinfo))]
|
public IActionResult GetTkUserinfo([FromBody]GetUserinfoRequest request)
|
{
|
//根据手机号验证该会员是否存在
|
var whereexpress1 = Expressionable.Create<TkUserinfo>()
|
.And(t => t.mobile == request.mobile).Or(t=>t.openid==request.openid)
|
.ToExpression();
|
var userinfo = new TkUserinfoDAL().GetSingle(whereexpress1);
|
if (userinfo != null && userinfo.Id > 0)
|
{
|
return Success(userinfo);
|
}
|
else
|
{
|
return Error("未查到会员信息");
|
}
|
}
|
|
/// <summary>
|
/// 修改会员信息
|
/// </summary>
|
[HttpPost]
|
[ProducesDefaultResponseType(typeof(bool))]
|
public IActionResult EdiTkUserinfo([FromBody] EdiUserinfoRequest request)
|
{
|
//根据手机号验证该会员是否存在
|
var whereexpress1 = Expressionable.Create<TkUserinfo>()
|
.And(t => t.openid == request.openid)
|
.ToExpression();
|
var userinfo = new TkUserinfoDAL().GetSingle(whereexpress1);
|
if (userinfo != null && userinfo.Id > 0)
|
{
|
if (request.mobile.IsNullOrEmpty())
|
{
|
userinfo.mobile = request.mobile;
|
}
|
userinfo.lastvisittime = DateTime.Now;
|
var result = new TkUserinfoDAL().Update(userinfo, u => new {u.mobile,u.lastvisittime },u=>u.Id==userinfo.Id);
|
return Success(result);
|
}
|
else
|
{
|
return Error("未查到会员信息");
|
}
|
}
|
|
/// <summary>
|
/// 获取团队成员
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ProducesDefaultResponseType(typeof(GetTeamUserInfoResponse))]
|
public IActionResult GetTeamUserInfo([FromBody]GetTeamUserInfoRequest request)
|
{
|
//查询团队成员的团队成员
|
var whereexpress1 = Expressionable.Create<TkUserinfo>()
|
.And(t => t.parentid == request.Id)
|
.ToExpression();
|
List<long> childids= new List<long>();
|
var userinfo = new TkUserinfoDAL().ListGet(whereexpress1);
|
List<TeamUserInfo> teamuserlist = new List<TeamUserInfo>();
|
foreach (var item in userinfo)
|
{
|
TeamUserInfo team = new TeamUserInfo();
|
team.Id = item.Id;
|
team.mobile=item.mobile;
|
childids.Add(item.Id);
|
teamuserlist.Add(team);
|
}
|
if (teamuserlist.Count > 0)
|
{
|
//查询团队成员的团队成员
|
var whereexpress2 = Expressionable.Create<TkUserinfo>()
|
.And(t => childids.Contains(t.parentid.Value))
|
.ToExpression();
|
var userinfo2 = new TkUserinfoDAL().ListGet(whereexpress2);
|
foreach (var item in userinfo2)
|
{
|
TeamUserInfo team = new TeamUserInfo();
|
team.Id = item.Id;
|
team.mobile = item.mobile;
|
teamuserlist.Add(team);
|
}
|
return Success(teamuserlist);
|
}
|
GetTeamUserInfoResponse response = new GetTeamUserInfoResponse();
|
response.Id = request.Id;
|
response.children= teamuserlist;
|
return Success(response);
|
}
|
|
/// <summary>
|
/// 分页获取账单明细并返回支出、收入总金额
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ProducesDefaultResponseType(typeof(GetTkBillRecordResponse))]
|
public IActionResult GetBillList([FromBody] GetTkBillRecordRequest request)
|
{
|
//分页按时间查询账单明细
|
var whereexpress = Expressionable.Create<BillRecord>()
|
.And(t => t.memberid == request.Id)
|
.AndIF(!request.stime.IsNull() && request.stime > DateTime.Parse("1900-01-01 00:00:00"), t=>t.createtime>=request.stime)
|
.AndIF(!request.etime.IsNull() && request.etime > DateTime.Parse("1900-01-01 00:00:00"), t=> t.createtime <= request.etime)
|
.AndIF(request.stype > 0, t => t.stype == request.stype)
|
.ToExpression();
|
int totalcount = 0;
|
var billlist = new BillRecordDAL().ListPageGet(whereexpress, t=>t.createtime, DbEnum.OrderType.Desc,request.PageNo,request.PageSize,ref totalcount);
|
GetTkBillRecordResponse getTkBillRecord = new GetTkBillRecordResponse();
|
|
if (billlist.Count > 0)
|
{
|
getTkBillRecord.billRecords = billlist;
|
//查询收入总金额
|
var whereexpress1 = Expressionable.Create<BillRecord>()
|
.And(t => t.memberid == request.Id)
|
.AndIF(!request.stime.IsNull() && request.stime > DateTime.Parse("1900-01-01 00:00:00"), t => t.createtime >= request.stime)
|
.AndIF(!request.etime.IsNull() && request.etime > DateTime.Parse("1900-01-01 00:00:00"), t => t.createtime <= request.etime)
|
.And(t => t.stype == 0||t.stype==1)
|
.ToExpression();
|
decimal incomeamount=new BillRecordDAL().Sum(whereexpress1,t => t.amount).ToDecimal();
|
getTkBillRecord.incomeamount = incomeamount;
|
//查询收入总金额
|
var whereexpress2 = Expressionable.Create<BillRecord>()
|
.And(t => t.memberid == request.Id)
|
.AndIF(!request.stime.IsNull() && request.stime > DateTime.Parse("1900-01-01 00:00:00"), t => t.createtime >= request.stime)
|
.AndIF(!request.etime.IsNull() && request.etime > DateTime.Parse("1900-01-01 00:00:00"), t => t.createtime <= request.etime)
|
.And(t => t.stype == 2)
|
.ToExpression();
|
var payamount = new BillRecordDAL().Sum(whereexpress2, t => t.amount).ToDecimal();
|
|
getTkBillRecord.expenditure = payamount;
|
|
}
|
return Success(getTkBillRecord);
|
}
|
|
/// <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>
|
/// <returns></returns>
|
[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))
|
{
|
// 将二维码绘制在指定区域
|
RectangleF qrCodeArea = new RectangleF(x, y, width, height);
|
graphics.DrawImage(qrCodeImage, qrCodeArea);
|
|
// 将绘制后的海报保存为内存流
|
using (var memoryStream = new MemoryStream())
|
{
|
posterImage.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
|
|
// 将内存流转换为字节数组
|
byte[] imageBytes = memoryStream.ToArray();
|
|
// 返回图像给前端
|
return File(imageBytes, "image/png");
|
}
|
}
|
}
|
|
/// <summary>
|
/// PostJson请求
|
/// </summary>
|
/// <param name="url"></param>
|
/// <param name="postObj"></param>
|
/// <returns></returns>
|
public static string PostJson(string url, object postObj)
|
{
|
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
|
httpWebRequest.ContentType = "application/json";
|
httpWebRequest.Method = "POST";
|
var postData = Newtonsoft.Json.JsonConvert.SerializeObject(postObj);
|
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
|
{
|
streamWriter.Write(postData);
|
streamWriter.Flush();
|
streamWriter.Close();
|
}
|
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
|
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
|
{
|
var result = streamReader.ReadToEnd();
|
return result;
|
}
|
}
|
}
|
}
|