完善基础数据

This commit is contained in:
yanpeng200212
2026-10-08 15:44:07 +08:00
parent 8430ba0452
commit 2ffb83830c
95 changed files with 37759 additions and 5 deletions
@@ -0,0 +1,61 @@
using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Common.Exceptions;
using F9WebAiTest.Application.CQRS.SYS.Gongyingshangs.Commands;
using F9WebAiTest.Application.CQRS.SYS.Gongyingshangs.Queries;
using F9WebAiTest.Domain.Enums.SYS.Gongyingshangs;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers;
/// <summary>往来单位(供应商/客户)管理</summary>
[ApiController]
[Route("api/sys/gongyingshang")]
[Authorize]
public class SysGongyingshangController : ControllerBase
{
private readonly IMediator _mediator;
public SysGongyingshangController(IMediator mediator) => _mediator = mediator;
/// <summary>分页查询(业务类型 + 销售类型 + 关键字)</summary>
[HttpGet]
public async Task<IActionResult> GetPaged([FromQuery] Gys_Type_Enum type = Gys_Type_Enum.干茧,
[FromQuery] Gys_SaleType_Enum? saleType = null, [FromQuery] string like = "",
[FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetGongyingshangPagedQuery(type, saleType,
like ?? string.Empty, pageIndex, pageSize))));
[HttpGet("{id}")]
public async Task<IActionResult> GetById(long id)
{
var result = await _mediator.Send(new GetGongyingshangByIdQuery(id));
return result == null
? NotFound(ApiResult<object>.Fail("往来单位不存在", 404))
: Ok(ApiResult<object>.Ok(result));
}
[HttpPost]
public async Task<IActionResult> Create([FromBody] Gongyingshang_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] Gongyingshang_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 Gongyingshang_DelCommand(id)), "删除成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
}
@@ -0,0 +1,76 @@
using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Common.Exceptions;
using F9WebAiTest.Application.CQRS.SYS.Registries.Commands;
using F9WebAiTest.Application.CQRS.SYS.Registries.Queries;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers;
/// <summary>注册表(参数配置)管理:按"命名空间 + 键名"维护配置值,供各业务模块读取</summary>
[ApiController]
[Route("api/sys/registry")]
[Authorize]
public class SysRegistryController : ControllerBase
{
private readonly IMediator _mediator;
public SysRegistryController(IMediator mediator) => _mediator = mediator;
/// <summary>全部配置项(含未启用),用于列表页构建命名空间树</summary>
[HttpGet]
public async Task<IActionResult> GetAll()
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetRegistryAllQuery())));
/// <summary>按命名空间 + 键名查询(业务模块取值入口,未配置时返回 data=null)</summary>
[HttpGet("by-key")]
public async Task<IActionResult> GetByCategoryAndKey([FromQuery] string category, [FromQuery] string keyName)
{
var result = await _mediator.Send(new GetByCategoryAndKeyQuery(category ?? string.Empty, keyName ?? string.Empty));
return Ok(result == null
? ApiResult<object>.Ok(null, $"未找到命名空间[{category}]下键[{keyName}]的配置")
: ApiResult<object>.Ok(result));
}
[HttpGet("{id}")]
public async Task<IActionResult> GetById(long id)
{
try { return Ok(ApiResult<object>.Ok(await _mediator.Send(new GetRegistryByIdForEditQuery(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>
[HttpPost]
public async Task<IActionResult> Create([FromBody] Registry_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] Registry_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)); }
}
/// <summary>只修改值</summary>
[HttpPut("{id}/value")]
public async Task<IActionResult> SetValue(long id, [FromBody] Registry_SetValueCommand 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 Registry_DelCommand(id)), "删除成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
}
@@ -0,0 +1,123 @@
using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Common.Exceptions;
using F9WebAiTest.Application.CQRS.SYS.WorkTypes.Commands;
using F9WebAiTest.Application.CQRS.SYS.WorkTypes.Queries;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers;
/// <summary>工种管理(DDD + CQRS):工种维护 + 绑定部门 + 关联角色</summary>
[ApiController]
[Route("api/sys/worktype")]
[Authorize]
public class SysWorkTypeController : ControllerBase
{
private readonly IMediator _mediator;
public SysWorkTypeController(IMediator mediator) => _mediator = mediator;
// ==================== 工种主表 ====================
[HttpGet]
public async Task<IActionResult> GetPaged([FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20, [FromQuery] string keyword = "")
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWorkTypePagedQuery(pageIndex, pageSize, keyword ?? string.Empty))));
[HttpGet("{id}")]
public async Task<IActionResult> GetById(long id)
{
try { return Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWorkTypeByIdForEditQuery(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] WorkType_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] WorkType_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 WorkType_DelCommand(id)), "删除成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
[HttpPut("{id}/active")]
public async Task<IActionResult> ActiveOrDeactivate(long id, [FromBody] WorkType_ActiveOrDeactivateCommand 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)); }
}
// ==================== 绑定部门 ====================
[HttpGet("{id}/departments")]
public async Task<IActionResult> GetDepartments(long id)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWorkTypeDepartmentByWorkIdQuery(id))));
[HttpPost("{id}/departments")]
public async Task<IActionResult> AssignDepartment(long id, [FromBody] WorkTypeDepartmentAssignRequest request)
{
try
{
var relationId = await _mediator.Send(new WorkTypeDepartment_AssignCommand(id, request.DepartmentId));
return Ok(ApiResult<object>.Ok(new { id = relationId }, "绑定成功"));
}
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
[HttpDelete("{id}/departments/{departmentId}")]
public async Task<IActionResult> RemoveDepartment(long id, long departmentId)
{
try { return Ok(ApiResult<object>.Ok(await _mediator.Send(new WorkTypeDepartment_RemoveCommand(id, departmentId)), "解除绑定成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
// ==================== 关联角色 ====================
[HttpGet("{id}/roles")]
public async Task<IActionResult> GetRoles(long id)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWorkTypeRoleByWorkIdQuery(id))));
[HttpPost("{id}/roles")]
public async Task<IActionResult> AssignRole(long id, [FromBody] WorkTypeRoleAssignRequest request)
{
try
{
var relationId = await _mediator.Send(new WorkTypeRole_AssignCommand(id, request.RoleId));
return Ok(ApiResult<object>.Ok(new { id = relationId }, "关联成功"));
}
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
[HttpDelete("{id}/roles/{roleId}")]
public async Task<IActionResult> RemoveRole(long id, long roleId)
{
try { return Ok(ApiResult<object>.Ok(await _mediator.Send(new WorkTypeRole_RemoveCommand(id, roleId)), "解除关联成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
}
/// <summary>绑定部门请求体</summary>
public record WorkTypeDepartmentAssignRequest(long DepartmentId);
/// <summary>关联角色请求体</summary>
public record WorkTypeRoleAssignRequest(long RoleId);
@@ -0,0 +1,67 @@
using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Common.Exceptions;
using F9WebAiTest.Application.CQRS.SYS.WuziMulus.Commands;
using F9WebAiTest.Application.CQRS.SYS.WuziMulus.Queries;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers;
/// <summary>物资分组管理(物资目录的分类树)</summary>
[ApiController]
[Route("api/sys/wuzigroup")]
[Authorize]
public class SysWuziGroupController : ControllerBase
{
private readonly IMediator _mediator;
public SysWuziGroupController(IMediator mediator) => _mediator = mediator;
/// <summary>全部分组(构建分组树)</summary>
[HttpGet]
public async Task<IActionResult> GetAll()
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWuziGroupAllQuery())));
/// <summary>生成新编号(一级分类传 parentId=0)</summary>
[HttpGet("new-code")]
public async Task<IActionResult> GetNewCode([FromQuery] long parentId = 0)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWuziGroupNewCodeQuery(parentId))));
/// <summary>是否存在下级分组(删除前校验)</summary>
[HttpGet("{id}/exist-child")]
public async Task<IActionResult> ExistChild(long id)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWuziGroupExistChildQuery(id))));
[HttpGet("{id}")]
public async Task<IActionResult> GetById(long id)
{
var result = await _mediator.Send(new GetWuziGroupByIdQuery(id));
return result == null
? NotFound(ApiResult<object>.Fail("物资分组不存在", 404))
: Ok(ApiResult<object>.Ok(result));
}
[HttpPost]
public async Task<IActionResult> Create([FromBody] WuziGroup_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] WuziGroup_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 WuziGroup_DelCommand(id)), "删除成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
}
@@ -0,0 +1,68 @@
using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Common.Exceptions;
using F9WebAiTest.Application.CQRS.SYS.WuziMulus.Commands;
using F9WebAiTest.Application.CQRS.SYS.WuziMulus.Queries;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers;
/// <summary>物资目录管理(按分组维护物资)</summary>
[ApiController]
[Route("api/sys/wuzimulu")]
[Authorize]
public class SysWuziMuluController : ControllerBase
{
private readonly IMediator _mediator;
public SysWuziMuluController(IMediator mediator) => _mediator = mediator;
/// <summary>按分组分页查询(groupId=0 表示全部分组)</summary>
[HttpGet]
public async Task<IActionResult> GetPaged([FromQuery] long groupId = 0, [FromQuery] string keyword = "",
[FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWuziMuluPagedQuery(groupId, keyword ?? string.Empty, pageIndex, pageSize))));
/// <summary>物资选项(供其它模块选择物资,如原料庄口选茧别)</summary>
[HttpGet("options")]
public async Task<IActionResult> GetOptions([FromQuery] string keyword = "", [FromQuery] int limit = 200)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWuziMuluOptionsQuery(keyword ?? string.Empty, limit))));
/// <summary>生成新编号(按所属分组)</summary>
[HttpGet("new-code")]
public async Task<IActionResult> GetNewCode([FromQuery] long groupId)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetWuziMuluNewCodeQuery(groupId))));
[HttpGet("{id}")]
public async Task<IActionResult> GetById(long id)
{
var result = await _mediator.Send(new GetWuziMuluByIdQuery(id));
return result == null
? NotFound(ApiResult<object>.Fail("物资不存在", 404))
: Ok(ApiResult<object>.Ok(result));
}
[HttpPost]
public async Task<IActionResult> Create([FromBody] WuziMulu_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] WuziMulu_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 WuziMulu_DelCommand(id)), "删除成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
}
@@ -0,0 +1,63 @@
using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Common.Exceptions;
using F9WebAiTest.Application.CQRS.SYS.YuanliaoZhuangkous.Commands;
using F9WebAiTest.Application.CQRS.SYS.YuanliaoZhuangkous.Queries;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers;
/// <summary>原料庄口管理(DDD + CQRS):按年度/产地/站点/季别维护原料庄口,编号自动生成</summary>
[ApiController]
[Route("api/sys/yuanliaozhuangkou")]
[Authorize]
public class SysYuanliaoZhuangkouController : ControllerBase
{
private readonly IMediator _mediator;
public SysYuanliaoZhuangkouController(IMediator mediator) => _mediator = mediator;
[HttpGet]
public async Task<IActionResult> GetPaged([FromQuery] int year = 0, [FromQuery] string chandi = "", [FromQuery] string zhandian = "",
[FromQuery] string jibie = "", [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20)
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetYuanliaoZhuangkouPagedQuery(year,
chandi ?? string.Empty, zhandian ?? string.Empty, jibie ?? string.Empty, like ?? string.Empty, pageIndex, pageSize))));
/// <summary>物资(茧别)下拉选项:物资目录中名称含"茧"的物资</summary>
[HttpGet("wuzi-options")]
public async Task<IActionResult> GetWuziOptions([FromQuery] string keyword = "")
=> Ok(ApiResult<object>.Ok(await _mediator.Send(new GetYuanliaoZhuangkouWuziOptionsQuery(keyword ?? string.Empty))));
[HttpGet("{id}")]
public async Task<IActionResult> GetById(long id)
{
var result = await _mediator.Send(new GetYuanliaoZhuangkouByIdQuery(id));
return result == null
? NotFound(ApiResult<object>.Fail("原料庄口不存在", 404))
: Ok(ApiResult<object>.Ok(result));
}
[HttpPost]
public async Task<IActionResult> Create([FromBody] YuanliaoZhuangkou_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] YuanliaoZhuangkou_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 YuanliaoZhuangkou_DelCommand(id)), "删除成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult<object>.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult<object>.Fail(ex.Message, 400)); }
}
}
@@ -0,0 +1,84 @@
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)); }
}
}
Binary file not shown.