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;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|