tuiwucarrer/Admin.NET/Admin.NET.Application/Service/CePing/BusStudentsFramily/BusStudentsFramilyService.cs

374 lines
16 KiB
C#

using Admin.NET.Core;
using Admin.NET.Core.Service;
using Elastic.Transport;
using Furion;
using Furion.DatabaseAccessor;
using Furion.DataEncryption;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using SKIT.FlurlHttpClient.Wechat.Api;
using SKIT.FlurlHttpClient.Wechat.Api.Models;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading.Tasks;
namespace Admin.NET.Application
{
/// <summary>
/// 家长信息表服务
/// </summary>
[ApiDescriptionSettings("测评服务", Name = "BusStudentsFramily", Order = 100)]
public class BusStudentsFramilyService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository<BusStudentsFramily> _busStudentsFramilyRep;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly WechatApiClient _wechatApiClient;
private readonly UserManager _userManager;
private readonly SysConfigService _sysConfigService;
/// <summary>
///
/// </summary>
/// <param name="busStudentsFramilyRep"></param>
/// <param name="httpContextAccessor"></param>
/// <param name="wechatApiHttpClient"></param>
/// <param name="userManager"></param>
public BusStudentsFramilyService(
SqlSugarRepository<BusStudentsFramily> busStudentsFramilyRep, IHttpContextAccessor httpContextAccessor, WechatApiClientFactory wechatApiHttpClient,
UserManager userManager, SysConfigService sysConfigService
)
{
_busStudentsFramilyRep = busStudentsFramilyRep;
_httpContextAccessor = httpContextAccessor;
_wechatApiClient = wechatApiHttpClient.CreateWxOpenClient();
_userManager = userManager;
_sysConfigService = sysConfigService;
}
/// <summary>
/// 分页查询家长信息表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("page")]
public async Task<SqlSugarPagedList<BusStudentsFramilyOutput>> Page([FromQuery] BusStudentsFramilyInput input)
{
var busStudentsFramilys = await _busStudentsFramilyRep.AsQueryable()
//.Where(!string.IsNullOrEmpty(input.Uuid), u => u.Uuid == input.Uuid)
.WhereIF(!string.IsNullOrEmpty(input.Phone), u => u.Phone == input.Phone)
.WhereIF(!string.IsNullOrEmpty(input.NickName), u => u.NickName == input.NickName)
// .Where(u => u.framilyRole == input.framilyRole)
// .Where(u => u.Sort == input.Sort)
.Where(u => u.TenantId == _userManager.TenantId)
.OrderBy(u => u.CreateTime, OrderByType.Desc)
.OrderBuilder(input)
.Select(s => new BusStudentsFramilyOutput()
{
Uuid = s.Uuid,
Phone = s.Phone,
NickName = s.NickName,
framilyRole = s.framilyRole,
Sort = s.Sort,
TenantId = s.TenantId.Value,
Id = s.Id
})
.ToPagedListAsync(input.Page, input.PageSize);
return busStudentsFramilys;
}
/// <summary>
/// 增加家长信息表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("add")]
public async Task Add(AddBusStudentsFramilyInput input)
{
var busStudentsFramily = input.Adapt<BusStudentsFramily>();
await _busStudentsFramilyRep.InsertAsync(busStudentsFramily);
}
/// <summary>
/// 删除家长信息表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("delete")]
public async Task Delete(DeleteBusStudentsFramilyInput input)
{
var busStudentsFramily = await _busStudentsFramilyRep.AsQueryable().FirstAsync(u => u.Id == input.Id);
await _busStudentsFramilyRep.FakeDeleteAsync(busStudentsFramily);
}
/// <summary>
/// 更新家长信息表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("edit")]
public async Task Update(UpdateBusStudentsFramilyInput input)
{
var isExist = await _busStudentsFramilyRep.AsQueryable().AnyAsync(u => u.Id == input.Id);
if (!isExist) throw Oops.Oh(ErrorCodeEnum.D3000);
var busStudentsFramily = input.Adapt<BusStudentsFramily>();
await _busStudentsFramilyRep.UpdateAsync(busStudentsFramily);
}
/// <summary>
/// 获取家长信息表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("detail")]
public async Task<BusStudentsFramilyOutput> Get([FromQuery] QueryeBusStudentsFramilyInput input)
{
return (await _busStudentsFramilyRep.AsQueryable().FirstAsync(u => u.Id == input.Id)).Adapt<BusStudentsFramilyOutput>();
}
/// <summary>
/// 获取家长信息表列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("list")]
public async Task<List<BusStudentsFramilyOutput>> List([FromQuery] BusStudentsFramilyInput input)
{
return await _busStudentsFramilyRep.AsQueryable().
Select(s => new BusStudentsFramilyOutput()
{
Uuid = s.Uuid,
Phone = s.Phone,
NickName = s.NickName,
framilyRole = s.framilyRole,
Sort = s.Sort,
TenantId = s.TenantId.Value,
Id = s.Id
})
.ToListAsync();
}
/// <summary>
/// 获取微信openid
/// </summary>
/// <param name="requestDto"></param>
/// <returns></returns>
[HttpPost("WeChatOauth")]
[AllowAnonymous]
public async Task<WeChatResposeDto> WeChatOauth(WeChatRequestDto requestDto)
{
var weChatResposeDto = new WeChatResposeDto();
var reqJsCode2Session = new SnsJsCode2SessionRequest()
{
JsCode = requestDto.Code,
};
var resCode2Session = await _wechatApiClient.ExecuteSnsJsCode2SessionAsync(reqJsCode2Session);
if (resCode2Session.ErrorCode != (int)WechatReturnCodeEnum.)
throw Oops.Oh(resCode2Session.ErrorMessage + " " + resCode2Session.ErrorCode);
var wxUser = new BusStudentsFramily()
{
Uuid = resCode2Session.OpenId
};
var any = await _busStudentsFramilyRep.AsQueryable()
.AnyAsync(u => u.Uuid.Equals(resCode2Session.OpenId) && !u.IsDelete);
if (any)
{
wxUser = await _busStudentsFramilyRep.AsQueryable().Where(c => c.Uuid.Equals(resCode2Session.OpenId) && !c.IsDelete)
.FirstAsync(c => c.Uuid == resCode2Session.OpenId && c.TenantId > 0);
}
else
{
wxUser.TenantId = 1300000000001;//默认初始化租户,后期卖给其他机构需定向传值
// 生成Token令牌
await _busStudentsFramilyRep.InsertAsync(wxUser);
}
var tokenExpire = await _sysConfigService.GetTokenExpire();
var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>
{
{ ClaimConst.UserId, wxUser.Id },
{ ClaimConst.NickName, wxUser.NickName },
{ ClaimConst.LoginMode, LoginModeEnum.APP },
}, tokenExpire);
// 设置Swagger自动登录
_httpContextAccessor.HttpContext.SigninToSwagger(accessToken);
weChatResposeDto.Token = accessToken;
weChatResposeDto.OpenId = resCode2Session.OpenId;
weChatResposeDto.Session_key = resCode2Session.SessionKey;
weChatResposeDto.Id = wxUser.Id;
return weChatResposeDto;
}
/// <summary>
/// 获取用户手机号信息
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> GetUserPhonenumber(EnGetPhoneRequestDto dto)
{
bool status = false;
try
{
//var getaccessinfo = WeChatUtil.GetAccess_token<AccessTokenResult>(WeChatConst.Appid, WeChatConst.Key);
//var phoneinfo = WeChatUtil.GetUserPhonenumber<UserPhone_Info>(getaccessinfo.access_token, JsonUtil.ToJson(new PhoneRequestDto() { code = dto.Code }));
var accessToken = await GetCgibinToken();
var reqUserPhoneNumber = new WxaBusinessGetUserPhoneNumberRequest()
{
Code = dto.Code,
AccessToken = accessToken,
};
var resUserPhoneNumber = await _wechatApiClient.ExecuteWxaBusinessGetUserPhoneNumberAsync(reqUserPhoneNumber);
if (resUserPhoneNumber.ErrorCode != (int)WechatReturnCodeEnum.)
throw Oops.Oh(resUserPhoneNumber.ErrorMessage + " " + resUserPhoneNumber.ErrorCode);
var oauthinfo = await _busStudentsFramilyRep.AsQueryable().FirstAsync(c => c.Uuid == dto.OpenId && c.TenantId > 0);
if (oauthinfo != null)
{
// DingHookHelper.DingTalkHookMessage("SysOauthUserService", string.Format("code:{0};--jsons{1}", dto.Code, JsonUtil.ToJson(phoneinfo)));
oauthinfo.Phone = resUserPhoneNumber.PhoneInfo?.PhoneNumber;
oauthinfo.Avatar = "https://lwpostgradute.oss-cn-hangzhou.aliyuncs.com/defaultAvatarUrl.png";
oauthinfo.NickName = "家长" + new Random().Next(832468, 999999);
await _busStudentsFramilyRep.UpdateAsync(oauthinfo);
status = true;
}
}
catch (Exception ex)
{
throw Oops.Oh(ex.Message).StatusCode(200);
}
return status;
}
/// <summary>
/// 获取Access_token
/// </summary>
private async Task<string> GetCgibinToken()
{
var reqCgibinToken = new CgibinTokenRequest();
var resCgibinToken = await _wechatApiClient.ExecuteCgibinTokenAsync(reqCgibinToken);
if (resCgibinToken.ErrorCode != (int)WechatReturnCodeEnum.)
throw Oops.Oh(resCgibinToken.ErrorMessage + " " + resCgibinToken.ErrorCode);
return resCgibinToken.AccessToken;
}
/// <summary>
/// 保存用户信息并解密手机号
/// </summary>
/// <param name="encryptedDto"></param>
/// <returns></returns>
//[HttpPost]
////[AllowAnonymous]
//public async Task EncryptedInfo(EncryptedDto encryptedDto)
//{
// string phone = string.Empty;
// try
// {
// var accessToken = await GetCgibinToken();
// var reqUserPhoneNumber = new WxaBusinessGetUserPhoneNumberRequest()
// {
// Code = encryptedDto.code,
// AccessToken = accessToken,
// };
// var resUserPhoneNumber = await _wechatApiClient.ExecuteWxaBusinessGetUserPhoneNumberAsync(reqUserPhoneNumber);
// if (resUserPhoneNumber.ErrorCode != (int)WechatReturnCodeEnum.请求成功)
// throw Oops.Oh(resUserPhoneNumber.ErrorMessage + " " + resUserPhoneNumber.ErrorCode);
// var result = WeChatUtil.Code2Session<WeChatOauthinfo>(WeChatConst.Appid, WeChatConst.Key, encryptedDto.code);
// var any = await _busStudentsFramilyRep.AsQueryable().AnyAsync(c => c.Uuid == encryptedDto.openId && !c.IsDelete);
// if (any)
// {
// var single = await _busStudentsFramilyRep.AsQueryable().FirstAsync(c => c.Uuid == encryptedDto.openId && !c.IsDelete);
// single.Phone = resUserPhoneNumber.PhoneInfo?.PhoneNumber;
// single.Avatar = "https://lwpostgradute.oss-cn-hangzhou.aliyuncs.com/defaultAvatarUrl.png";
// single.NickName = "家长" + new Random().Next(832468, 999999);
// await _busStudentsFramilyRep.UpdateAsync(single);
// }
// else
// {
// await _busStudentsFramilyRep.InsertAsync(new BusStudentsFramily()
// {
// Avatar = "https://lwpostgradute.oss-cn-hangzhou.aliyuncs.com/defaultAvatarUrl.png",
// // Gender = encryptedDto.gender.ToString(),
// NickName = "家长" + new Random().Next(832468, 999999),
// Phone = resUserPhoneNumber.PhoneInfo?.PhoneNumber,
// TenantId = 1300000000001,//默认初始化租户,后期卖给其他机构需定向传值
// Uuid = encryptedDto.openId,
// // Source = "小程序"
// });
// }
// }
// catch (Exception ex)
// {
// throw Oops.Oh(ex.Message);
// }
//}
/// <summary>
/// 清空缓存后下次登录返回用户信息
/// </summary>
/// <param name="weChatLogin"></param>
/// <returns></returns>
[HttpGet("WeChatLogin")]
[AllowAnonymous]
public async Task<WchatOauthDto> WeChatLogin([FromQuery] WeChatRequestDto weChatLogin)
{
var user = new WchatOauthDto();
var reqJsCode2Session = new SnsJsCode2SessionRequest()
{
JsCode = weChatLogin.Code,
};
var resCode2Session = await _wechatApiClient.ExecuteSnsJsCode2SessionAsync(reqJsCode2Session);
if (resCode2Session.ErrorCode != (int)WechatReturnCodeEnum.)
throw Oops.Oh(resCode2Session.ErrorMessage + " " + resCode2Session.ErrorCode);
var wxUser = await _busStudentsFramilyRep.AsQueryable()
.Where(u => u.Uuid.Equals(resCode2Session.OpenId) && !u.IsDelete)
.FirstAsync();
_ = wxUser ?? throw Oops.Oh(ErrorCodeEnum.D1002).StatusCode(200);
user.Id = wxUser.Id;
user.TenantId = wxUser.TenantId.Value;
user.OpenId = wxUser.Uuid;
var tokenExpire = await _sysConfigService.GetTokenExpire();
var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>
{
{ ClaimConst.UserId, wxUser.Id },
{ ClaimConst.RealName, wxUser.NickName },
{ ClaimConst.LoginMode, LoginModeEnum.APP },
}, tokenExpire);
user.AccessToken = accessToken;
return user;
}
}
}