using AutoMapper;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using BarCode.Web.Core.Internal.Results;
using BarCode.Web.Domain.Infrastructure;
using BarCode.Web.Domain.IService.Public;
using BarCode.Web.Domain.Values;
using BarCode.Web.Core.Dto.SerialNumbers;
using BarCode.Web.Repositories;
using BarCode.Web.Core.Dto;
using BarCode.Web.Domain.IService;
using BarCode.Web.Core.Help;
using BarCode.Web.Core;
using BarCode.Web.Domain.Services;
using BarCode.Web.Domain.Options;
using Microsoft.Extensions.Options;
using NPOI.SS.Formula.Functions;
using System.Diagnostics.Eventing.Reader;
using BarCode.Web.Core.Dto.Box;
using System.Text.RegularExpressions;
namespace BarCode.Web.Api.Controllers
{
///
/// 序列号
///
[Route("api/[controller]")]
[ApiController]
public class SerialNumberController : ControllerBase
{
private readonly IMapper _mapper;
private readonly ILoginService _loginService;
private readonly ISerialNumbersRepositories _serialNumbersRepositories;
private readonly ISerialNumberService _serialNumberService;
private readonly IExportExcelService _exportExcelService;
private readonly QiniuOptions _option;
private readonly ISGenerateRecordRepositories _sGenerateRecordRepositories;
public SerialNumberController(IMapper mapper, ILoginService loginService, ISerialNumbersRepositories serialNumbersRepositories,
ISerialNumberService serialNumberService, IExportExcelService exportExcelService,
IOptions option, ISGenerateRecordRepositories sGenerateRecordRepositories)
{
_mapper = mapper;
_loginService = loginService;
_serialNumbersRepositories = serialNumbersRepositories;
_serialNumberService = serialNumberService;
_exportExcelService = exportExcelService;
_option = option?.Value;
_sGenerateRecordRepositories = sGenerateRecordRepositories;
}
///
/// 序列码生成记录列表
///
///
///
[HttpPost]
[Route("GetGenerateRecordList")]
public async Task> GetGenerateRecordList([FromBody] SGenerateRecordQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
var (list, count) = await _sGenerateRecordRepositories.GetListAsync(dto, loginInfo);
var result = ResultPagedList.ReSuccess(list, count);
return result;
}
///
/// 序列码列表
///
///
///
[HttpPost]
[Route("GetList")]
public async Task> GetPagedList([FromBody] SerialNumberQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
if (!string.IsNullOrEmpty(dto.NumberCodeBegin)
&& (!Regex.Match(dto.NumberCodeBegin, "^[0-9]*$").Success || dto.NumberCodeBegin.Length < 12))
return ResultPagedList.ReFailure(ResultCodes.NumberCode_Invalid_Error);
if (!string.IsNullOrEmpty(dto.NumberCodeEnd)
&& (!Regex.Match(dto.NumberCodeEnd, "^[0-9]*$").Success || dto.NumberCodeEnd.Length < 12))
return ResultPagedList.ReFailure(ResultCodes.NumberCode_Invalid_Error);
var (list, count) = await _serialNumbersRepositories.GetListAsync(dto, loginInfo);
var result = ResultPagedList.ReSuccess(list, count);
return result;
}
///
/// 条码生成记录页面-下载条码
///
///
///
[HttpPost]
[Route("ExportAll")]
public Task> ExportAll(OperateRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Task.FromResult(Result.ReFailure(ResultCodes.Token_Invalid_Error));
var entityList = _sGenerateRecordRepositories.GetEntityList(dto.Ids, "").GetAwaiter().GetResult();
if (entityList.Count < 0) return Task.FromResult(Result.ReFailure(ResultCodes.NoDateError));
string orgCode = entityList.First().OrgCode;
//反写下载数据
var resSuccess = this.DownLoad(new OperateSerialNumberRequest() { GenerateRecordIds = dto.Ids, IsAll = true }).GetAwaiter().GetResult();
if (!resSuccess.IsSuccess) Task.FromResult(Result.ReFailure(resSuccess.Message, resSuccess.Status));
string fileName = FileDownLoadOrderType.SerialNumbers.GetRemark() + DateTime.Now.DateToStringSecondsNoSpace() + ".xlsx";
string res = _option.Url + fileName;
SerialNumbersExportRequest request = new SerialNumbersExportRequest();
request.Ids = dto.Ids;
Task.Run(async () =>
{
await _exportExcelService.ExportList(request, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumbers, orgCode);
});
return Task.FromResult(Result.ReSuccess(res));
}
///
/// 序列码页面-条码下载
///
///
///
[HttpPost]
[Route("Export")]
public Task> Export([FromBody] SerialNumberQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Task.FromResult(Result.ReFailure(ResultCodes.Token_Invalid_Error));
var entity = _sGenerateRecordRepositories.GetEntity(dto.GenerateRecordId).GetAwaiter().GetResult();
if (entity == null) return Task.FromResult(Result.ReFailure(ResultCodes.NoDateError));
string orgCode = entity.OrgCode;
//反写下载数据
Result resSuccess;
if (dto.SerialNumbers.Count() > 0)
{
resSuccess = this.DownLoad(new OperateSerialNumberRequest()
{
GenerateRecordIds = new List() { dto.GenerateRecordId },
IsAll = false,
SerialNumbers = dto.SerialNumbers
}).GetAwaiter().GetResult();
}
else
{
resSuccess = this.DownLoad(new OperateSerialNumberRequest()
{
GenerateRecordIds = new List() { dto.GenerateRecordId },
IsAll = true
}).GetAwaiter().GetResult();
}
if (!resSuccess.IsSuccess) return Task.FromResult(Result.ReFailure(resSuccess.Message, resSuccess.Status));
string fileName = FileDownLoadOrderType.SerialNumberInfo.GetRemark() + DateTime.Now.DateToStringSecondsNoSpace() + ".xlsx";
string res = _option.Url + fileName;
if (dto.isTwo == 2)
{
Task.Run(async () =>
{
await _exportExcelService.ExportList(dto, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumberInfo, orgCode);
});
}
else
{
Task.Run(async () =>
{
await _exportExcelService.ExportList(dto, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumberInfo, orgCode);
});
}
return Task.FromResult(Result.ReSuccess(res));
}
///
/// 生成序列号
///
///
///
[HttpPost]
[Route("Generate")]
public async Task Generate(GenerateSerialNumberRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error);
return await _serialNumberService.Generate(dto, loginInfo);
}
///
/// 打印
///
///
///
[HttpPost]
[Route("Print")]
public async Task Print(OperateSerialNumberRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error);
return await _serialNumberService.Print(dto);
}
///
/// 下载(一般后端内部调用)
///
///
///
[HttpPost]
[Route("DownLoad")]
public async Task DownLoad(OperateSerialNumberRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error);
return await _serialNumberService.DownLoad(dto);
}
///
/// 下载(一般后端内部调用)
///
///
///
[HttpPost]
[Route("UpdateSn")]
public async Task UpdateSn(OperateSerialNumberRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error);
return await _serialNumberService.UpdateSn(dto);
}
///
/// 转换Sn,由单件装转成两件装
///
///
///
[HttpPost]
[Route("TransferSn")]
public async Task TransferSn(TransferSNOneTwoTwoRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error);
return await _serialNumberService.TransferSn(dto);
}
///
/// 获取序列号信息
///
/// 箱Id
///
[HttpPost]
[Route("GetByBoxId")]
public async Task> GetByBoxId(SerialNumberByBoxIdQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
if (dto.BoxId == 0)
return ResultPagedList.ReFailure(ResultCodes.NoDateError);
var (list, count) = await _serialNumbersRepositories.GetEntityListByBoxId(dto);
var result = ResultPagedList.ReSuccess(list, count);
return result;
}
/////
///// 获取序列号信息
/////
///// 序列号
///// 组织或供应商编码
/////
//[HttpGet]
//[Route("Get")]
//public async Task> Get([FromQuery] string serialNumber, [FromQuery] string orgCode)
//{
// var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
// if (loginInfo == null || loginInfo.UserInfo == null)
// return ResultList.ReFailure(ResultCodes.Token_Invalid_Error);
// if (string.IsNullOrEmpty(orgCode))
// return ResultList.ReFailure(ResultCodes.NoOrgError);
// var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
// // var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
// if (res == null) return ResultList.ReFailure(ResultCodes.SerialNumberNoData);
// // return ResultList.ReSuccess(res);
// return ResultList.ReSuccess(res.ToList());
//}
///
/// 获取序列号信息
///
/// 序列号
/// 组织或供应商编码
///
[HttpGet]
[Route("Get")]
public async Task> Get([FromQuery] string serialNumber, [FromQuery] string orgCode)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error);
if (string.IsNullOrEmpty(orgCode))
return Result.ReFailure(ResultCodes.NoOrgError);
var res = await _serialNumbersRepositories.GetEntity(serialNumber, orgCode, loginInfo);
// var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
if (res == null) return Result.ReFailure(ResultCodes.SerialNumberNoData);
// return ResultList.ReSuccess(res);
return Result.ReSuccess(res);
}
///
/// 修改序列码物料
///
///
///
[HttpPost]
[Route("UpdateMaterial")]
public async Task UpdateMaterial(UpdateMaterialRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error);
return await _serialNumberService.UpdateMaterial(dto);
}
}
}