Files
f9-web-ai-test/backend/F9WebAiTest.Api/Controllers/Prod/KaoqinController.cs
T
yanpeng200212 1f1b184411 新增工资/仓储/生产日报等模块,移除旧考勤模块
- 新增 PayRoll(工资)、Wms(仓储)、Prod(车速/缫丝/考勤/丝片检测/丝片台账/纤检日报/质量日报) 模块
- 新增对应 Domain 实体、Application DTO/Service、Api Controller 与前端页面
- 移除旧 Attendance 考勤模块(Controller/Service/Entity/DTO 及 5 个前端页面),由 Prod/Kaoqin 取代
- 调整路由、仪表盘、Lsjl 流丝记录实体与服务
- 更新业务种子数据与 DbSeeder
- 补充工作进度文档 14-27
2026-10-27 09:09:57 +08:00

101 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Dtos.Prod;
using F9WebAiTest.Application.Services.Prod;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers.Prod;
/// <summary>
/// 生产-考勤:考勤登记(CQDJ)。
/// 对应 F9 WinClient\F9.Business.Prod\KQ\CQDJ。
/// </summary>
[ApiController]
[Route("api/prod/kaoqin")]
[Authorize]
public class KaoqinController : ControllerBase
{
private readonly IKaoqinService _svc;
public KaoqinController(IKaoqinService svc) => _svc = svc;
private IActionResult Fail(ServiceException ex) => StatusCode(ex.Code, ApiResult<object>.Fail(ex.Message, ex.Code));
/// <summary>整组登记查询(日期 + 部门 + 工种 + 班次)</summary>
[HttpGet("cqdj")]
public async Task<IActionResult> GetRegister([FromQuery] DateTime date, [FromQuery] long depId,
[FromQuery] long worktypeId = 0, [FromQuery] int banci = 1, [FromQuery] string keyword = "")
{
try { return Ok(ApiResult<CqdjViewDto>.Ok(await _svc.GetRegisterAsync(date, depId, worktypeId, banci, keyword ?? ""))); }
catch (ServiceException ex) { return Fail(ex); }
}
/// <summary>整组覆盖保存</summary>
[HttpPost("cqdj")]
public async Task<IActionResult> SaveRegister([FromBody] CqdjSaveDto dto)
{
try { return Ok(ApiResult<object>.Ok(new { count = await _svc.SaveRegisterAsync(dto) }, "保存成功")); }
catch (ServiceException ex) { return Fail(ex); }
}
/// <summary>删除整组登记</summary>
[HttpDelete("cqdj")]
public async Task<IActionResult> DeleteRegister([FromQuery] DateTime date, [FromQuery] long depId,
[FromQuery] long worktypeId = 0, [FromQuery] int banci = 1)
{
try { return Ok(ApiResult<object>.Ok(new { count = await _svc.DeleteRegisterAsync(date, depId, worktypeId, banci) }, "删除成功")); }
catch (ServiceException ex) { return Fail(ex); }
}
/// <summary>「添加职工」可选职工</summary>
[HttpGet("cqdj/employees")]
public async Task<IActionResult> Employees([FromQuery] long depId, [FromQuery] long worktypeId = 0, [FromQuery] int banci = 1)
=> Ok(ApiResult<List<CqdjEmpOptionDto>>.Ok(await _svc.GetEmployeesAsync(depId, worktypeId, banci)));
// ==================== 考勤统计(CQTJ) ====================
/// <summary>统计分页(库中的月快照)</summary>
[HttpGet("cqtj")]
public async Task<IActionResult> CqtjList([FromQuery] int year, [FromQuery] int month, [FromQuery] long depId = 0,
[FromQuery] long worktypeId = 0, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20)
=> Ok(ApiResult<PageResult<CqtjRowDto>>.Ok(
await _svc.GetCqtjPagedAsync(year, month, depId, worktypeId, like ?? "", pageIndex, pageSize)));
/// <summary>录入:已有快照取库,否则按账期实时汇总</summary>
[HttpGet("cqtj/edit")]
public async Task<IActionResult> CqtjEdit([FromQuery] int year, [FromQuery] int month, [FromQuery] long depId)
{
try { return Ok(ApiResult<CqtjViewDto>.Ok(await _svc.GetCqtjForEditAsync(year, month, depId))); }
catch (ServiceException ex) { return Fail(ex); }
}
/// <summary>保存(整组覆盖)</summary>
[HttpPost("cqtj")]
public async Task<IActionResult> CqtjSave([FromBody] CqtjSaveDto dto)
{
try { return Ok(ApiResult<object>.Ok(new { count = await _svc.SaveCqtjAsync(dto) }, "保存成功")); }
catch (ServiceException ex) { return Fail(ex); }
}
/// <summary>删除该年月的统计快照(depId=0 表示全部部门)</summary>
[HttpDelete("cqtj")]
public async Task<IActionResult> CqtjDelete([FromQuery] int year, [FromQuery] int month, [FromQuery] long depId = 0)
{
try
{
var count = depId > 0
? await _svc.DeleteCqtjAsync(year, month, depId)
: await _svc.DeleteCqtjAllAsync(year, month);
return Ok(ApiResult<object>.Ok(new { count }, "删除成功"));
}
catch (ServiceException ex) { return Fail(ex); }
}
/// <summary>一键生成:遍历全部车间,缺的才生成</summary>
[HttpPost("cqtj/generate")]
public async Task<IActionResult> CqtjGenerate([FromBody] CqtjGenerateDto dto)
{
try { return Ok(ApiResult<object>.Ok(new { count = await _svc.GenerateCqtjAllAsync(dto.Year, dto.Month) }, "生成完成")); }
catch (ServiceException ex) { return Fail(ex); }
}
}