401 lines
14 KiB
C#
401 lines
14 KiB
C#
using Common.DbExtends.Extends;
|
||
using Common.DbExtends.Others;
|
||
using Common.Models.SubCountTables;
|
||
using Common.Models.UnqTables;
|
||
using Common.Utils;
|
||
using Server.MyClass.Views;
|
||
using SqlSugar;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Web.Http;
|
||
using Common.Models.Enums;
|
||
using Common.Models.SubTables;
|
||
using Server.Services;
|
||
|
||
namespace Server.Controllers.MemberManagement
|
||
{
|
||
public class UserController : DefaultController
|
||
{
|
||
/// <summary>
|
||
/// 获取机器人信息
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost, ErrorFilter]
|
||
public WebResult GetRobotInfo()
|
||
{
|
||
var Keyword = GetString("Keyword");
|
||
|
||
var exp = Expressionable.Create<Robot>();
|
||
|
||
if (!string.IsNullOrEmpty(Keyword))
|
||
{
|
||
exp.And(f => f.Nickname.Contains(Keyword));
|
||
}
|
||
var robotInfos = Db.Queryable<Robot>().Where(exp.ToExpression())
|
||
.Select(m => new RobotInfo { RobotId = m.Id, RobotName = m.Nickname, RobotType = m.UserType }).Take(20).ToList();
|
||
|
||
return PutData(robotInfos);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取用户组信息
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost, ErrorFilter]
|
||
public WebResult GetUserGrouInfo()
|
||
{
|
||
var Keyword = GetString("Keyword");
|
||
|
||
var exp = Expressionable.Create<UserGroup>();
|
||
|
||
if (!string.IsNullOrEmpty(Keyword))
|
||
{
|
||
exp.And(f => f.Name.Contains(Keyword));
|
||
}
|
||
|
||
var usergroup = Db.Queryable<UserGroup>().Where(exp.ToExpression())
|
||
.Select(a => new UserGroupInfo
|
||
{
|
||
Id = a.Id,
|
||
Name = a.Name,
|
||
}).Take(20).ToList();
|
||
|
||
return PutData(usergroup);
|
||
}
|
||
|
||
|
||
[HttpPost, ErrorFilter]
|
||
public WebResult GetData()
|
||
{
|
||
var db = Db;
|
||
db.CurrentConnectionConfig.ConfigureExternalServices.SplitTableService = new MySplitService(MySplitService.MySplitType.数量);
|
||
|
||
var PageIndex = GetInt("PageIndex", true);
|
||
var PageSize = GetInt("PageSize", true);
|
||
if (PageSize > 100) PageSize = 100;
|
||
var tNumber = 0;
|
||
|
||
var RobotId = GetInt("RobotId");//机器人Id
|
||
var GroupId = GetInt("GroupId");//分组ID
|
||
|
||
var userExp = Expressionable.Create<User>();
|
||
var exp = Expressionable.Create<User, UserData, UserGroup, User, Robot>();
|
||
|
||
var Keyword = GetString("Keyword");
|
||
if (!string.IsNullOrEmpty(Keyword))
|
||
{
|
||
var KeywordType = GetInt("KeywordType");
|
||
|
||
switch (KeywordType)
|
||
{
|
||
case 1://昵称搜索
|
||
userExp.And(u => u.NickName.Contains(Keyword));
|
||
exp.And((u1, d, g, u2, r) => u1.NickName.Contains(Keyword));
|
||
break;
|
||
|
||
case 2://账号搜索
|
||
userExp.And(u1 => u1.Username.Contains(Keyword));
|
||
exp.And((u1, d, g, u2, r) => u1.Username.Contains(Keyword));
|
||
break;
|
||
|
||
//case 3://账号ID搜索
|
||
// exp.And((d, g, u1, u2, r) => d.UserId == Convert.ToInt32(Keyword));
|
||
// break;
|
||
|
||
//case 4://上级昵称搜索
|
||
// exp.And((d, g, u1, u2, r) => u2.NickName == Keyword);
|
||
// break;
|
||
|
||
//case 5://上级账号搜索
|
||
// exp.And((d, g, u1, u2, r) => u2.Username == Keyword);
|
||
// break;
|
||
|
||
//case 6://上级账号ID搜索
|
||
// exp.And((d, g, u1, u2, r) => u2.Id == Convert.ToInt32(Keyword));
|
||
// break;
|
||
default:
|
||
return PutData("查询失败,暂不支持该搜索条件");
|
||
}
|
||
|
||
}
|
||
|
||
if (RobotId > 0)
|
||
exp.And((u1, d, g, u2, r) => r.Id == RobotId);
|
||
|
||
if (GroupId > 0)
|
||
exp.And((u1, d, g, u2, r) => g.Id == GroupId);
|
||
|
||
var ids = db.Queryable<User>()
|
||
.Where(userExp.ToExpression())
|
||
.OrderBy(o => o.Id)
|
||
.Select(s => s.Id)
|
||
.ToPageList(PageIndex, PageSize);
|
||
if (ids.Count <= 0)
|
||
{
|
||
return PutData(new PageResult<UserShow>(new List<UserShow>(), tNumber, PageSize, PageIndex));
|
||
}
|
||
//var idmax = db.Queryable<User>()
|
||
// .Where(userExp.ToExpression())
|
||
// .OrderBy(o => o.Id)
|
||
// .Select(s => s.Id)
|
||
// .Skip(PageIndex)
|
||
// .Take(PageSize)
|
||
// .Max<int>("Id");
|
||
//根据最大ID,选择分页的表
|
||
var rightQuery = db.Queryable<UserData>().SplitTableById(ids.Max(s => s));
|
||
var dataList = db.Queryable<User>()
|
||
.LeftJoin<UserData>(rightQuery, (u1, d) => d.UserId == u1.Id)//获取分组
|
||
.LeftJoin<UserGroup>((u1, d, g) => d.GroupId == g.Id)//获取分组
|
||
.LeftJoin<User>((u1, d, g, u2) => d.RecommendId == u2.Id)//获取用户的邀请人信息
|
||
.LeftJoin<Robot>((u1, d, g, u2, r) => u1.RobotId == r.Id)//获取机器人信息
|
||
.LeftJoin<UserBlack>((u1,d,g,u2,r,black)=> u1.Username == black.Username && u1.UserType == black.UserType)
|
||
.Where(exp.ToExpression())
|
||
.OrderBy(u1 => u1.Id, OrderByType.Desc)
|
||
.Select((u1, d, g, u2, r, black) => new UserShow
|
||
{
|
||
Id = u1.Id,
|
||
UserId = d.UserId,
|
||
Nickname = u1.NickName,
|
||
Username = u1.Username,
|
||
RecommendId = d.RecommendId,
|
||
InviterNickname = u2.NickName,
|
||
InviterHeadurl = u2.Headurl,
|
||
InviterUsername = u2.Username,
|
||
InviterId = u2.Id,
|
||
RobotName = r.Username,
|
||
TixianAmount = d.TixianAmount,
|
||
CurPoint = d.CurPoint,
|
||
EstimateCoupon = d.EstimateCoupon,
|
||
EstimateRebate = d.EstimateRebate,
|
||
GroupId = d.GroupId,
|
||
GroupName = g.Name,
|
||
PayOrderCount = d.PayOrderCount,
|
||
QueryCount = d.QueryCount,
|
||
RecommendCount = d.RecommendCount,
|
||
TixianCount = d.TixianCount,
|
||
UserStatus = d.UserStatus,
|
||
BlackInfo = black,
|
||
Headurl = u1.Headurl,
|
||
UserType = u1.UserType
|
||
})
|
||
.ToPageList(PageIndex, PageSize, ref tNumber);
|
||
|
||
foreach (var item in dataList)
|
||
{
|
||
if (item.BlackInfo != null && item.BlackInfo.Id != 0)
|
||
{
|
||
if (!item.BlackInfo.IsDel)
|
||
{
|
||
if (item.BlackInfo.IsCloud)
|
||
item.UserStatus = UserStatus.云黑名单;
|
||
else
|
||
item.UserStatus = UserStatus.黑名单;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
item.BlackInfo = null;
|
||
}
|
||
}
|
||
var res = new PageResult<UserShow>(dataList, tNumber, PageSize, PageIndex);
|
||
return PutData(res);
|
||
}
|
||
/// <summary>
|
||
/// 添加微信用户
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
//[HttpPost, ErrorFilter]
|
||
//public WebResult AddWechatUser()
|
||
//{
|
||
// var Wxid = GetString("Wxid");
|
||
|
||
// var user = Db.Queryable<User>().Where(f => f.Username == Wxid).First();
|
||
|
||
// if (user != null) return PutData("该微信用户已存在,请勿重复添加");
|
||
|
||
// user = new User();
|
||
|
||
// Util.CopyToObj(this.Param, user);
|
||
|
||
// Db.Insertable(user).ExecuteCommand();
|
||
|
||
// return PutSuccess;
|
||
//}
|
||
|
||
|
||
/// <summary>
|
||
/// 编辑微信用户
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost, ErrorFilter]
|
||
public WebResult UpdWechatUser()
|
||
{
|
||
var Id = GetInt("Id", true);
|
||
|
||
var wechatuser = Db.Queryable<User>().Where(f => f.Id == Id).First();
|
||
|
||
if (wechatuser == null)
|
||
{
|
||
return PutData("编辑失败,没有此用户");
|
||
}
|
||
|
||
Util.CopyToObj(this.Param, wechatuser);
|
||
//TODO:
|
||
Db.Updateable(wechatuser)
|
||
.IgnoreColumns(it => new { it.Id, it.IsFriend, it.CreateTime, })
|
||
.ExecuteCommand();
|
||
|
||
return PutSuccess;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除微信用户
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
//[HttpPost, ErrorFilter]
|
||
//public WebResult DelWechatUser()
|
||
//{
|
||
// var Id = GetInt("Id", true);
|
||
|
||
// var wechatuser = Db.Queryable<WechatUser>().Where(f => f.Id == Id).First();
|
||
|
||
// if (wechatuser == null)
|
||
// {
|
||
// return PutData("删除失败,没有此微信用户");
|
||
// }
|
||
|
||
// Db.Deleteable(wechatuser).ExecuteCommand();
|
||
|
||
// return PutSuccess;
|
||
//}
|
||
|
||
|
||
/// <summary>
|
||
/// 加用户黑名单
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost, ErrorFilter]
|
||
public WebResult AddBlack()
|
||
{
|
||
//加黑类型
|
||
var id = GetLong("Id");
|
||
var isCloud = GetBoolean("IsCloud");
|
||
var blackType = GetEnum<BlackType>("BlackType", true);
|
||
var remark = GetString("Remark", true);
|
||
var user = Db.Queryable<User>().Where(w => w.Id == id).First();
|
||
if (user == null)
|
||
{
|
||
return PutData("用户不存在");
|
||
}
|
||
|
||
var userData = Db.GetUserData(user.Id);
|
||
//如果用户在白名单,需要恢复到正常名单
|
||
if (userData.UserStatus == UserStatus.白名单)
|
||
{
|
||
userData.UserStatus = UserStatus.正常;
|
||
Db.Save(userData);
|
||
}
|
||
|
||
var blacklistService = new BlacklistService();
|
||
var result = blacklistService.AddUserBlack(user.UserType, user.Username, user.NickName, blackType, user.Headurl, remark, isCloud);
|
||
if (string.IsNullOrWhiteSpace(result))
|
||
{
|
||
return PutSuccess;
|
||
}
|
||
return PutData(result);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 删除用户黑名单
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost, ErrorFilter]
|
||
public WebResult DelBlack()
|
||
{
|
||
var id = GetLong("Id");
|
||
var user = Db.Queryable<User>().Where(w => w.Id == id).First();
|
||
if (user == null)
|
||
{
|
||
return PutData("删除失败,用户不存在");
|
||
}
|
||
|
||
var blacklistService = new BlacklistService();
|
||
var result = blacklistService.RemoveUserBlack(user.Username, user.UserType, true);
|
||
if (string.IsNullOrWhiteSpace(result))
|
||
{
|
||
return PutSuccess;
|
||
}
|
||
return PutError;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 加白名单
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public WebResult AddWhite()
|
||
{
|
||
var Id = GetLong("Id",true);
|
||
|
||
var user = Db.Queryable<User>().Where(f => f.Id == Id).First();
|
||
if (user == null) return PutData("操作失败,用户数据不存在");
|
||
|
||
var userData = Db.GetUserData(user.Id);
|
||
if (userData.UserStatus == UserStatus.白名单) return PutData("操作失败,用户已在白名单中");
|
||
userData.UserStatus = UserStatus.白名单;
|
||
Db.Save(userData);
|
||
|
||
//尝试删除云端的黑名单,防止用户故意拉黑后,又把自己的用户变白名单
|
||
var blacklistService = new BlacklistService();
|
||
var result = blacklistService.RemoveUserBlack(user.Username, user.UserType, true);
|
||
return PutSuccess;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 删白名单
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public WebResult DelWhite()
|
||
{
|
||
var Id = GetLong("Id", true);
|
||
|
||
var user = Db.Queryable<User>().Where(f => f.Id == Id).First();
|
||
if (user == null) return PutData("操作失败,用户数据不存在");
|
||
|
||
|
||
var userData = Db.GetUserData(user.Id);
|
||
if (userData.UserStatus != UserStatus.白名单) return PutData("操作失败,用户不在白名单中");
|
||
|
||
userData.UserStatus = UserStatus.正常;
|
||
Db.Save(userData);
|
||
|
||
return PutSuccess;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 修改用户积分
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost, ErrorFilter]
|
||
public WebResult ChangeUserPoint()
|
||
{
|
||
var userid = GetInt("UserId", true);
|
||
var point = GetDouble("Point", true);
|
||
var remark = GetString("Remark", true);
|
||
var ResIds = GetIntList("ResIds");
|
||
|
||
//var voucherUrlArr = voucherUrls.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
|
||
Db.ChangePoint(userid, point, PointType.后台修改, remark, 0, Session==null?0:Session.Uid, ResIds.ToArray());
|
||
return PutSuccess;
|
||
}
|
||
|
||
|
||
|
||
}
|
||
}
|