山东雷驰
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

373 lines
15 KiB

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
{
/// <summary>
/// 记录服务
/// </summary>
[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;
/// <summary>
/// 依赖注入
/// </summary>
public RecordsController(
Application.Query.Interfaces.IStockService stockQueryService,
Application.Command.Interfaces.IStockService stockCommandService,
Application.Query.Interfaces.IRecordService recordQueryService)
{
_stockQueryService = stockQueryService;
_recordQueryService = recordQueryService;
_stockCommandService = stockCommandService;
}
/// <summary>
/// 获取记录列表
/// </summary>
/// <response code="200">成功</response>
[HttpGet]
[ProducesResponseType(200)]
public async Task<IActionResult> 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() });
}
}
/// <summary>
/// 导出库存列表
/// </summary>
/// <response code="200">成功</response>
[HttpGet("excel")]
[ProducesResponseType(200)]
public async Task<IActionResult> 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");
}
/// <summary>
/// 获取接口记录列表
/// </summary>
/// <response code="200">成功</response>
[HttpGet("interface")]
[ProducesResponseType(200)]
public async Task<IActionResult> 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()
});
}
}
/// <summary>
/// 获取api操作记录列表
/// </summary>
/// <response code="200">成功</response>
[HttpGet("apirecord")]
[ProducesResponseType(200)]
public async Task<IActionResult> 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()
});
}
}
/// <summary>
/// 统计出入库记录
/// </summary>
/// <response code="200">成功</response>
[HttpGet("recordstatistics")]
[ProducesResponseType(200)]
public async Task<IActionResult> 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
});
}
/// <summary>
/// 获取异常反馈列表
/// </summary>
/// <response code="200">成功</response>
[HttpGet("errfeedback")]
[ProducesResponseType(200)]
public async Task<IActionResult> 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()
});
}
}
/// <summary>
/// 重新反馈
/// </summary>
/// <response code="201">成功</response>
/// <response code="405">非法操作</response>
/// <response code="422">请求内容错误</response>
[HttpPost("reFeedback")]
[ProducesResponseType(201)]
[ProducesResponseType(405)]
[ProducesResponseType(422)]
[Anonymous]
public async Task<IActionResult> ReFeedback([FromMember] int[] id)
{
Failure failure = await _stockCommandService.BatchReFeedback(id);
if (failure == null)
{
return StatusCode(201);
}
else
{
return StatusCode(422, failure);
}
}
}
}