using YD_Event.Application.Auth; using YD_Event.Application.Merchant.Dtos; using YD_Event.Core.Entities; using YD_Event.Core.Enum; namespace YD_Event.Application.Merchant; /// /// 商户管理 /// public class MerchantService : BaseService, ITransient { private readonly ISqlSugarRepository _repository; private readonly ISqlSugarRepository _userCouponRepository; private readonly AuthManager _authManager; private readonly IIdGenerator _idGenerator; public MerchantService(ISqlSugarRepository repository, ISqlSugarRepository userCouponRepository, AuthManager authManager, IIdGenerator idGenerator) : base(repository) { _repository = repository; _userCouponRepository = userCouponRepository; _authManager = authManager; _idGenerator = idGenerator; } /// /// 商户分页查询 /// [DisplayName("商户分页查询")] [HttpGet("page")] public async Task> Page([FromQuery] MerchantQueryInput input) { return await _repository.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.MerchantName), x => x.MerchantName.Contains(input.MerchantName)) .WhereIF(!string.IsNullOrWhiteSpace(input.ContactPhone), x => x.ContactPhone.Contains(input.ContactPhone)) .WhereIF(input.AuditStatus.HasValue, x => x.AuditStatus == input.AuditStatus) .WhereIF(input.StartTime.HasValue, x => x.CreatedTime >= input.StartTime) .WhereIF(input.EndTime.HasValue, x => x.CreatedTime <= input.EndTime) .OrderByDescending(x => x.CreatedTime) .ToPagedListAsync(input); } /// /// 添加商户 /// [DisplayName("添加商户")] [HttpPost("add")] public async Task Add(AddMerchantInput input) { var entity = input.Adapt(); entity.Id = _idGenerator.NextId(); await _repository.InsertAsync(entity); } /// /// 更新商户 /// [DisplayName("更新商户")] [HttpPut("edit")] public async Task Update(UpdateMerchantInput input) { var entity = await _repository.GetByIdAsync(input.Id); if (entity == null) throw Oops.Bah("商户不存在"); input.Adapt(entity); await _repository.UpdateAsync(entity); } /// /// 删除商户 /// [DisplayName("删除商户")] [HttpPost("delete")] public async Task Delete([FromBody] List ids) { await _repository.DeleteAsync(x => ids.Contains(x.Id)); } /// /// 获取商户详情 /// [DisplayName("获取商户详情")] [HttpGet("detail")] public async Task Detail([FromQuery] long id) { var entity = await _repository.GetByIdAsync(id); if (entity == null) throw Oops.Bah("商户不存在"); return entity; } /// /// 审核商户 /// [HttpPost("audit")] [UnitOfWork] public async Task Audit([FromBody] MerchantAuditInput input) { if (input.Ids == null || !input.Ids.Any()) return; await _repository.UpdateAsync(u => new YD_Event.Core.Entities.Merchant { AuditStatus = input.Status, AuditRemark = input.Remark, UpdatedTime = DateTime.Now, UpdatedUserId = _authManager.UserId }, u => input.Ids.Contains(u.Id)); } /// /// 发放优惠券 /// [HttpPost("issueCoupon")] [UnitOfWork] public async Task IssueCoupon([FromBody] IssueCouponInput input) { if (input.MerchantIds == null || !input.MerchantIds.Any()) return; if (input.Count <= 0) throw Oops.Bah("发放数量必须大于0"); var merchants = await _repository.GetListAsync(m => input.MerchantIds.Contains(m.Id)); if (!merchants.Any()) return; var coupons = new List(); var now = DateTime.Now; foreach (var merchant in merchants) { for (int i = 0; i < input.Count; i++) { coupons.Add(new UserCoupon { Id = _idGenerator.NextId(), UserId = merchant.CreatedUserId, // Issue to the creator of the merchant CouponId = input.CouponId, Status = 0, // Unused ClaimTime = now, CreatedTime = now, CreatedUserId = _authManager.UserId }); } } await _userCouponRepository.InsertRangeAsync(coupons); } }