using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using NCC.Common.Core.Manager;
using NCC.Common.Enum;
using NCC.Common.Filter;
using NCC.Common.Helper;
using NCC.Dependency;
using NCC.DynamicApiController;
using NCC.Extend.Entitys.Dto.LqXhFeedback;
using NCC.Extend.Entitys.lq_xh_feedback;
using NCC.Extend.Entitys.lq_xh_hyhk;
using NCC.Extend.Interfaces.LqXhFeedback;
using NCC.FriendlyException;
using NCC.System.Entitys.Permission;
using SqlSugar;
using Yitter.IdGenerator;
namespace NCC.Extend
{
///
/// 绿纤耗卡服务日志服务
///
[ApiDescriptionSettings(Tag = "绿纤耗卡服务日志", Name = "LqXhFeedback", Order = 200, Groups = new[] { "Default" })]
[Route("api/Extend/[controller]")]
public class LqXhFeedbackService : ILqXhFeedbackService, IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;
private readonly ILogger _logger;
public LqXhFeedbackService(ISqlSugarClient db, IUserManager userManager, ILogger logger)
{
_db = db;
_userManager = userManager;
_logger = logger;
}
#region 获取耗卡反馈详情
///
/// 获取耗卡反馈详情
///
///
/// 根据反馈记录ID获取详细信息
///
/// 示例请求:
/// GET /api/Extend/LqXhFeedback/GetInfo/{id}
///
/// 参数说明:
/// - id: 反馈记录ID(路径参数)
///
/// 反馈记录ID
/// 耗卡反馈详情
/// 成功返回耗卡反馈详情
/// 记录不存在
/// 服务器错误
[HttpGet("GetInfo/{id}")]
public async Task GetInfo(string id)
{
try
{
var entity = await _db.Queryable().Where(p => p.Id == id).FirstAsync();
if (entity == null)
{
throw NCCException.Oh(ErrorCode.COM1005, "耗卡反馈记录不存在");
}
var output = entity.Adapt();
// 获取添加人姓名
var createUser = await _db.Queryable().Where(x => x.Id == entity.CreateUser).Select(x => x.RealName).FirstAsync();
output.createUserName = createUser;
return output;
}
catch (Exception ex)
{
throw NCCException.Oh($"获取耗卡反馈详情失败: {ex.Message}");
}
}
#endregion
#region 创建耗卡反馈
///
/// 创建耗卡反馈
///
///
/// 创建新的耗卡反馈记录
///
/// 示例请求:
/// ```json
/// {
/// "consumeId": "耗卡记录ID",
/// "memberId": "会员ID",
/// "beforeImage": "前图片路径或Base64",
/// "afterImage": "后图片路径或Base64",
/// "remark": "反馈备注",
/// "kjbRemark": "科技部备注"
/// }
/// ```
///
/// 参数说明:
/// - consumeId: 耗卡记录ID(必填)
/// - memberId: 会员ID(可选)
/// - beforeImage: 前图片(可选)
/// - afterImage: 后图片(可选)
/// - remark: 反馈备注(可选)
/// - kjbRemark: 科技部备注(可选)
///
/// 创建参数
/// 创建的耗卡反馈记录
/// 成功创建耗卡反馈
/// 参数错误
/// 服务器错误
[HttpPost("Create")]
public async Task Create([FromBody] LqXhFeedbackCrInput input)
{
try
{
// 验证耗卡记录是否存在
var consumeRecord = await _db.Queryable().Where(p => p.Id == input.ConsumeId).FirstAsync();
if (consumeRecord == null)
{
throw NCCException.Oh(ErrorCode.COM1005, "耗卡记录不存在");
}
var entity = input.Adapt();
entity.Id = YitIdHelper.NextId().ToString();
entity.CreateUser = _userManager.UserId;
entity.CreateTime = DateTime.Now;
entity.UpdateTime = DateTime.Now;
entity.MemberId = consumeRecord.Hy;
await _db.Insertable(entity).ExecuteCommandAsync();
return entity.Adapt();
}
catch (Exception ex)
{
throw NCCException.Oh($"创建耗卡反馈失败: {ex.Message}");
}
}
#endregion
#region 更新耗卡反馈
///
/// 更新耗卡反馈
///
///
/// 更新现有的耗卡反馈记录
///
/// 示例请求:
/// ```json
/// {
/// "id": "反馈记录ID",
/// "consumeId": "耗卡记录ID",
/// "memberId": "会员ID",
/// "beforeImage": "前图片路径或Base64",
/// "afterImage": "后图片路径或Base64",
/// "remark": "反馈备注",
/// "kjbRemark": "科技部备注"
/// }
/// ```
///
/// 参数说明:
/// - id: 反馈记录ID(必填)
/// - consumeId: 耗卡记录ID(必填)
/// - memberId: 会员ID(可选)
/// - beforeImage: 前图片(可选)
/// - afterImage: 后图片(可选)
/// - remark: 反馈备注(可选)
/// - kjbRemark: 科技部备注(可选)
///
/// 更新参数
/// 更新后的耗卡反馈记录
/// 成功更新耗卡反馈
/// 参数错误
/// 记录不存在
/// 服务器错误
[HttpPut("Update")]
public async Task Update([FromBody] LqXhFeedbackUpInput input)
{
try
{
var entity = await _db.Queryable().Where(p => p.Id == input.id).FirstAsync();
if (entity == null)
{
throw NCCException.Oh(ErrorCode.COM1005, "耗卡反馈记录不存在");
}
// 验证耗卡记录是否存在
var consumeRecord = await _db.Queryable().Where(p => p.Id == input.ConsumeId).FirstAsync();
if (consumeRecord == null)
{
throw NCCException.Oh(ErrorCode.COM1005, "耗卡记录不存在");
}
entity.ConsumeId = input.ConsumeId;
entity.BeforeImage = input.BeforeImage;
entity.AfterImage = input.AfterImage;
entity.Remark = input.Remark;
entity.KjbRemark = input.KjbRemark;
entity.UpdateTime = DateTime.Now;
entity.MemberId = consumeRecord.Hy;
await _db.Updateable(entity).ExecuteCommandAsync();
return entity.Adapt();
}
catch (Exception ex)
{
throw NCCException.Oh($"更新耗卡反馈失败: {ex.Message}");
}
}
#endregion
#region 删除耗卡反馈
///
/// 删除耗卡反馈
///
///
/// 根据反馈记录ID删除记录
///
/// 示例请求:
/// DELETE /api/Extend/LqXhFeedback/Delete/{id}
///
/// 参数说明:
/// - id: 反馈记录ID(路径参数)
///
/// 反馈记录ID
/// 删除结果
/// 成功删除耗卡反馈
/// 记录不存在
/// 服务器错误
[HttpDelete("Delete/{id}")]
public async Task Delete(string id)
{
try
{
var entity = await _db.Queryable()
.Where(p => p.Id == id)
.FirstAsync();
if (entity == null)
{
throw NCCException.Oh(ErrorCode.COM1005, "耗卡反馈记录不存在");
}
await _db.Deleteable()
.Where(p => p.Id == id)
.ExecuteCommandAsync();
return new { message = "删除成功" };
}
catch (Exception ex)
{
throw NCCException.Oh($"删除耗卡反馈失败: {ex.Message}");
}
}
#endregion
#region 根据耗卡记录ID获取反馈
///
/// 根据耗卡记录ID获取反馈
///
///
/// 根据耗卡记录ID获取相关的所有反馈记录
///
/// 示例请求:
/// GET /api/Extend/LqXhFeedback/GetByConsumeId/{consumeId}
///
/// 参数说明:
/// - consumeId: 耗卡记录ID(路径参数)
///
/// 耗卡记录ID
/// 耗卡反馈列表
/// 成功返回耗卡反馈列表
/// 服务器错误
[HttpGet("GetByConsumeId/{consumeId}")]
public async Task GetByConsumeId(string consumeId)
{
try
{
var data = await _db.Queryable()
.Where(p => p.ConsumeId == consumeId)
.OrderBy(p => p.CreateTime, OrderByType.Desc)
.Select(it => new LqXhFeedbackListOutput
{
id = it.Id,
consumeId = it.ConsumeId,
memberId = it.MemberId,
beforeImage = it.BeforeImage,
afterImage = it.AfterImage,
remark = it.Remark,
kjbRemark = it.KjbRemark,
createUser = it.CreateUser,
createUserName = SqlFunc.Subqueryable().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
createTime = it.CreateTime,
updateTime = it.UpdateTime
})
.ToListAsync();
return data;
}
catch (Exception ex)
{
throw NCCException.Oh($"获取耗卡反馈失败: {ex.Message}");
}
}
#endregion
#region 获取耗卡反馈列表
///
/// 获取耗卡反馈列表
///
///
/// 获取耗卡反馈列表,支持分页和条件查询
///
/// 示例请求:
/// POST /api/Extend/LqXhFeedback/GetList
/// {
/// "currentPage": 1,
/// "pageSize": 10,
/// "memberId": "会员ID",
/// "startTime": "2025-01-01",
/// "endTime": "2025-01-31"
/// }
///
/// 参数说明:
/// - currentPage: 当前页码
/// - pageSize: 每页条数
/// - memberId: 会员ID(可选)
/// - consumeId: 耗卡记录ID(可选)
/// - startTime: 开始时间(可选)
/// - endTime: 结束时间(可选)
///
/// 查询参数
/// 耗卡反馈列表
[HttpPost("GetList")]
public async Task GetList([FromBody] LqXhFeedbackListQueryInput input)
{
try
{
var query = _db.Queryable()
.WhereIF(!string.IsNullOrEmpty(input.MemberId), p => p.MemberId == input.MemberId)
.WhereIF(!string.IsNullOrEmpty(input.ConsumeId), p => p.ConsumeId == input.ConsumeId)
.WhereIF(!string.IsNullOrEmpty(input.CreateUser), p => p.CreateUser == input.CreateUser)
.WhereIF(input.StartTime.HasValue, p => p.CreateTime >= input.StartTime.Value)
.WhereIF(input.EndTime.HasValue, p => p.CreateTime <= input.EndTime.Value)
.OrderBy(p => p.CreateTime, OrderByType.Desc);
var list = await query.ToPageListAsync(input.currentPage, input.pageSize);
var totalCount = await query.CountAsync();
var data = list.Adapt>();
// 填充添加人姓名
if (data.Any())
{
var userIds = data.Select(x => x.createUser).Distinct().ToList();
var users = await _db.Queryable().Where(x => userIds.Contains(x.Id)).ToListAsync();
foreach (var item in data)
{
item.createUserName = users.FirstOrDefault(x => x.Id == item.createUser)?.RealName;
}
}
return new
{
list = data,
pagination = new
{
pageIndex = input.currentPage,
pageSize = input.pageSize,
totalCount = totalCount
}
};
}
catch (Exception ex)
{
throw NCCException.Oh($"获取耗卡反馈列表失败: {ex.Message}");
}
}
#endregion
}
}