123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- using HiTeachCE.Helpers;
- using HiTeachCE.Models;
- using HiTeachCE.Services;
- using IdentityModel;
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Mvc;
- using OpenXmlPowerTools;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel.DataAnnotations;
- using System.Linq;
- using System.Linq.Expressions;
- using TEAMModelOS.SDK.Context.Exception;
- using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
- using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
- using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
- namespace HiTeachCE.Controllers
- {
- [Route("api/[controller]")]
- [ApiController]
- public class MemberController : BaseController
- {
- public MemberService memberService;
- public LecturerService lecturerService;
- public OrganizationService organizationService;
- public ActivationCodeService activationCodeService;
- public MemberController(MemberService member , LecturerService lecturer,OrganizationService organization,ActivationCodeService activationCode) {
- memberService = member;
- lecturerService = lecturer;
- organizationService = organization;
- activationCodeService = activationCode;
- }
- /// <summary>
- /// 退出组织 必须本人退出
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost("exit")]
- [Authorize(Policy = Constant.Role_WebAll)]
- public BaseJosnRPCResponse Exit(JosnRPCRequest<Dictionary<string,string>> request) {
- JsonRPCResponseBuilder builder = new JsonRPCResponseBuilder();
- string role = GetLoginUser(JwtClaimTypes.Role);
- string loginUnionid = GetLoginUser(JwtClaimTypes.Id);
- bool flag = false;
- if(request.@params.TryGetValue("unionid",out string unionid) &&
- request.@params.TryGetValue("orgCode",out string orgCode))
- {
- if (unionid.Equals(loginUnionid)) {
- Expression<Func<Member, bool>> mlinq = null;
- //当前登录人员是否是管理员
- mlinq = o => o.orgCode == orgCode && o.unionid == unionid;
- List<Member> members= memberService.GetList(mlinq);
- if (members.IsNotEmpty()) {
- members.ForEach(x => { flag = memberService.Delete(x.id); });
- }
- }
- else
- {
- throw new BizException("必须本人退出组织!",2);
- }
- }
- return builder.Data(flag).build();
- }
- /// <summary>
- /// 移除成员
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost("remove")]
- [Authorize(Policy = Constant.Role_RootAdmin)]
- public BaseJosnRPCResponse Remove(JosnRPCRequest<Member> request)
- {
- JsonRPCResponseBuilder builder = new JsonRPCResponseBuilder();
- string role = GetLoginUser(JwtClaimTypes.Role);
- string unionid = GetLoginUser(JwtClaimTypes.Id);
- bool flag = false;
- if (!string.IsNullOrEmpty(request.@params.id))
- {
- Expression<Func<Member, bool>> mlinq = null;
- //当前登录人员是否是管理员
- mlinq = o => o.orgCode == request.@params.orgCode && o.admin == 1; ;
- List<Member> members = memberService.GetList(mlinq);
- if (members.IsNotEmpty() )
- {
- if (members.Count == 1 && members[0].unionid.Equals(request.@params.unionid)) {
- throw new BizException("请保留至少一位管理员!", 2);
- }
- }
- else {
- throw new BizException("该组织已经没有管理员,请设置管理员",2);
- }
-
- if (role.Contains(Constant.Role_Root))
- {
- flag = memberService.Delete(request.@params.id);
- }
- else
- {
- List<Member> ms= members.Where(x => x.unionid == unionid).ToList();
- if (ms.IsNotEmpty())
- {
- flag = memberService.Delete(request.@params.id);
- }
- else {
- throw new BizException("登录账号不是此组织管理员,不能操作此人员", 2);
- }
- }
-
- }
- return builder.Data(flag).build();
- }
- /// <summary>
- /// 更新组织成员
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost("update")]
- [Authorize(Policy = Constant.Role_RootAdmin)]
- public BaseJosnRPCResponse Update(JosnRPCRequest<Member> request) {
- JsonRPCResponseBuilder builder = new JsonRPCResponseBuilder();
- string role = GetLoginUser(JwtClaimTypes.Role);
- string unionid = GetLoginUser(JwtClaimTypes.Id);
- bool flag = false;
- if (!string.IsNullOrEmpty(request.@params.id)) {
- Member member= memberService.GetById(request.@params.id);
- if (member != null) {
- member.admin = request.@params.admin;
- // member.expires = request.@params.expires;
- member.status = request.@params.status;
- member.memberName = request.@params.memberName;
-
- if (role.Contains(Constant.Role_Root))
- {
- flag= memberService.Update(member);
- }
- else {
- Expression<Func<Member, bool>> mlinq = null;
- //当前登录人员是否是管理员
- mlinq = o => o.unionid == unionid && o.orgCode == member.orgCode && o.admin == 1;
- List<Member> members = memberService.GetList(mlinq);
- if (members.IsNotEmpty())
- {
- flag = memberService.Update(member);
- }
- else
- {
- throw new BizException("当前登录用户不是该组织的管理员!", 2);
- }
- }
- }
- }
- return builder.Data(flag).build();
- }
- /// <summary>
- /// 添加人员
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost("add")]
- [Authorize(Policy = Constant.Role_RootAdmin)]
- public BaseJosnRPCResponse Add(JosnRPCRequest<MemberDto> request)
- {
- JsonRPCResponseBuilder builder = new JsonRPCResponseBuilder();
- string role = GetLoginUser(JwtClaimTypes.Role);
- string unionid = GetLoginUser(JwtClaimTypes.Id);
- bool flag = false;
- Expression<Func<Organization, bool>> olinq = null;
- olinq =o => o.code == request.@params.orgCode&& o.status == 1;
- List<Organization> organizations= organizationService.GetList(olinq);
- if (organizations.IsNotEmpty())
- {
- Organization organization = organizations[0];
- if (organization.type == 1)
- {
- long time = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
- Expression<Func<ActivationCode, bool>> alinq = null;
- alinq = o => o.orgCode == request.@params.orgCode && o.status == 1;
- List<ActivationCode> activationCodes = activationCodeService.GetList(alinq);
- int maximum = 0;
- long expires = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
- if (activationCodes.IsNotEmpty())
- {
- ActivationCode activationCode = activationCodes[0];
- maximum = activationCode.maximum;
- if (activationCode.expires > time)
- {
- expires = activationCode.expires;
- }
- else
- {
- throw new BizException("组织机构授权已经过期!", 2);
- }
- }
- else
- {
- throw new BizException("组织机构未被授权!", 2);
- }
- Dictionary<string, object> addPhone = new Dictionary<string, object>();
- List<string> phones = new List<string>();
- foreach (string cellphone in request.@params.cellphone)
- {
- Expression<Func<Member, bool>> cmlinq = null;
- cmlinq = o => o.orgCode == request.@params.orgCode;
- List<Member> membersc = memberService.GetList(cmlinq);
- if (membersc.IsNotEmpty() && membersc.Count >= maximum)
- {
- // addPhone.Add("addPhone", phones);
- //builder.Extend(addPhone);
- flag = false;
- break;
- }
- Expression<Func<Lecturer, bool>> linq = null;
- linq = m => m.cellphone == cellphone;
- List<Lecturer> lecturers = lecturerService.GetList(linq);
- Lecturer lecturer = null;
- if (!lecturers.IsNotEmpty())
- {
- //新增组织机构管理员
- Random random = new Random();
- string seed = new string(Constant.az09);
- string pfx = "";
- for (int i = 0; i < 4; i++)
- {
- string c = seed.ToCharArray()[random.Next(0, seed.Length)] + "";
- seed.Replace(c, "");
- pfx = pfx + c;
- }
- lecturer = new Lecturer
- {
- id = Guid.NewGuid().ToString(),
- unionid = Guid.NewGuid().ToString("N"),
- username = cellphone + "手机用户",
- password = "",
- account = "hitmd-" + cellphone.Substring(cellphone.Length - 4, 4) + "#" + pfx,
- areaCode = "86",
- registerTime = time,
- status = 1,
- setaccount = 0,
- cellphone = cellphone,
- avatar = "https://cdhabook.teammodel.cn/avatar/usertile" + random.Next(10, 44) + ".png"
- };
- flag = lecturerService.Insert(lecturer);
- }
- else
- {
- lecturer = lecturers[0];
- }
- Expression<Func<Member, bool>> melinq = null;
- melinq = m => m.unionid == lecturer.unionid && m.orgCode == organization.code;
- List<Member> membersEx = memberService.GetList(melinq);
- if (!membersEx.IsNotEmpty())
- {
- Member member = new Member
- {
- id = Guid.NewGuid().ToString(),
- orgCode = organization.code,
- admin = request.@params.admin,
- // expires = -1,
- status = 1,
- unionid = lecturer.unionid,
- createTime = time
- };
- //if (request.@params.expires > 0)
- //{
- // member.expires = time + request.@params.expires * 60 * 60 * 24;
- //}
- //else
- //{
- // member.expires = request.@params.expires;
- //}
- if (role.Contains(Constant.Role_Root))
- {
- flag = memberService.Insert(member);
- }
- else
- {
- Expression<Func<Member, bool>> mlinq = null;
- //当前登录人员是否是管理员
- mlinq = o => o.unionid == unionid && o.orgCode == organization.code && o.admin == 1;
- List<Member> members = memberService.GetList(mlinq);
- if (members.IsNotEmpty())
- {
- flag = memberService.Insert(member);
- }
- else
- {
- // throw new BizException("当前登录用户不是该组织的管理员!", 2);
- }
- }
- phones.Add(lecturer.cellphone);
- }
- }
- addPhone.Add("addPhone", phones);
- builder.Extend(addPhone);
- }
- else
- {
- throw new BizException("个人用户不允许添加其他成员!", 2);
- }
- }
- else {
- throw new BizException("组织机构不存在或禁用!", 2);
- }
- return builder.Data(flag).build();
- }
- public class MemberDto {
- [Required(ErrorMessage = "组织机构必须设置")]
- public string orgCode { get; set; }
- [Required(ErrorMessage = "手机号必须填写")]
- public List<string> cellphone { get; set; }
- [Required(ErrorMessage = "是否组织管理员必须填写")]
- [Range(0,1, ErrorMessage = "是否组织管理员请输入0~1的整数")]
- public int admin { get; set; }
- /// <summary>
- /// 时长-1 永久 ,大于0 按天计算
- /// </summary>
- //[Required(ErrorMessage = "授权时限必须填写")]
- //[Range(-1, 3650, ErrorMessage = "请输入-1~3650的整数")]
- //public int expires { get; set; }
- }
- /// <summary>
- /// 查看组织成员
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost("list")]
- [Authorize(Policy =Constant.Role_RootAdmin)]
- public BaseJosnRPCResponse list(PaginationJosnRPCRequest<Dictionary<string, string>> request) {
- JsonRPCResponseBuilder builder = new JsonRPCResponseBuilder();
- string role = GetLoginUser(JwtClaimTypes.Role);
- string unionid = GetLoginUser(JwtClaimTypes.Id);
- if (request.@params.data.TryGetValue("orgCode", out string orgCode))
- {
- ///超级管理员可以处理所有的组织
- if (role.Contains(Constant.Role_Root))
- {
- Expression<Func<Member, bool>> olinq = null;
- olinq = o => o.orgCode == orgCode;
- List<Member> members= memberService.GetPageList(olinq,request.@params.page);
- dynamic lecs =new List<Lecturer>();
- if (members.IsNotEmpty()) {
- Expression<Func<Lecturer, object>> linq = null;
- linq = l => l.unionid;
- List<Lecturer> lecturers = lecturerService.GetListIn(linq, members.Select(x => x.unionid).ToArray());
- lecs = lecturers.Select(x => new { x.username, x.unionid, x.status,x.cellphone }).ToList();
- }
- builder.Data(members).Page(request.@params.page).Extend(new Dictionary<string, object> { { "lecturers", lecs} });
- }
- else
- {
- //普通管理员只能处理自己的组织
- Expression<Func<Member, bool>> olinq = null;
- olinq = o => o.orgCode == orgCode && o.unionid == unionid && o.admin == 1;
-
- List<Member> members = memberService.GetList(olinq);
- if (members.IsNotEmpty()) {
- Expression<Func<Member, bool>> qlinq = null;
- qlinq = o => o.orgCode == orgCode;
- List<Member> membersOrg = memberService.GetPageList(qlinq, request.@params.page);
- dynamic lecs = new List<Lecturer>();
- if (membersOrg.IsNotEmpty()) {
- Expression<Func<Lecturer, object>> linq = null;
- linq = l => l.unionid;
- List<Lecturer> lecturers = lecturerService.GetListIn(linq, membersOrg.Select(x => x.unionid).ToArray());
- lecs = lecturers.Select(x => new { x.username, x.unionid, x.status, x.cellphone }).ToList();
- }
- builder.Data(membersOrg).Page(request.@params.page).Extend(new Dictionary<string, object> { { "lecturers", lecs } });
- }
- }
- }
-
- return builder.build();
- }
- }
- }
|