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; /// /// 生产-考勤:考勤登记(CQDJ)。 /// 对应 F9 WinClient\F9.Business.Prod\KQ\CQDJ。 /// [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.Fail(ex.Message, ex.Code)); /// 整组登记查询(日期 + 部门 + 工种 + 班次) [HttpGet("cqdj")] public async Task GetRegister([FromQuery] DateTime date, [FromQuery] long depId, [FromQuery] long worktypeId = 0, [FromQuery] int banci = 1, [FromQuery] string keyword = "") { try { return Ok(ApiResult.Ok(await _svc.GetRegisterAsync(date, depId, worktypeId, banci, keyword ?? ""))); } catch (ServiceException ex) { return Fail(ex); } } /// 整组覆盖保存 [HttpPost("cqdj")] public async Task SaveRegister([FromBody] CqdjSaveDto dto) { try { return Ok(ApiResult.Ok(new { count = await _svc.SaveRegisterAsync(dto) }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } /// 删除整组登记 [HttpDelete("cqdj")] public async Task DeleteRegister([FromQuery] DateTime date, [FromQuery] long depId, [FromQuery] long worktypeId = 0, [FromQuery] int banci = 1) { try { return Ok(ApiResult.Ok(new { count = await _svc.DeleteRegisterAsync(date, depId, worktypeId, banci) }, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } /// 「添加职工」可选职工 [HttpGet("cqdj/employees")] public async Task Employees([FromQuery] long depId, [FromQuery] long worktypeId = 0, [FromQuery] int banci = 1) => Ok(ApiResult>.Ok(await _svc.GetEmployeesAsync(depId, worktypeId, banci))); // ==================== 考勤统计(CQTJ) ==================== /// 统计分页(库中的月快照) [HttpGet("cqtj")] public async Task 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>.Ok( await _svc.GetCqtjPagedAsync(year, month, depId, worktypeId, like ?? "", pageIndex, pageSize))); /// 录入:已有快照取库,否则按账期实时汇总 [HttpGet("cqtj/edit")] public async Task CqtjEdit([FromQuery] int year, [FromQuery] int month, [FromQuery] long depId) { try { return Ok(ApiResult.Ok(await _svc.GetCqtjForEditAsync(year, month, depId))); } catch (ServiceException ex) { return Fail(ex); } } /// 保存(整组覆盖) [HttpPost("cqtj")] public async Task CqtjSave([FromBody] CqtjSaveDto dto) { try { return Ok(ApiResult.Ok(new { count = await _svc.SaveCqtjAsync(dto) }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } /// 删除该年月的统计快照(depId=0 表示全部部门) [HttpDelete("cqtj")] public async Task 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.Ok(new { count }, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } /// 一键生成:遍历全部车间,缺的才生成 [HttpPost("cqtj/generate")] public async Task CqtjGenerate([FromBody] CqtjGenerateDto dto) { try { return Ok(ApiResult.Ok(new { count = await _svc.GenerateCqtjAllAsync(dto.Year, dto.Month) }, "生成完成")); } catch (ServiceException ex) { return Fail(ex); } } }