using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Common.Exceptions;
using F9WebAiTest.Application.CQRS.SYS.Employees.Commands;
using F9WebAiTest.Application.CQRS.SYS.Employees.Queries;
using F9WebAiTest.Domain.Enums.SYS.Employees;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers;
/// 职工档案管理(含转正/离职/调岗/重新入职/生产信息维护)
[ApiController]
[Route("api/sys/employee")]
[Authorize]
public class SysEmployeeController : ControllerBase
{
private readonly IMediator _mediator;
public SysEmployeeController(IMediator mediator) => _mediator = mediator;
/// 分页查询(部门含子部门;workStatus/banci 不传表示全部)
[HttpGet]
public async Task GetPaged([FromQuery] long depId = 0, [FromQuery] long worktypeId = 0,
[FromQuery] Employee_WorkStatus_Enum? workStatus = null, [FromQuery] Prod_Banci_Enum? banci = null,
[FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20)
=> Ok(ApiResult.Ok(await _mediator.Send(new GetEmployeePagedQuery(depId, worktypeId, workStatus,
banci, like ?? string.Empty, pageIndex, pageSize))));
[HttpGet("{id}")]
public async Task GetById(long id)
{
var result = await _mediator.Send(new GetEmployeeByIdQuery(id));
return result == null
? NotFound(ApiResult.Fail("职工不存在", 404))
: Ok(ApiResult.Ok(result));
}
/// 变更记录
[HttpGet("{id}/change-records")]
public async Task GetChangeRecords(long id)
=> Ok(ApiResult.Ok(await _mediator.Send(new GetEmployeeChangeRecordsQuery(id))));
/// 调岗记录
[HttpGet("{id}/tiaogang-records")]
public async Task GetTiaogangRecords(long id)
=> Ok(ApiResult.Ok(await _mediator.Send(new GetEmployeeTiaogangRecordsQuery(id))));
[HttpPost]
public async Task Create([FromBody] Employee_CreateCommand command)
{
try { return Ok(ApiResult.Ok(new { id = await _mediator.Send(command) }, "新增成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
[HttpPut("{id}")]
public async Task Update(long id, [FromBody] Employee_UpdateCommand command)
{
try { return Ok(ApiResult.Ok(await _mediator.Send(command with { Id = id }), "修改成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
[HttpDelete("{id}")]
public async Task Delete(long id)
{
try { return Ok(ApiResult.Ok(await _mediator.Send(new Employee_DelCommand(id)), "删除成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
/// 转正
[HttpPut("{id}/zhuanzheng")]
public async Task Zhuanzheng(long id, [FromBody] Employee_ZhuanzhengCommand command)
{
try { return Ok(ApiResult.Ok(await _mediator.Send(command with { Id = id }), "转正成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
/// 取消转正
[HttpPut("{id}/zhuanzheng-cancel")]
public async Task ZhuanzhengCancel(long id)
{
try { return Ok(ApiResult.Ok(await _mediator.Send(new Employee_ZhuanzhengCancelCommand(id)), "已取消转正")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
/// 离职
[HttpPut("{id}/lizhi")]
public async Task Lizhi(long id, [FromBody] Employee_LizhiCommand command)
{
try { return Ok(ApiResult.Ok(await _mediator.Send(command with { Id = id }), "已办理离职")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
/// 取消离职
[HttpPut("{id}/lizhi-cancel")]
public async Task LizhiCancel(long id)
{
try { return Ok(ApiResult.Ok(await _mediator.Send(new Employee_LizhiCancelCommand(id)), "已取消离职")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
/// 调岗
[HttpPut("{id}/tiaogang")]
public async Task Tiaogang(long id, [FromBody] Employee_TiaogangCommand command)
{
try { return Ok(ApiResult.Ok(await _mediator.Send(command with { Id = id }), "调岗成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
/// 重新入职
[HttpPut("{id}/renew-ruzhis")]
public async Task RenewRuzhi(long id, [FromBody] Employee_RenewRuzhiCommand command)
{
try { return Ok(ApiResult.Ok(await _mediator.Send(command with { Id = id }), "重新入职成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
/// 修改生产信息(工作组 / 顺序号)
[HttpPut("{id}/sc")]
public async Task UpdateSc(long id, [FromBody] Employee_UpdateScCommand command)
{
try { return Ok(ApiResult.Ok(await _mediator.Send(command with { Id = id }), "修改成功")); }
catch (F9NotFoundException ex) { return NotFound(ApiResult.Fail(ex.Message, 404)); }
catch (F9OperationException ex) { return BadRequest(ApiResult.Fail(ex.Message, 400)); }
}
}