using F9WebAiTest.Application.Common; using F9WebAiTest.Application.Dtos.Prod; using F9WebAiTest.Application.Services.Prod; using F9WebAiTest.Domain.Common; using F9WebAiTest.Domain.Enums.SYS.Employees; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace F9WebAiTest.Api.Controllers.Prod; /// 看台排班(生产-前缫):车头工 / 挡车工 / 值班长 [ApiController] [Route("api/prod/ktpb")] [Authorize] public class KtpbController : ControllerBase { private readonly IKtpbService _svc; public KtpbController(IKtpbService svc) => _svc = svc; // ---------- 下拉 ---------- /// 车间下拉(职责类型=前缫) [HttpGet("qianxian-deps")] public async Task GetQianxianDeps() => Ok(ApiResult>.Ok(await _svc.GetQianxianDepsAsync())); /// 机组下拉(含车台范围,来源于机组车台) [HttpGet("jizu-options")] public async Task GetJizuOptions([FromQuery] long depId) => Ok(ApiResult>.Ok(await _svc.GetJizuOptionsAsync(depId))); // ---------- 车头工 ---------- [HttpGet("ctg")] public async Task GetCtgPaged([FromQuery] long depId = 0, [FromQuery] Prod_Banci_Enum? banci = null, [FromQuery] int? jizu = null, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok( await _svc.GetCtgPagedAsync(depId, banci, jizu, like ?? string.Empty, pageIndex, pageSize))); [HttpGet("ctg/{id}")] public async Task GetCtgById(long id) { try { return Ok(ApiResult.Ok(await _svc.GetCtgByIdAsync(id))); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } [HttpPost("ctg")] public async Task CreateCtg([FromBody] KtpbctgReadDto_View dto) { try { await _svc.CreateCtgAsync(dto); return Ok(ApiResult.Ok(null, "新增成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } [HttpPut("ctg/{id}")] public async Task UpdateCtg(long id, [FromBody] KtpbctgReadDto_View dto) { try { await _svc.UpdateCtgAsync(id, dto); return Ok(ApiResult.Ok(null, "修改成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } [HttpDelete("ctg/{id}")] public async Task DeleteCtg(long id) { try { await _svc.DeleteCtgAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } // ---------- 挡车工 ---------- [HttpGet("dcg")] public async Task GetDcgPaged([FromQuery] long depId = 0, [FromQuery] Prod_Banci_Enum? banci = null, [FromQuery] int? jizu = null, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok( await _svc.GetDcgPagedAsync(depId, banci, jizu, like ?? string.Empty, pageIndex, pageSize))); /// 某「车间+班次+机组」下的整组排班(批量编辑弹窗) [HttpGet("dcg/group")] public async Task GetDcgGroup([FromQuery] long depId, [FromQuery] Prod_Banci_Enum banci, [FromQuery] int jizu) { try { return Ok(ApiResult>.Ok(await _svc.GetDcgGroupAsync(depId, banci, jizu))); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } /// 整组替换保存(传空集合表示清空该组) [HttpPost("dcg/batch")] public async Task SaveDcgBatch([FromBody] KtpbdcgBatchDto dto) { try { var count = await _svc.SaveDcgBatchAsync(dto); return Ok(ApiResult.Ok(count, count > 0 ? $"已保存 {count} 条排班" : "已清空该组排班")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } [HttpDelete("dcg/{id}")] public async Task DeleteDcg(long id) { try { await _svc.DeleteDcgAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } // ---------- 值班长 ---------- [HttpGet("zbz")] public async Task GetZbzPaged([FromQuery] long depId = 0, [FromQuery] Prod_Banci_Enum? banci = null, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok( await _svc.GetZbzPagedAsync(depId, banci, like ?? string.Empty, pageIndex, pageSize))); [HttpGet("zbz/{id}")] public async Task GetZbzById(long id) { try { return Ok(ApiResult.Ok(await _svc.GetZbzByIdAsync(id))); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } [HttpPost("zbz")] public async Task CreateZbz([FromBody] KtpbzbzReadDto_View dto) { try { await _svc.CreateZbzAsync(dto); return Ok(ApiResult.Ok(null, "新增成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } [HttpPut("zbz/{id}")] public async Task UpdateZbz(long id, [FromBody] KtpbzbzReadDto_View dto) { try { await _svc.UpdateZbzAsync(id, dto); return Ok(ApiResult.Ok(null, "修改成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } [HttpDelete("zbz/{id}")] public async Task DeleteZbz(long id) { try { await _svc.DeleteZbzAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } }