mahjong_group/server/CoreCms.Net.Web.Admin/Controllers/SQ/SQEarningsController.cs
2026-01-01 14:35:52 +08:00

394 lines
12 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2025/12/7
* Description: 收益管理
***********************************************************************/
using CoreCms.Net.Configuration;
using CoreCms.Net.Filter;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.FromBody;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Web.Admin.Infrastructure;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace CoreCms.Net.Web.Admin.Controllers
{
/// <summary>
/// 收益管理
/// </summary>
[Description("收益管理")]
[Route("api/[controller]/[action]")]
[ApiController]
//[RequiredErrorForAdmin]
[Authorize]
public class SQEarningsController : ControllerBase
{
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly ISQEarningsServices _sQEarningsServices;
private readonly ICoreCmsUserServices _userServices;
private readonly ISQRoomsServices _sQRoomsServices;
private readonly ISQReservationsServices _sQReservationsServices;
/// <summary>
/// 构造函数
/// </summary>
public SQEarningsController(
IWebHostEnvironment webHostEnvironment,
ISQEarningsServices sQEarningsServices,
ICoreCmsUserServices userServices,
ISQRoomsServices sQRoomsServices,
ISQReservationsServices sQReservationsServices)
{
_webHostEnvironment = webHostEnvironment;
_sQEarningsServices = sQEarningsServices;
_userServices = userServices;
_sQRoomsServices = sQRoomsServices;
_sQReservationsServices = sQReservationsServices;
}
#region
/// <summary>
/// 获取收益记录列表
/// </summary>
/// <returns></returns>
[HttpPost]
[Description("获取收益记录列表")]
public async Task<AdminUiCallBack> GetPageList()
{
var jm = new AdminUiCallBack();
var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1);
var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(30);
var where = PredicateBuilder.True<SQEarningsRecord>();
// 获取排序字段
var orderField = Request.Form["orderField"].FirstOrDefault();
Expression<Func<SQEarningsRecord, object>> orderEx = orderField switch
{
"id" => p => p.id,
"user_id" => p => p.user_id,
"earnings" => p => p.earnings,
"type" => p => p.type,
"create_time" => p => p.create_time,
_ => p => p.id
};
// 设置排序方式
var orderDirection = Request.Form["orderDirection"].FirstOrDefault();
var orderBy = orderDirection switch
{
"asc" => OrderByType.Asc,
"desc" => OrderByType.Desc,
_ => OrderByType.Desc
};
// 查询筛选
var id = Request.Form["id"].FirstOrDefault().ObjectToInt(0);
if (id > 0)
{
where = where.And(p => p.id == id);
}
var userId = Request.Form["user_id"].FirstOrDefault().ObjectToInt(0);
if (userId > 0)
{
where = where.And(p => p.user_id == userId);
}
var type = Request.Form["type"].FirstOrDefault();
if (!string.IsNullOrEmpty(type))
{
var typeInt = type.ObjectToInt(-1);
if (typeInt >= 0)
{
where = where.And(p => p.type == typeInt);
}
}
// 获取数据
var list = await _sQEarningsServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize, true);
// 关联查询用户昵称
var userIds = list.Select(p => p.user_id).Distinct().ToList();
var userDict = new Dictionary<int, string>();
if (userIds.Any())
{
var users = await _userServices.QueryListByClauseAsync(p => userIds.Contains(p.id));
userDict = users.ToDictionary(p => p.id, p => p.nickName ?? p.mobile ?? $"用户{p.id}");
}
// 组装返回数据
var resultList = list.Select(p => new
{
p.id,
p.user_id,
p.reservation_id,
p.room_id,
p.room_number,
p.room_name,
p.room_fee,
p.earnings,
p.type,
typeName = p.type == 1 ? "佣金" : "鸽子费",
p.remark,
p.create_time,
p.operator_id,
nickName = userDict.ContainsKey(p.user_id) ? userDict[p.user_id] : $"用户{p.user_id}"
}).ToList();
jm.data = resultList;
jm.code = 0;
jm.count = list.TotalCount;
jm.msg = "数据调用成功!";
return jm;
}
#endregion
#region
/// <summary>
/// 首页数据
/// </summary>
/// <returns></returns>
[HttpPost]
[Description("首页数据")]
public AdminUiCallBack GetIndex()
{
var jm = new AdminUiCallBack { code = 0 };
return jm;
}
#endregion
#region
/// <summary>
/// 创建页面
/// </summary>
/// <returns></returns>
[HttpPost]
[Description("创建页面")]
public AdminUiCallBack GetCreate()
{
var jm = new AdminUiCallBack { code = 0 };
return jm;
}
/// <summary>
/// 创建提交(添加收益)
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("添加收益")]
public async Task<AdminUiCallBack> DoCreate([FromBody] AddEarningsRequest entity)
{
var jm = new AdminUiCallBack();
// 获取当前登录管理员ID
var operatorId = HttpContext.User.Claims.FirstOrDefault(c => c.Type == "id")?.Value.ObjectToInt(0) ?? 0;
var result = await _sQEarningsServices.AddEarningsAsync(
entity.user_id,
entity.reservation_id,
entity.room_id,
entity.room_number,
entity.room_name,
entity.room_fee??0,
entity.earnings ?? 0,
entity.type ?? 1,
entity.remark,
operatorId);
jm.code = result.status ? 0 : 1;
jm.msg = result.msg;
return jm;
}
#endregion
#region
/// <summary>
/// 删除数据
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("删除数据")]
public async Task<AdminUiCallBack> DoDelete([FromBody] FMIntId entity)
{
var jm = new AdminUiCallBack();
var result = await _sQEarningsServices.DeleteByIdAsync(entity.id);
jm.code = result.code;
jm.msg = result.msg;
return jm;
}
/// <summary>
/// 批量删除
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("批量删除")]
public async Task<AdminUiCallBack> DoBatchDelete([FromBody] FMArrayIntIds entity)
{
var jm = new AdminUiCallBack();
var result = await _sQEarningsServices.DeleteByIdsAsync(entity.id);
jm.code = result.code;
jm.msg = result.msg;
return jm;
}
#endregion
#region
/// <summary>
/// 获取用户列表
/// </summary>
/// <returns></returns>
[HttpPost]
[Description("获取用户列表")]
public async Task<AdminUiCallBack> GetUserList()
{
var jm = new AdminUiCallBack();
var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1);
var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(30);
var where = PredicateBuilder.True<CoreCmsUser>();
// 搜索条件
var keyword = Request.Form["keyword"].FirstOrDefault();
if (!string.IsNullOrEmpty(keyword))
{
where = where.And(p => p.nickName.Contains(keyword) || p.mobile.Contains(keyword) || p.id.ToString() == keyword);
}
where = where.And(p => p.isDelete == false);
var list = await _userServices.QueryPageAsync(where, p => p.id, OrderByType.Desc, pageCurrent, pageSize);
var resultList = list.Select(p => new
{
p.id,
p.nickName,
p.mobile,
p.avatarImage,
displayName = p.nickName ?? p.mobile ?? $"用户{p.id}"
}).ToList();
jm.data = resultList;
jm.code = 0;
jm.count = list.TotalCount;
jm.msg = "数据调用成功!";
return jm;
}
#endregion
#region
/// <summary>
/// 获取房间列表
/// </summary>
/// <returns></returns>
[HttpPost]
[Description("获取房间列表")]
public async Task<AdminUiCallBack> GetRoomList()
{
var jm = new AdminUiCallBack();
var rooms = await _sQRoomsServices.QueryListByClauseAsync(p => p.status);
var resultList = rooms.Select(p => new
{
p.id,
room_number = p.id,
room_name= p.name,
displayName = $"{p.id}{p.name}"
}).ToList();
jm.data = resultList;
jm.code = 0;
jm.msg = "数据调用成功!";
return jm;
}
#endregion
}
/// <summary>
/// 添加收益请求
/// </summary>
public class AddEarningsRequest
{
/// <summary>
/// 用户ID
/// </summary>
public int user_id { get; set; }
/// <summary>
/// 预约ID
/// </summary>
public int? reservation_id { get; set; }
/// <summary>
/// 房间ID
/// </summary>
public int? room_id { get; set; }
/// <summary>
/// 房号
/// </summary>
public string? room_number { get; set; }
/// <summary>
/// 房名
/// </summary>
public string? room_name { get; set; }
/// <summary>
/// 房费
/// </summary>
public decimal? room_fee { get; set; }
/// <summary>
/// 收益金额
/// </summary>
public decimal? earnings { get; set; }
/// <summary>
/// 类型1=佣金2=鸽子费
/// </summary>
public int? type { get; set; } = 1;
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
}
}