using F9WebAiTest.Application.Common; using F9WebAiTest.Application.Dtos.PayRoll; using F9WebAiTest.Application.Services.PayRoll; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace F9WebAiTest.Api.Controllers.PayRoll; /// 薪资计算-挡车/车头产量计算(对应 F9 薪资-挡车车头产量计算 CALCLDCCT) [ApiController] [Route("api/payroll/calcldcct")] [Authorize] public class CalcLdcctController : ControllerBase { private readonly ICalcLdcctService _svc; public CalcLdcctController(ICalcLdcctService svc) => _svc = svc; /// 列表(账期起止 + 部门 + 工种 + 姓名/庄口关键字) [HttpGet("list")] public async Task GetPaged([FromQuery] DateTime start, [FromQuery] DateTime end, [FromQuery] long? depId = null, [FromQuery] long? worktypeId = null, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 50) => Ok(ApiResult>.Ok( await _svc.GetPagedAsync(pageIndex, pageSize, start, end, depId, worktypeId, like ?? string.Empty))); /// 一键计算(挡车工):整账期 + 部门 + 工种全量覆盖 [HttpPost("calc-dcg")] public async Task CalcDcg([FromBody] CalcLdcctCalcDto dto) { try { return Ok(ApiResult.Ok(await _svc.CalcDcgAsync(dto), "计算完成")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } /// 一键计算(车头工):依赖已存的挡车工产量 [HttpPost("calc-ctg")] public async Task CalcCtg([FromBody] CalcLdcctCalcDto dto) { try { return Ok(ApiResult.Ok(await _svc.CalcCtgAsync(dto), "计算完成")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } /// 保存人工微调结果(整账期 + 部门 + 工种全量覆盖) [HttpPost("save")] public async Task Save([FromBody] CalcLdcctSaveDto dto) { try { var count = await _svc.SaveAsync(dto); return Ok(ApiResult.Ok(new { count }, "保存成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } /// 删除整账期 + 部门 + 工种的计算结果 [HttpDelete] public async Task Delete([FromQuery] DateTime start, [FromQuery] DateTime end, [FromQuery] long depId, [FromQuery] long worktypeId) { try { await _svc.DeleteAsync(start, end, depId, worktypeId); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } }