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; /// /// 生产-选剥茧(对应 F9 WinClient\F9.Business.Prod\XBJ): /// 选茧日报(含盈亏 / 联统率)、选茧计划及其明细、选茧班组与班组职工。 /// [ApiController] [Route("api/prod/xjrb")] [Authorize] public class XjrbController : ControllerBase { private readonly IXjrbService _svc; public XjrbController(IXjrbService svc) => _svc = svc; private IActionResult Fail(ServiceException ex) => StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); // ==================== 选茧日报 ==================== [HttpGet("")] public async Task List([FromQuery] DateTime? start = null, [FromQuery] DateTime? end = null, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok(await _svc.GetPagedAsync(start, end, like ?? "", pageIndex, pageSize))); [HttpGet("{id:long}")] public async Task Get(long id) => Ok(ApiResult.Ok(await _svc.GetByIdAsync(id))); [HttpPost("")] public async Task Save([FromBody] XjrbSaveDto dto) { try { return Ok(ApiResult.Ok(new { id = await _svc.SaveAsync(dto) }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("{id:long}")] public async Task Delete(long id) { try { await _svc.DeleteAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } /// 计算盈亏 / 联统率(前端保存前调用,把结果写入表单) [HttpPost("count-yingkui")] public async Task CountYingkui([FromBody] XjrbSaveDto dto) { try { return Ok(ApiResult.Ok(await _svc.CountYingkuiAsync(dto))); } catch (ServiceException ex) { return Fail(ex); } } // ==================== 选茧计划 ==================== [HttpGet("plan")] public async Task PlanList([FromQuery] DateTime? start = null, [FromQuery] DateTime? end = null, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok(await _svc.GetPlanPagedAsync(start, end, like ?? "", pageIndex, pageSize))); [HttpGet("plan/{id:long}")] public async Task PlanGet(long id) => Ok(ApiResult.Ok(await _svc.GetPlanByIdAsync(id))); [HttpPost("plan")] public async Task PlanSave([FromBody] XjrbPlanSaveDto dto) { try { return Ok(ApiResult.Ok(new { id = await _svc.SavePlanAsync(dto) }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("plan/{id:long}")] public async Task PlanDelete(long id) { try { await _svc.DeletePlanAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } // ==================== 选茧计划明细 ==================== [HttpGet("plan/{planId:long}/items")] public async Task PlanItems(long planId) => Ok(ApiResult>.Ok(await _svc.GetPlanItemsAsync(planId))); [HttpPost("plan/item")] public async Task PlanItemSave([FromBody] XjrbItemSaveDto dto) { try { return Ok(ApiResult.Ok(new { id = await _svc.SavePlanItemAsync(dto) }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("plan/item/{id:long}")] public async Task PlanItemDelete(long id) { try { await _svc.DeletePlanItemAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } /// 计划维度盈亏(联统率按包数口径) [HttpPost("plan/count-yingkui")] public async Task PlanCountYingkui([FromBody] XjrbItemSaveDto dto) { try { return Ok(ApiResult.Ok(await _svc.CountPlanYingkuiAsync(dto))); } catch (ServiceException ex) { return Fail(ex); } } // ==================== 选茧班组 ==================== [HttpGet("banzu")] public async Task BanzuList([FromQuery] string banci = "", [FromQuery] int? zu = null, [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok(await _svc.GetBanzuPagedAsync(banci ?? "", zu, pageIndex, pageSize))); [HttpGet("banzu/{id:long}/zhigong")] public async Task BanzuZhigong(long id) => Ok(ApiResult>.Ok(await _svc.GetBanzuZhigongAsync(id))); /// 班组「编辑录入」:按班次整体覆盖保存职工与组别 [HttpPost("banzu/zhigong")] public async Task BanzuZhigongSave([FromBody] List dtos) { try { await _svc.SaveBanzuZhigongAsync(dtos ?? new List()); return Ok(ApiResult.Ok(null, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } }