LqCardTransferLogService.cs 5.46 KB
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using NCC.Common.Core.Manager;
using NCC.Common.Filter;
using NCC.Dependency;
using NCC.DynamicApiController;
using NCC.Extend.Entitys.Dto.LqCardTransferLog;
using NCC.Extend.Entitys.lq_card_transfer_log;
using NCC.Extend.Interfaces;
using NCC.FriendlyException;
using SqlSugar;

namespace NCC.Extend.LqCardTransferLog
{
    /// <summary>
    /// 转卡日志服务
    /// </summary>
    [ApiDescriptionSettings(Tag = "绿纤转卡日志服务", Name = "LqCardTransferLog", Order = 200)]
    [Route("api/Extend/[controller]")]
    public class LqCardTransferLogService : IDynamicApiController, ILqCardTransferLogService, ITransient
    {
        private readonly ISqlSugarClient _db;
        private readonly IUserManager _userManager;
        private readonly ILogger<LqCardTransferLogService> _logger;

        public LqCardTransferLogService(ISqlSugarClient db, IUserManager userManager, ILogger<LqCardTransferLogService> logger)
        {
            _db = db;
            _userManager = userManager;
            _logger = logger;
        }

        #region 添加转卡日志
        /// <summary>
        /// 添加转卡日志
        /// </summary>
        /// <param name="input">转卡日志创建输入参数</param>
        /// <returns>创建结果</returns>
        [HttpPost("add")]
        public async Task<dynamic> AddTransferLog([FromBody] LqCardTransferLogCrInput input)
        {
            try
            {
                if (input == null)
                {
                    throw NCCException.Oh("输入参数不能为空");
                }

                var entity = new LqCardTransferLogEntity
                {
                    Id = Guid.NewGuid().ToString(),
                    RefundCardId = input.refundCardId,
                    BillingCardId = input.billingCardId,
                    TransferFromMemberId = input.transferFromMemberId,
                    TransferToMemberId = input.transferToMemberId,
                    TransferAmount = input.transferAmount,
                    TransferTime = input.transferTime,
                    OperatorId = input.operatorId,
                    Remarks = input.remarks ?? "",
                    CreateTime = DateTime.Now,
                    IsEffective = 1
                };

                var result = await _db.Insertable(entity).ExecuteCommandAsync();

                return new
                {
                    Success = true,
                    Message = "转卡日志创建成功",
                    Data = new { Id = entity.Id }
                };
            }
            catch (Exception ex)
            {
                throw NCCException.Oh($"创建转卡日志失败: {ex.Message}");
            }
        }
        #endregion

        #region 获取转卡日志列表
        /// <summary>
        /// 获取转卡日志列表
        /// </summary>
        /// <param name="input">查询输入参数</param>
        /// <returns>转卡日志列表</returns>
        [HttpGet("")]
        public async Task<dynamic> GetList([FromQuery] LqCardTransferLogListQueryInput input)
        {
            try
            {
                var result = await _db.Queryable<LqCardTransferLogEntity>()
                    .WhereIF(input.isEffective != 0, x => x.IsEffective == input.isEffective)
                    .WhereIF(!string.IsNullOrEmpty(input.transferFromMemberId), x => x.TransferFromMemberId == input.transferFromMemberId)
                    .WhereIF(!string.IsNullOrEmpty(input.transferToMemberId), x => x.TransferToMemberId == input.transferToMemberId)
                    .WhereIF(!string.IsNullOrEmpty(input.operatorId), x => x.OperatorId == input.operatorId)
                    .WhereIF(input.transferStartTime.HasValue, x => x.TransferTime >= input.transferStartTime.Value)
                    .WhereIF(input.transferEndTime.HasValue, x => x.TransferTime <= input.transferEndTime.Value)
                    .WhereIF(input.minTransferAmount.HasValue, x => x.TransferAmount >= input.minTransferAmount.Value)
                    .WhereIF(input.maxTransferAmount.HasValue, x => x.TransferAmount <= input.maxTransferAmount.Value)
                    .WhereIF(!string.IsNullOrEmpty(input.keyword), x => x.Remarks.Contains(input.keyword))
                    .Select(x => new LqCardTransferLogListOutput
                    {
                        id = x.Id,
                        refundCardId = x.RefundCardId,
                        billingCardId = x.BillingCardId,
                        transferFromMemberId = x.TransferFromMemberId,
                        transferToMemberId = x.TransferToMemberId,
                        transferAmount = x.TransferAmount,
                        transferTime = x.TransferTime,
                        operatorId = x.OperatorId,
                        remarks = x.Remarks,
                        createTime = x.CreateTime,
                        updateTime = x.UpdateTime,
                        isEffective = x.IsEffective
                    })
                    .OrderBy(x => x.transferTime, OrderByType.Desc)
                    .ToPagedListAsync(input.currentPage, input.pageSize);

                return PageResult<LqCardTransferLogListOutput>.SqlSugarPageResult(result);
            }
            catch (Exception ex)
            {
                throw NCCException.Oh($"获取转卡日志列表失败: {ex.Message}");
            }
        }
        #endregion
    }
}