Files
2026-10-08 15:44:07 +08:00

85 lines
4.2 KiB
C#

using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Common.Exceptions;
using F9WebAiTest.Application.CQRS.SYS.Zq.Commands;
using F9WebAiTest.Application.CQRS.SYS.Zq.Queries;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers;
/// <summary>账期管理(DDD + CQRS):账期维护 + 扎帐/取消扎帐 + 按日期取账期</summary>
[ApiController]
[Route("api/sys/zhangqi")]
[Authorize]
public class SysZhangqiController : ControllerBase
{
private readonly IMediator _mediator;
public SysZhangqiController(IMediator mediator) => _mediator = mediator;
/// <summary>分页查询(按年度筛选)</summary>
[HttpGet]
public async Task<IActionResult> GetPaged([FromQuery] int? year, [FromQuery] string keyword, [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetZhangqiPagedQuery(year, keyword ?? string.Empty, pageIndex, pageSize))));
/// <summary>按日期取所属账期(不存在时按 28 日规则自动创建)</summary>
[HttpGet("by-date")]
public async Task<IActionResult> GetByDate([FromQuery] DateTime date)
{
try { return Ok(ApiResult<object>.Ok(await _mediator.Send(new GetZhangqiByDateQuery(date)))); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
/// <summary>指定年月是否已扎帐</summary>
[HttpGet("is-zhazhang")]
public async Task<IActionResult> GetIsZhaZhang([FromQuery] int year, [FromQuery] int month)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetZhangqiIsZhaZhangQuery(year, month))));
/// <summary>指定日期所属账期是否已扎帐</summary>
[HttpGet("is-zhazhang-by-date")]
public async Task<IActionResult> GetIsZhaZhangByDate([FromQuery] DateTime date)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetZhangqiIsZhaZhangByDateQuery(date))));
[HttpGet("{id}")]
public async Task<IActionResult> GetById(long id)
{
try { return Ok(ApiResult<object>.Ok(await _mediator.Send(new GetZhangqiByIdQuery(id)))); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
[HttpPost]
public async Task<IActionResult> Create([FromBody] Zhangqi_CreateCommand command)
{
try { return Ok(ApiResult<object>.Ok(new { id = await _mediator.Send(command) }, "新增成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
[HttpPut("{id}")]
public async Task<IActionResult> Update(long id, [FromBody] Zhangqi_UpdateCommand command)
{
try { return Ok(ApiResult<object>.Ok(await _mediator.Send(command with { Id = id }), "修改成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(long id)
{
try { return Ok(ApiResult<object>.Ok(await _mediator.Send(new Zhangqi_DelCommand(id)), "删除成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
/// <summary>扎帐 / 取消扎帐</summary>
[HttpPut("{id}/zhazhang")]
public async Task<IActionResult> ZhaZhang(long id, [FromBody] Zhangqi_ZhaZhangCommand command)
{
try { return Ok(ApiResult<object>.Ok(await _mediator.Send(command with { Id = id }), "操作成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
}