using F9WebAiTest.Application.Common; using F9WebAiTest.Application.Dtos.Wms; using F9WebAiTest.Application.Services.Wms; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace F9WebAiTest.Api.Controllers.Wms; /// /// 仓储(WMS):原料(1) / 副产品(2) / 中间品(3) / 生丝(4) / 物资(5) /// 对应 F9 WinClient\F9.Business.WMS 五个模块的入库 / 出库 / 库存台账及其扩展功能。 /// [ApiController] [Route("api/wms")] [Authorize] public class WmsController : ControllerBase { private readonly IWmsService _svc; public WmsController(IWmsService svc) => _svc = svc; private IActionResult Fail(ServiceException ex) => StatusCode(ex.Code, ApiResult.Fail(ex.Message, ex.Code)); /// 下拉选项:单据类型 / 物资 / 原料庄口 / 工艺庄口 / 部门 / 往来单位 [HttpGet("options")] public async Task Options([FromQuery] int module) => Ok(ApiResult.Ok(await _svc.GetOptionsAsync(module))); // ==================== 入库 ==================== [HttpGet("ruku")] public async Task RukuList([FromQuery] int module, [FromQuery] DateTime? start = null, [FromQuery] DateTime? end = null, [FromQuery] int? type = null, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok( await _svc.GetRukuPagedAsync(module, start, end, type, like ?? "", pageIndex, pageSize))); [HttpGet("ruku/{id:long}")] public async Task RukuGet(long id) { try { return Ok(ApiResult.Ok(await _svc.GetRukuAsync(id))); } catch (ServiceException ex) { return Fail(ex); } } [HttpPost("ruku")] public async Task RukuSave([FromBody] WmsRukuSaveDto dto) { try { var id = await _svc.SaveRukuAsync(dto); return Ok(ApiResult.Ok(new { id }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("ruku/{id:long}")] public async Task RukuDelete(long id) { try { await _svc.DeleteRukuAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } /// 采购报销(物资入库单置为已报销) [HttpPost("ruku/baoxiao")] public async Task Baoxiao([FromBody] List ids) { try { var count = await _svc.BaoxiaoAsync(ids ?? new List()); return Ok(ApiResult.Ok(new { count }, "报销成功")); } catch (ServiceException ex) { return Fail(ex); } } // ==================== 出库 ==================== [HttpGet("chuku")] public async Task ChukuList([FromQuery] int module, [FromQuery] DateTime? start = null, [FromQuery] DateTime? end = null, [FromQuery] int? type = null, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok( await _svc.GetChukuPagedAsync(module, start, end, type, like ?? "", pageIndex, pageSize))); [HttpGet("chuku/{id:long}")] public async Task ChukuGet(long id) { try { return Ok(ApiResult.Ok(await _svc.GetChukuAsync(id))); } catch (ServiceException ex) { return Fail(ex); } } [HttpPost("chuku")] public async Task ChukuSave([FromBody] WmsChukuSaveDto dto) { try { var id = await _svc.SaveChukuAsync(dto); return Ok(ApiResult.Ok(new { id }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("chuku/{id:long}")] public async Task ChukuDelete(long id) { try { await _svc.DeleteChukuAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } // ==================== 库存台账 ==================== [HttpGet("taizhang/dates")] public async Task TaizhangDates([FromQuery] int module, [FromQuery] int kind = 0) => Ok(ApiResult>.Ok(await _svc.GetTzDatesAsync(module, kind))); [HttpGet("taizhang")] public async Task Taizhang([FromQuery] int module, [FromQuery] DateTime date, [FromQuery] int kind = 0, [FromQuery] bool regenerate = false) { try { return Ok(ApiResult.Ok(await _svc.GetTaizhangAsync(module, kind, date, regenerate))); } catch (ServiceException ex) { return Fail(ex); } } [HttpPost("taizhang")] public async Task TaizhangSave([FromBody] WmsTzSaveDto dto) { try { var id = await _svc.SaveTaizhangAsync(dto); return Ok(ApiResult.Ok(new { id }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("taizhang/{id:long}")] public async Task TaizhangDelete(long id) { try { await _svc.DeleteTaizhangAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } // ==================== 库存 / 出入库流水 ==================== [HttpGet("kucun")] public async Task Kucun([FromQuery] int module, [FromQuery] string like = "") => Ok(ApiResult>.Ok(await _svc.GetKucunAsync(module, like ?? ""))); [HttpGet("crk")] public async Task Crk([FromQuery] int module, [FromQuery] DateTime start, [FromQuery] DateTime end, [FromQuery] long? wzmlId = null) => Ok(ApiResult>.Ok(await _svc.GetCrkAsync(module, start, end, wzmlId))); // ==================== 生丝批次 / 包件 ==================== [HttpGet("pici")] public async Task PiciList([FromQuery] DateTime? start = null, [FromQuery] DateTime? end = null, [FromQuery] int kcStatus = 0, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) => Ok(ApiResult>.Ok( await _svc.GetPiciPagedAsync(start, end, kcStatus, like ?? "", pageIndex, pageSize))); [HttpGet("pici/{id:long}")] public async Task PiciGet(long id) { try { return Ok(ApiResult.Ok(await _svc.GetPiciAsync(id))); } catch (ServiceException ex) { return Fail(ex); } } [HttpPost("pici")] public async Task PiciSave([FromBody] WmsPiciSaveDto dto) { try { var id = await _svc.SavePiciAsync(dto); return Ok(ApiResult.Ok(new { id }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("pici/{id:long}")] public async Task PiciDelete(long id) { try { await _svc.DeletePiciAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } /// 生丝出库选批次(批次 + 未出库包件) [HttpGet("pici/chuku-select")] public async Task PiciChukuSelect([FromQuery] long wzmlId = 0, [FromQuery] string excludePiciIds = "") => Ok(ApiResult>.Ok(await _svc.GetPiciChukuSelectAsync(wzmlId, excludePiciIds ?? ""))); /// 批次质检 [HttpGet("pici/qc/{piciId:long}")] public async Task PiciQcGet(long piciId) => Ok(ApiResult.Ok(await _svc.GetPiciQcAsync(piciId))); [HttpPost("pici/qc")] public async Task PiciQcSave([FromBody] WmsPiciQcDto dto) { try { await _svc.SavePiciQcAsync(dto); return Ok(ApiResult.Ok(null, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } /// 批次纤度检验 [HttpGet("pici/xdjy/{piciId:long}")] public async Task PiciQcXdjyGet(long piciId) => Ok(ApiResult>.Ok(await _svc.GetPiciQcXdjyAsync(piciId))); [HttpPost("pici/xdjy")] public async Task PiciQcXdjySave([FromBody] List items) { try { await _svc.SavePiciQcXdjyAsync(items ?? new List()); return Ok(ApiResult.Ok(null, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } // ==================== 原料采购 ==================== [HttpGet("caigou")] public async Task CaigouList([FromQuery] DateTime? start = null, [FromQuery] DateTime? end = null) => Ok(ApiResult>.Ok(await _svc.GetCaigouAsync(start, end))); [HttpPost("caigou")] public async Task CaigouSave([FromBody] WmsCaigouDto dto) { try { var id = await _svc.SaveCaigouAsync(dto); return Ok(ApiResult.Ok(new { id }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("caigou/{id:long}")] public async Task CaigouDelete(long id) { try { await _svc.DeleteCaigouAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } // ==================== 原料翻包计划 ==================== [HttpGet("fbplan")] public async Task FbplanList([FromQuery] DateTime? start = null, [FromQuery] DateTime? end = null) => Ok(ApiResult>.Ok(await _svc.GetFbplanAsync(start, end))); [HttpPost("fbplan")] public async Task FbplanSave([FromBody] WmsFbplanDto dto) { try { var id = await _svc.SaveFbplanAsync(dto); return Ok(ApiResult.Ok(new { id }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("fbplan/{id:long}")] public async Task FbplanDelete(long id) { try { await _svc.DeleteFbplanAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } // ==================== 物资采购计划 ==================== [HttpGet("cgplan")] public async Task CgplanList([FromQuery] DateTime? start = null, [FromQuery] DateTime? end = null) => Ok(ApiResult>.Ok(await _svc.GetCgplanAsync(start, end))); [HttpGet("cgplan/{id:long}")] public async Task CgplanGet(long id) { try { return Ok(ApiResult.Ok(await _svc.GetCgplanAsync(id))); } catch (ServiceException ex) { return Fail(ex); } } [HttpPost("cgplan")] public async Task CgplanSave([FromBody] WmsCgplanSaveDto dto) { try { var id = await _svc.SaveCgplanAsync(dto); return Ok(ApiResult.Ok(new { id }, "保存成功")); } catch (ServiceException ex) { return Fail(ex); } } [HttpDelete("cgplan/{id:long}")] public async Task CgplanDelete(long id) { try { await _svc.DeleteCgplanAsync(id); return Ok(ApiResult.Ok(null, "删除成功")); } catch (ServiceException ex) { return Fail(ex); } } }