From 484de131314a90144cceac6ea721e345ad014f08 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 04 十二月 2025 09:20:56 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/LifePaymentApi

---
 LifePayment/LifePayment.Application/LifePay/LifePayAnnouncementService.cs |  151 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 151 insertions(+), 0 deletions(-)

diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayAnnouncementService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayAnnouncementService.cs
new file mode 100644
index 0000000..968f89e
--- /dev/null
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayAnnouncementService.cs
@@ -0,0 +1,151 @@
+锘縰sing AutoMapper.QueryableExtensions;
+using LifePayment.Application.Contracts;
+using LifePayment.Application.Contracts.LifePay;
+using LifePayment.Domain;
+using LifePayment.Domain.LifePay;
+using LifePayment.Domain.Models;
+using LifePayment.Domain.Shared;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.ObjectMapping;
+using ZeroD.Util;
+using ZeroD.Util.Fadd;
+
+namespace LifePayment.Application.LifePay;
+
+
+public class LifePayAnnouncementService : ApplicationService, ILifePayAnnouncementService
+{
+    private readonly IRepository<LifePayAnnouncement, Guid> _lifePayAnnouncementRepository;
+
+    public LifePayAnnouncementService(IRepository<LifePayAnnouncement, Guid> lifePayAnnouncementRepository)
+    {
+        _lifePayAnnouncementRepository = lifePayAnnouncementRepository;
+    }
+
+    /// <summary>
+    /// 鑾峰彇鍏憡鍒嗛〉
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<PageOutput<CreateEditLifePayAnnouncementOutput>> GetLifePayAnnouncementPage(GetLifePayAnnouncementPageInput input)
+    {
+        var currentTime = DateTime.Now;
+        var query = _lifePayAnnouncementRepository
+            .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin)
+            .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd)
+            .WhereIf(input.StartTime.HasValue, x => x.StartTime >= input.StartTime)
+            .WhereIf(input.EndTime.HasValue, x => x.EndTime <= input.EndTime)
+            .WhereIf(input.Status.HasValue, x => input.Status.Value == AnnouncementStatusEnum.Wait
+                ? currentTime < x.StartTime
+                    : input.Status.Value == AnnouncementStatusEnum.Showing
+                        ? currentTime >= x.StartTime && currentTime <= x.EndTime
+                        : input.Status.Value == AnnouncementStatusEnum.Stop
+                            ? currentTime > x.EndTime
+                            : false)
+            .Select(x =>
+                    new CreateEditLifePayAnnouncementOutput()
+                    {
+                        Id = x.Id,
+                        AnnouncementType = x.AnnouncementType,
+                        StartTime = x.StartTime,
+                        EndTime = x.EndTime,
+                        AnnouncementContent = x.AnnouncementContent,
+                        CreationTime = x.CreationTime,
+                        Status = GetLifePayAnnouncementStatus(x.StartTime, x.EndTime)
+                    });
+
+        var result = await query.GetPageResult(input.PageModel);
+
+        return result;
+    }
+
+    /// <summary>
+    /// 鏂板缂栬緫鍏憡
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    public async Task<int> CreateOrEditLifePayAnnouncement(CreateEditLifePayAnnouncementInput input)
+    {
+        CheckExtensions.IfTrueThrowUserFriendlyException(input.EndTime <= input.StartTime, "鎴鏃ユ湡涓嶈兘浣庝簬鐢熸晥鏃ユ湡");
+
+        bool isExist = await _lifePayAnnouncementRepository.AnyAsync(r => (!input.Id.HasValue||r.Id != input.Id.Value)&&input.AnnouncementType==r.AnnouncementType&&!(input.EndTime < r.StartTime || input.StartTime > r.EndTime));
+        CheckExtensions.IfTrueThrowUserFriendlyException(isExist, "鍚屼竴鏃堕棿娈靛彧鑳藉瓨鍦ㄤ竴鏉″叕鍛�");
+
+
+        if (input.Id.HasValue)
+        {
+            
+            var dto = await _lifePayAnnouncementRepository.FirstOrDefaultAsync(r => r.Id == input.Id.Value);
+            CheckExtensions.IfTrueThrowUserFriendlyException(dto == null, "鏈幏鍙栧埌鍏憡鏁版嵁");
+
+            dto.AnnouncementType = input.AnnouncementType;
+            dto.StartTime = input.StartTime;
+            dto.EndTime = input.EndTime;
+            dto.AnnouncementContent = input.AnnouncementContent;
+        }
+        else
+        {
+            input.Id = Guid.NewGuid();
+            var entity = ObjectMapper.Map<CreateEditLifePayAnnouncementInput, LifePayAnnouncement>(input);
+            await _lifePayAnnouncementRepository.InsertAsync(entity);
+        }
+
+        return Constant.SUCCESS;
+    }
+
+    /// <summary>
+    /// 鍒犻櫎鍏憡
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public async Task<int> DeleteLifePayAnnouncement(Guid id)
+    {
+        await _lifePayAnnouncementRepository.DeleteAsync(s => s.Id == id);
+
+        return Constant.SUCCESS;
+    }
+
+    /// <summary>
+    /// 鑾峰彇褰撳墠灞曠ず涓殑鍏憡
+    /// </summary>
+    /// <returns></returns>
+    public async Task<CreateEditLifePayAnnouncementOutput> GetShowingLifePayAnnouncement(GetShowingLifePayAnnouncementInput input)
+    {
+        DateTime now = DateTime.Now;
+        var announcement = await _lifePayAnnouncementRepository
+            .WhereIf(input.AnnouncementType.HasValue,x=>x.AnnouncementType==input.AnnouncementType)
+            .Where(x => now >= x.StartTime && now <= x.EndTime).OrderBy(r => r.StartTime).FirstOrDefaultAsync();
+        if (announcement == null)
+        {
+            return null;
+        }
+
+        var model = ObjectMapper.Map<LifePayAnnouncement, CreateEditLifePayAnnouncementOutput>(announcement);
+        model.Status = GetLifePayAnnouncementStatus(announcement.StartTime, announcement.EndTime);
+        return model;
+    }
+
+    private static AnnouncementStatusEnum GetLifePayAnnouncementStatus(DateTime startTime, DateTime endTime)
+    {
+        DateTime now = DateTime.Now;
+        if (now < startTime)
+        {
+            return AnnouncementStatusEnum.Wait;
+        }
+        else if (now >= startTime && now <= endTime)
+        {
+            return AnnouncementStatusEnum.Showing;
+        }
+        else
+        {
+            return AnnouncementStatusEnum.Stop;
+        }
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.1