using HiTeachCE.Context;
using HiTeachCE.Dtos;
using HiTeachCE.Extension;
using HiTeachCE.Helpers;
using HiTeachCE.Models;
using HiTeachCE.Services;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using OpenXmlPowerTools;
using Org.BouncyCastle.Ocsp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Security.Claims;
using System.Text.Json;
using System.Threading.Tasks;
using TEAMModelOS.SDK.Context.Configuration;
using TEAMModelOS.SDK.Context.Exception;
using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
using TEAMModelOS.SDK.Extension.JwtAuth.Models;
using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
using TEAMModelOS.SDK.Helper.Common.JsonHelper;
using TEAMModelOS.SDK.Helper.Query.LinqHelper;
using TEAMModelOS.SDK.Helper.Security.ShaHash;
namespace HiTeachCE.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class LecturerController : BaseController
{
private readonly LecturerService lecturerService;
public LecturerController(LecturerService lecturer)
{
lecturerService = lecturer;
}
///
/// 获取讲师列表
///
///
///
[HttpPost("list")]
[Authorize(Roles =Constant.Role_Root)]
public BaseJosnRPCResponse List(PaginationJosnRPCRequest> request)
{
// request.@params.TryAdd("PartitionKey", request.lang);
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
List lecturers = new List();
Expression> linq = null;
linq = f => 1 == 1;
if (request.@params.data.TryGetValue("cellphone", out string cellphone) && !string.IsNullOrEmpty(cellphone))
{
linq = linq.And(m => m.cellphone == cellphone);
}
if (request.@params.data.TryGetValue("account", out string account) && !string.IsNullOrEmpty(account))
{
linq = linq.And(s=> s.account == account);
}
if (request.@params.data.TryGetValue("username", out string username) && !string.IsNullOrEmpty(username))
{
linq = linq.And(m => m.username.Contains(username));
}
if (request.@params.data.TryGetValue("id", out string id) && !string.IsNullOrEmpty(id))
{
linq = linq.And(m => m.id == id);
}
if (linq != null)
{
lecturers = lecturerService.GetPageList(linq, request.@params.page);
}
lecturers.ForEach(x => { x.password = null; });
return builder.Data(lecturers).Page(request.@params.page).build();
}
///
/// 更新自己的资料
///
///
///
[HttpPost("updateSelf")]
[Authorize(Policy = Constant.Role_WebAll)]
public BaseJosnRPCResponse UpdateSelf(JosnRPCRequest request)
{
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
string unionid = GetLoginUser(JwtClaimTypes.Id);
Lecturer lecturer = lecturerService.GetById(request.@params.id);
bool b = false;
//确保更新的是自己
if (unionid.Equals(request.@params.unionid) && unionid.Equals(lecturer.unionid))
{
b = UpdateLecture(request, lecturer);
}
else {
throw new BizException("只能更新自己的信息!");
}
return builder.Data(b).build();
}
///
/// 更新
///
/// 修改后的
/// 修改前的
///
private bool UpdateLecture(JosnRPCRequest request ,Lecturer lecturer)
{
bool b = false;
if (lecturer != null)
{
if (!string.IsNullOrEmpty(request.@params.password))
{
request.@params.password = BCrypt.Net.BCrypt.HashPassword(request.@params.password);
}
else
{
request.@params.password = lecturer.password;
}
request.@params.unionid = lecturer.unionid;
if (lecturer.setaccount != 0)
{
request.@params.account = lecturer.account;
}
request.@params.registerTime = lecturer.registerTime;
request.@params.cellphone = lecturer.cellphone;
request.@params.areaCode = lecturer.areaCode;
request.@params.dingOpenid = lecturer.dingOpenid;
request.@params.dingUnionid = lecturer.dingUnionid;
b = lecturerService.Update(request.@params);
}
return b;
}
///
/// 更新讲师
///
///
///
[HttpPost("update")]
[Authorize(Policy = Constant.Role_Root)]
public BaseJosnRPCResponse Update(JosnRPCRequest request)
{
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
Lecturer lecturer = lecturerService.GetById(request.@params.id);
bool b = UpdateLecture(request, lecturer);
return builder.Data(b).build();
}
///
/// 绑定钉钉 参数 TmpAuthCode
///
///
///
[HttpPost("bindDing")]
[Authorize(Policy = Constant.Role_WebAll)]
public BaseJosnRPCResponse BindDing(JosnRPCRequest request)
{
bool flag = false;
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
if (RedisHelper.Exists("TmpAuthCode:" + request.@params))
{
DingUserInfo dingUserInfo = RedisHelper.HGet("TmpAuthCode:" + request.@params, request.@params);
string unionid = GetLoginUser(JwtClaimTypes.Id);
Expression> linq = null;
linq = l => l.unionid == unionid;
List list = lecturerService.GetList(linq);
if (list.IsNotEmpty()&& dingUserInfo!=null)
{
Lecturer lecturer = list[0];
lecturer.dingOpenid = dingUserInfo.Openid;
lecturer.dingUnionid = dingUserInfo.Unionid;
lecturer.dingNick = dingUserInfo.Nick;
flag = lecturerService.Update(lecturer);
}
}
else {
throw new BizException("钉钉临时授权码过期", 2);
}
return builder.Data(flag).build();
}
//Unbound 解除绑定
///
/// 注册用户
///
///
///
[HttpPost("register")]
public BaseJosnRPCResponse Register(JosnRPCRequest request)
{
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
if (RedisHelper.Exists("ticket:" + request.@params.ticket))
{
if (request.@params.user != null)
{
string[] phone = RedisHelper.HVals("ticket:" + request.@params.ticket);
if (phone.IsNotEmpty())
{
if (!request.@params.user.cellphone.Equals(phone[0]))
{
throw new BizException("手机号与凭证不匹配!", 2);
}
}
else
{
throw new BizException("凭证无效!", 2);
}
Expression> linq = null;
linq = m => m.cellphone == request.@params.user.cellphone || m.account == request.@params.user.account;
List lecturers = lecturerService.GetList(linq);
if (lecturers.IsNotEmpty())
{
throw new BizException("手机号或账号已经存在!", 2);
}
else
{
request.@params.user.id = Guid.NewGuid().ToString();
request.@params.user.unionid = Guid.NewGuid().ToString("N");
request.@params.user.areaCode = "86";
request.@params.user.status = 1;
request.@params.user.registerTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
if (request.@params.user.password == null)
{
request.@params.user.password = "";
}
else
{
request.@params.user.password = BCrypt.Net.BCrypt.HashPassword(request.@params.user.password);
}
bool ib = lecturerService.Insert(request.@params.user);
if (ib)
{
return builder.Data(ib).build();
}
else
{
throw new BizException("注册失败!", 2);
}
}
}
else
{
throw new BizException("参数错误!", 2);
}
}
else
{
throw new BizException("短信验证过期!", 2);
}
}
}
}