Files
BarCode-Api/src/BarCode.Web.Api/Controllers/SerialNumberController.cs
2025-07-22 14:38:39 +08:00

352 lines
16 KiB
C#

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
{
/// <summary>
/// 序列号
/// </summary>
[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<QiniuOptions> option, ISGenerateRecordRepositories sGenerateRecordRepositories)
{
_mapper = mapper;
_loginService = loginService;
_serialNumbersRepositories = serialNumbersRepositories;
_serialNumberService = serialNumberService;
_exportExcelService = exportExcelService;
_option = option?.Value;
_sGenerateRecordRepositories = sGenerateRecordRepositories;
}
/// <summary>
/// 序列码生成记录列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetGenerateRecordList")]
public async Task<ResultPagedList<SGenerateRecordInfoResponse>> GetGenerateRecordList([FromBody] SGenerateRecordQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<SGenerateRecordInfoResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var (list, count) = await _sGenerateRecordRepositories.GetListAsync(dto, loginInfo);
var result = ResultPagedList<SGenerateRecordInfoResponse>.ReSuccess(list, count);
return result;
}
/// <summary>
/// 序列码列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetList")]
public async Task<ResultPagedList<SerialNumberInfoResponse>> GetPagedList([FromBody] SerialNumberQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<SerialNumberInfoResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
if (!string.IsNullOrEmpty(dto.NumberCodeBegin)
&& (!Regex.Match(dto.NumberCodeBegin, "^[0-9]*$").Success || dto.NumberCodeBegin.Length < 12))
return ResultPagedList<SerialNumberInfoResponse>.ReFailure(ResultCodes.NumberCode_Invalid_Error);
if (!string.IsNullOrEmpty(dto.NumberCodeEnd)
&& (!Regex.Match(dto.NumberCodeEnd, "^[0-9]*$").Success || dto.NumberCodeEnd.Length < 12))
return ResultPagedList<SerialNumberInfoResponse>.ReFailure(ResultCodes.NumberCode_Invalid_Error);
var (list, count) = await _serialNumbersRepositories.GetListAsync(dto, loginInfo);
var result = ResultPagedList<SerialNumberInfoResponse>.ReSuccess(list, count);
return result;
}
/// <summary>
/// 条码生成记录页面-下载条码
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("ExportAll")]
public Task<Result<string>> ExportAll(OperateRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Task.FromResult(Result<string>.ReFailure(ResultCodes.Token_Invalid_Error));
var entityList = _sGenerateRecordRepositories.GetEntityList(dto.Ids, "").GetAwaiter().GetResult();
if (entityList.Count < 0) return Task.FromResult(Result<string>.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<string>.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<SerialNumbersExportReponse, SerialNumbersExportRequest>(request, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumbers, orgCode);
});
return Task.FromResult(Result<string>.ReSuccess(res));
}
/// <summary>
/// 序列码页面-条码下载
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Export")]
public Task<Result<string>> Export([FromBody] SerialNumberQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Task.FromResult(Result<string>.ReFailure(ResultCodes.Token_Invalid_Error));
var entity = _sGenerateRecordRepositories.GetEntity(dto.GenerateRecordId).GetAwaiter().GetResult();
if (entity == null) return Task.FromResult(Result<string>.ReFailure(ResultCodes.NoDateError));
string orgCode = entity.OrgCode;
//反写下载数据
Result resSuccess;
if (dto.SerialNumbers.Count() > 0)
{
resSuccess = this.DownLoad(new OperateSerialNumberRequest()
{
GenerateRecordIds = new List<int>() { dto.GenerateRecordId },
IsAll = false,
SerialNumbers = dto.SerialNumbers
}).GetAwaiter().GetResult();
}
else
{
resSuccess = this.DownLoad(new OperateSerialNumberRequest()
{
GenerateRecordIds = new List<int>() { dto.GenerateRecordId },
IsAll = true
}).GetAwaiter().GetResult();
}
if (!resSuccess.IsSuccess) return Task.FromResult(Result<string>.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<SerialNumberInfoResponse2, SerialNumberQueryRequest>(dto, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumberInfo, orgCode);
});
}
else
{
Task.Run(async () =>
{
await _exportExcelService.ExportList<SerialNumberInfoResponse, SerialNumberQueryRequest>(dto, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumberInfo, orgCode);
});
}
return Task.FromResult(Result<string>.ReSuccess(res));
}
/// <summary>
/// 生成序列号
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Generate")]
public async Task<Result> 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);
}
/// <summary>
/// 打印
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Print")]
public async Task<Result> 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);
}
/// <summary>
/// 下载(一般后端内部调用)
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("DownLoad")]
public async Task<Result> 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);
}
/// <summary>
/// 下载(一般后端内部调用)
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("UpdateSn")]
public async Task<Result> 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);
}
/// <summary>
/// 转换Sn,由单件装转成两件装
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("TransferSn")]
public async Task<Result> 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);
}
/// <summary>
/// 获取序列号信息
/// </summary>
/// <param name="boxId">箱Id</param>
/// <returns></returns>
[HttpPost]
[Route("GetByBoxId")]
public async Task<ResultPagedList<SerialNumbersResponse>> GetByBoxId(SerialNumberByBoxIdQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<SerialNumbersResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
if (dto.BoxId == 0)
return ResultPagedList<SerialNumbersResponse>.ReFailure(ResultCodes.NoDateError);
var (list, count) = await _serialNumbersRepositories.GetEntityListByBoxId(dto);
var result = ResultPagedList<SerialNumbersResponse>.ReSuccess(list, count);
return result;
}
///// <summary>
///// 获取序列号信息
///// </summary>
///// <param name="serialNumber">序列号</param>
///// <param name="orgCode">组织或供应商编码</param>
///// <returns></returns>
//[HttpGet]
//[Route("Get")]
//public async Task<ResultList<SerialNumbersResponse>> Get([FromQuery] string serialNumber, [FromQuery] string orgCode)
//{
// var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
// if (loginInfo == null || loginInfo.UserInfo == null)
// return ResultList<SerialNumbersResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
// if (string.IsNullOrEmpty(orgCode))
// return ResultList<SerialNumbersResponse>.ReFailure(ResultCodes.NoOrgError);
// var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
// // var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
// if (res == null) return ResultList<SerialNumbersResponse>.ReFailure(ResultCodes.SerialNumberNoData);
// // return ResultList<SerialNumbersResponse>.ReSuccess(res);
// return ResultList<SerialNumbersResponse>.ReSuccess(res.ToList());
//}
/// <summary>
/// 获取序列号信息
/// </summary>
/// <param name="serialNumber">序列号</param>
/// <param name="orgCode">组织或供应商编码</param>
/// <returns></returns>
[HttpGet]
[Route("Get")]
public async Task<Result<SerialNumbersResponse>> Get([FromQuery] string serialNumber, [FromQuery] string orgCode)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result<SerialNumbersResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
if (string.IsNullOrEmpty(orgCode))
return Result<SerialNumbersResponse>.ReFailure(ResultCodes.NoOrgError);
var res = await _serialNumbersRepositories.GetEntity(serialNumber, orgCode, loginInfo);
// var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
if (res == null) return Result<SerialNumbersResponse>.ReFailure(ResultCodes.SerialNumberNoData);
// return ResultList<SerialNumbersResponse>.ReSuccess(res);
return Result<SerialNumbersResponse>.ReSuccess(res);
}
/// <summary>
/// 修改序列码物料
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("UpdateMaterial")]
public async Task<Result> 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);
}
}
}