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; /// 煮茧日报(生产-前缫):主表 + 机组 / 班次 / 机组班次 [ApiController] [Route("api/prod/zjrb")] [Authorize] public class ZjrbController : ControllerBase { private readonly IZjrbService _svc; public ZjrbController(IZjrbService svc) => _svc = svc; // ---------- 查询 ---------- /// 日报列表(账期起止 + 车间 + 庄口/规格关键字) [HttpGet("list")] public async Task GetPaged([FromQuery] DateTime dateFrom, [FromQuery] DateTime dateTo, [FromQuery] long depId = 0, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok( await _svc.GetPagedAsync(dateFrom, dateTo, depId, like ?? string.Empty, pageIndex, pageSize))); /// 某条日报的机组明细 [HttpGet("{id}/jizus")] public async Task GetJizus(long id) { try { return Ok(ApiResult>.Ok(await _svc.GetJizuListAsync(id))); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } /// 修改回填(主表 + 班次 + 机组 + 机组班次) [HttpGet("{id}")] public async Task GetForEdit(long id) { try { return Ok(ApiResult.Ok(await _svc.GetForEditAsync(id))); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } /// 新增默认值:按上一日结存带出上存、每桶茧量、工艺落丝桶数,并按机组车台生成机组行 [HttpGet("defaults")] public async Task GetDefaults([FromQuery] DateTime date, [FromQuery] long depId, [FromQuery] long gyzkId, [FromQuery] string guige = "") { try { return Ok(ApiResult.Ok(await _svc.BuildDefaultsAsync(date, depId, gyzkId, guige))); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } // ---------- 保存 / 删除 ---------- [HttpPost("save")] public async Task Save([FromBody] ZjrbSaveDto dto) { try { var id = await _svc.SaveAsync(dto); return Ok(ApiResult.Ok(new { id }, "保存成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } [HttpDelete("{id}")] public async Task Delete(long id) { try { await _svc.DeleteAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } // ---------- 计算缫丝时长 ---------- /// 按「日期 + 车间」整日重算机组缫丝时长(单班 9 小时 / 双班 18 小时,按茧量比例分配) [HttpPost("calculate-saosi-hours")] public async Task CalculateSaosiHours([FromQuery] DateTime date, [FromQuery] long depId) { try { var changed = await _svc.CalculateJizuSaosiHoursAsync(date, depId); return Ok(ApiResult.Ok(changed, changed > 0 ? $"已更新 {changed} 条机组缫丝时长" : "缫丝时长无变化")); } catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); } } }