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); } } }