352 lines
16 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|