using Kean.Application.Command.ViewModels; using Microsoft.AspNetCore.Mvc; using OfficeOpenXml; using System; using System.Linq; using System.Threading.Tasks; namespace Kean.Presentation.Rest.Controllers { /// /// 记录服务 /// [ApiController, Route("api/records")] public class RecordsController : ControllerBase { private readonly Application.Query.Interfaces.IStockService _stockQueryService; // 库存查询服务 private readonly Application.Query.Interfaces.IRecordService _recordQueryService; private readonly Application.Command.Interfaces.IStockService _stockCommandService; /// /// 依赖注入 /// public RecordsController( Application.Query.Interfaces.IStockService stockQueryService, Application.Command.Interfaces.IStockService stockCommandService, Application.Query.Interfaces.IRecordService recordQueryService) { _stockQueryService = stockQueryService; _recordQueryService = recordQueryService; _stockCommandService = stockCommandService; } /// /// 获取记录列表 /// /// 成功 [HttpGet] [ProducesResponseType(200)] public async Task GetList( [FromQuery] int[] area, [FromQuery] int[] category, [FromQuery] string code, [FromQuery] string name, [FromQuery] string batch, [FromQuery] string[] transaction, [FromQuery] string barcode, [FromQuery] string cell, [FromQuery] string original, [FromQuery] string destination, [FromQuery] DateTime? beginTimeFrom, [FromQuery] DateTime? beginTimeTo, [FromQuery] DateTime? endTimeFrom, [FromQuery] DateTime? endTimeTo, [FromQuery] string sort, [FromQuery] int? offset, [FromQuery] int? limit, [FromQuery] string bill, [FromQuery] string slTarget, [FromQuery] string orderInfo) { if (area.Length == 0) { area = null; } if (category.Length == 0) { category = null; } if (transaction.Length == 0) { transaction = null; } var items = await _stockQueryService.GetRecordList(area, category, code, name, batch, transaction, barcode, cell, original, destination, beginTimeFrom, beginTimeTo, endTimeFrom, endTimeTo, sort, offset, limit, bill, slTarget, orderInfo); decimal qtyCurrent = 0; decimal transQtyCurrent = 0; qtyCurrent = await _stockQueryService.GetRecordListQtySum(area, category, code, name, batch, transaction, barcode, cell, original, destination, beginTimeFrom, beginTimeTo, endTimeFrom, endTimeTo, sort, offset, limit, bill, slTarget, orderInfo); transQtyCurrent = qtyCurrent; Application.Query.ViewModels.Record statistics = new Application.Query.ViewModels.Record(); statistics.QualifiedNum = $"{qtyCurrent}"; statistics.TransQty = $"{transQtyCurrent}"; statistics.Transaction = ""; statistics.BeginTime = null; statistics.Barcode = ""; items = items.Concat(new[] { statistics }); if (offset.HasValue || limit.HasValue) { var total = await _stockQueryService.GetRecordCount(area, category, code, name, batch, transaction, barcode, cell, original, destination, beginTimeFrom, beginTimeTo, endTimeFrom, endTimeTo, bill, slTarget, orderInfo); return StatusCode(200, new { items, total }); } else { return StatusCode(200, new { items, total = items.Count() }); } } /// /// 导出库存列表 /// /// 成功 [HttpGet("excel")] [ProducesResponseType(200)] public async Task Export( [FromQuery] int[] area, [FromQuery] int[] category, [FromQuery] string code, [FromQuery] string name, [FromQuery] string batch, [FromQuery] string[] transaction, [FromQuery] string barcode, [FromQuery] string cell, [FromQuery] string original, [FromQuery] string destination, [FromQuery] DateTime? beginTimeFrom, [FromQuery] DateTime? beginTimeTo, [FromQuery] DateTime? endTimeFrom, [FromQuery] DateTime? endTimeTo, [FromQuery] string bill, [FromQuery] string slTarget, [FromQuery] string orderInfo) { if (area.Length == 0) { area = null; } if (category.Length == 0) { category = null; } if (transaction.Length == 0) { transaction = null; } using var package = new ExcelPackage(); var worksheet = package.Workbook.Worksheets.Add("Sheet1"); var column = 0; worksheet.Cells[1, ++column].Value = "事务"; worksheet.Cells[1, ++column].Value = "托盘"; worksheet.Cells[1, ++column].Value = "仓库"; worksheet.Cells[1, ++column].Value = "起始位置"; worksheet.Cells[1, ++column].Value = "目标位置"; worksheet.Cells[1, ++column].Value = "物料编码"; worksheet.Cells[1, ++column].Value = "物料名称"; worksheet.Cells[1, ++column].Value = "膜卷码"; worksheet.Cells[1, ++column].Value = "质量状态"; worksheet.Cells[1, ++column].Value = "入库工单号"; worksheet.Cells[1, ++column].Value = "数量"; worksheet.Cells[1, ++column].Value = "单位"; worksheet.Cells[1, ++column].Value = "拉线"; worksheet.Cells[1, ++column].Value = "要料工单号"; worksheet.Cells[1, ++column].Value = "开始时间"; worksheet.Cells[1, ++column].Value = "完成时间"; worksheet.Cells[1, ++column].Value = "操作人"; worksheet.Cells[1, ++column].Value = "备注"; worksheet.Cells[1, ++column].Value = "标签"; var index = 1; foreach (var item in await _stockQueryService.GetRecordList(area, category, code, name, batch, transaction, barcode, cell, original, destination, beginTimeFrom, beginTimeTo, endTimeFrom, endTimeTo, null, null, null, bill, slTarget, orderInfo)) { index++; column = 0; worksheet.Cells[index, ++column].Value = item.Transaction; worksheet.Cells[index, ++column].Value = item.Barcode; worksheet.Cells[index, ++column].Value = item.Warehouse; worksheet.Cells[index, ++column].Value = item.Original; worksheet.Cells[index, ++column].Value = item.Destination; worksheet.Cells[index, ++column].Value = item.Code; worksheet.Cells[index, ++column].Value = item.Name; worksheet.Cells[index, ++column].Value = item.Bill; string qs = ""; if (item.QualityState == "ok") { qs = "合格"; } else if (item.QualityState == "ng") { qs = "NG"; } else if (item.QualityState == "check") { qs = "验证品"; } worksheet.Cells[index, ++column].Value = qs; worksheet.Cells[index, ++column].Value = item.WorkorderNo; worksheet.Cells[index, ++column].Value = item.TransQty; worksheet.Cells[index, ++column].Value = item.TransUnit; worksheet.Cells[index, ++column].Value = item.SlTarget; worksheet.Cells[index, ++column].Value = item.OrderInfo; worksheet.Cells[index, ++column].Value = item.BeginTime; worksheet.Cells[index, column].Style.Numberformat.Format = "yyyy-MM-dd HH:mm:ss"; worksheet.Cells[index, ++column].Value = item.EndTime; worksheet.Cells[index, column].Style.Numberformat.Format = "yyyy-MM-dd HH:mm:ss"; worksheet.Cells[index, ++column].Value = item.Operator; worksheet.Cells[index, ++column].Value = ""; worksheet.Cells[index, ++column].Value = item.Tag; } return File(package.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); } /// /// 获取接口记录列表 /// /// 成功 [HttpGet("interface")] [ProducesResponseType(200)] public async Task InterfaceGetList( [FromQuery] string direction, [FromQuery] string method, [FromQuery] string requestNo, [FromQuery] string barcode, [FromQuery] string result, [FromQuery] DateTime? startTimeFrom, [FromQuery] DateTime? startTimeTo, [FromQuery] DateTime? endTimeFrom, [FromQuery] DateTime? endTimeTo, [FromQuery] string sort, [FromQuery] int? offset, [FromQuery] int? limit) { var items = await _recordQueryService.GetInterfaceRecordList(direction, method, requestNo, barcode, result, startTimeFrom, startTimeTo, endTimeFrom, endTimeTo, sort, offset, limit); if (offset.HasValue || limit.HasValue) { var total = await _recordQueryService.GetInterfaceRecordCount(direction, method, requestNo, barcode, result, startTimeFrom, startTimeTo, endTimeFrom, endTimeTo); return StatusCode(200, new { items, total }); } else { return StatusCode(200, new { items, total = items.Count() }); } } /// /// 获取api操作记录列表 /// /// 成功 [HttpGet("apirecord")] [ProducesResponseType(200)] public async Task ApiRecordGetList( [FromQuery] string userName, [FromQuery] string method, [FromQuery] string controllerName, [FromQuery] DateTime? requestTimeFrom, [FromQuery] DateTime? requestTimeTo, [FromQuery] string sort, [FromQuery] int? offset, [FromQuery] int? limit) { var items = await _recordQueryService.GetApiRecordList(userName, method, controllerName, requestTimeFrom, requestTimeTo, sort, offset, limit); if (offset.HasValue || limit.HasValue) { var total = await _recordQueryService.GetApiRecordCount(userName, method, controllerName, requestTimeFrom, requestTimeTo); return StatusCode(200, new { items, total }); } else { return StatusCode(200, new { items, total = items.Count() }); } } /// /// 统计出入库记录 /// /// 成功 [HttpGet("recordstatistics")] [ProducesResponseType(200)] public async Task RecordStatistics( [FromQuery] DateTime requestTimeFrom, [FromQuery] DateTime requestTimeTo, [FromQuery] string statisticsType, [FromQuery] string statisticsType2, [FromQuery] bool bAC) { if (statisticsType2 != "托盘数") { statisticsType2 = "EA"; } //获取日期间的所有日期 var data = await _recordQueryService.RecordStatistics(requestTimeFrom, requestTimeTo, statisticsType, bAC, statisticsType2); return StatusCode(200, new { data }); } /// /// 获取异常反馈列表 /// /// 成功 [HttpGet("errfeedback")] [ProducesResponseType(200)] public async Task ErrfeedbackList( [FromQuery] string method, [FromQuery] string requestNo, [FromQuery] string barcode, [FromQuery] string[] result, [FromQuery] DateTime? startTimeFrom, [FromQuery] DateTime? startTimeTo, [FromQuery] DateTime? lastendTimeFrom, [FromQuery] DateTime? lastendTimeTo, [FromQuery] string sort, [FromQuery] int? offset, [FromQuery] int? limit) { var items = await _recordQueryService.GetErrfeedbackList(method, requestNo, barcode, result, startTimeFrom, startTimeTo, lastendTimeFrom, lastendTimeTo, sort, offset, limit); if (offset.HasValue || limit.HasValue) { var total = await _recordQueryService.GetErrfeedbackCount(method, requestNo, barcode, result, startTimeFrom, startTimeTo, lastendTimeFrom, lastendTimeTo); return StatusCode(200, new { items, total }); } else { return StatusCode(200, new { items, total = items.Count() }); } } /// /// 重新反馈 /// /// 成功 /// 非法操作 /// 请求内容错误 [HttpPost("reFeedback")] [ProducesResponseType(201)] [ProducesResponseType(405)] [ProducesResponseType(422)] [Anonymous] public async Task ReFeedback([FromMember] int[] id) { Failure failure = await _stockCommandService.BatchReFeedback(id); if (failure == null) { return StatusCode(201); } else { return StatusCode(422, failure); } } } }