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