diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 1959d1d6..b697c442 100644 Binary files a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 and b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 differ diff --git a/src/WMS.Web.Api/Controllers/BarCodeController.cs b/src/WMS.Web.Api/Controllers/BarCodeController.cs new file mode 100644 index 00000000..9db6976a --- /dev/null +++ b/src/WMS.Web.Api/Controllers/BarCodeController.cs @@ -0,0 +1,92 @@ +using AutoMapper; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.IService; +using WMS.Web.Domain.Options; +using System.Threading.Tasks; +using System; +using WMS.Web.Core.Dto.OutStock; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Values; +using Newtonsoft.Json; +using WMS.Web.Core.Dto; +using System.Linq; +using System.Collections.Generic; +using WMS.Web.Repositories; +using Microsoft.EntityFrameworkCore.Storage; + +namespace WMS.Web.Api.Controllers +{ + /// + /// 条码系统重置箱信息 + /// + [Route("api/[controller]")] + [ApiController] + public class BarCodeController : ControllerBase + { + private readonly IMapper _mapper; + private readonly ILoginService _loginService; + private readonly IBoxRepositories _boxRepositories; + private readonly IInStockTaskBoxRepositories _inStockTaskBoxRepositories; + private readonly ISerialNumbersRepositories _serialNumbersRepositories; + private IBasicsRepositories _transactionRepositories; + private readonly ILogger _logger; + public BarCodeController(IMapper mapper, ILoginService loginService, + IBoxRepositories boxRepositories, IInStockTaskBoxRepositories inStockTaskBoxRepositories, + ILogger logger, ISerialNumbersRepositories serialNumbersRepositorie, + IBasicsRepositories transactionRepositories) + { + _mapper = mapper; + _loginService = loginService; + _boxRepositories = boxRepositories; + _inStockTaskBoxRepositories = inStockTaskBoxRepositories; + _serialNumbersRepositories = serialNumbersRepositorie; + _transactionRepositories = transactionRepositories; + _logger = logger; + } + + /// + /// 导出 + /// + /// + /// + [HttpPost] + [Route("Restart")] + public async Task>> Restart([FromBody] OperateStrRequest dto) + { + _logger.LogInformation($"重置箱信息:{JsonConvert.SerializeObject(dto)}"); + var boxs = await _boxRepositories.GetEntityListByNos(dto.Ids); + var boxIds = boxs.Select(s => s.Id).ToList(); + //查出已经入库的箱子 + var inStockList = await _inStockTaskBoxRepositories.GetListBy(boxIds); + //已经入库的箱子 + var inBoxBillNo = inStockList.Select(s => s.BoxBillNo).ToList(); + //找到需要删除的箱子 + var deleteBoxIds = boxs.Where(w => !inBoxBillNo.Contains(w.BoxBillNo)).Select(s => s.Id).ToList(); + if (deleteBoxIds.Count() == 0) return Result>.ReSuccess(inBoxBillNo); + var deleteBoxBillNos = boxs.Where(w => deleteBoxIds.Contains(w.Id)).Select(s => s.BoxBillNo).ToList(); + _logger.LogInformation($"重置的箱号:{JsonConvert.SerializeObject(deleteBoxBillNos)}"); + //执行数据库 + IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); + bool res_Rollback = false; + //删除序列号 + var isSuccess = await _serialNumbersRepositories.DeleteEntityList(deleteBoxIds, false); + if (!isSuccess) res_Rollback = true; + + if (!res_Rollback) + { + //删除箱信息 + isSuccess = await _boxRepositories.DeleteEntityList(deleteBoxIds, false); + if (!isSuccess) res_Rollback = true; + } + isSuccess = _transactionRepositories.CommitTransaction(res_Rollback, _transaction); + if (!isSuccess) return Result>.ReFailure(ResultCodes.DateWriteError); + + return Result>.ReSuccess(inBoxBillNo); + } + } +} diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 56d984d6..b3df29a9 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -37,6 +37,18 @@ + + + 条码系统重置箱信息 + + + + + 导出 + + + + 箱唛-接口 diff --git a/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs index 1dfa9cc2..f654243f 100644 --- a/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs @@ -31,5 +31,7 @@ namespace WMS.Web.Domain.Infrastructure Task> GetEntityList(List ids); Task> GetEntityListByNos(List billNos); + //批量删除 + Task DeleteEntityList(List boxIds, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs index e6de0271..6362769a 100644 --- a/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs @@ -32,5 +32,7 @@ namespace WMS.Web.Domain.Infrastructure Task> GetEntityListByBoxIds(List boxIds); /// 修改实体集合 Task EditEntityList(List entitys, bool isTransaction = true); + //批量删除 + Task DeleteEntityList(List boxIds, bool isTransaction = true); } } diff --git a/src/WMS.Web.Repositories/BoxRepositories.cs b/src/WMS.Web.Repositories/BoxRepositories.cs index 7f1efa92..2d81a8d4 100644 --- a/src/WMS.Web.Repositories/BoxRepositories.cs +++ b/src/WMS.Web.Repositories/BoxRepositories.cs @@ -1,6 +1,7 @@ using AutoMapper; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; +using NPOI.OpenXmlFormats.Spreadsheet; using System; using System.Collections.Generic; using System.Linq; @@ -177,5 +178,36 @@ namespace WMS.Web.Repositories return res.Clone(); } + /// + /// 批量删除 + /// + /// + /// + /// + /// + public async Task DeleteEntityList(List boxIds, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + var res = await _context.Box + .Include(s => s.Details) + .Where(f => boxIds.Contains(f.Id)).ToListAsync(); + + _context.Box.RemoveRange(res); + await _context.SaveChangesAsync(); + if (_transaction != null) + _transaction.Commit(); + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + return true; + } } } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs b/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs index b3bb52e9..9f26812d 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs @@ -47,7 +47,7 @@ namespace WMS.Web.Repositories.DependencyInjection string authorization = context.Request.Headers["Authorization"]; string path = context.Request.Path.Value.ToLower(); string[] pathlist = path.Split('/'); - bool isLogin = pathlist.Where(x => x == "login" || x.ToLower() == "heart" || x.ToLower() == "test" || x.ToLower() == "serialnumber").Any(); + bool isLogin = pathlist.Where(x => x == "login" || x.ToLower() == "heart" || x.ToLower() == "test" || x.ToLower() == "serialnumber" || x.ToLower() == "barcode").Any(); if (isLogin) { context.Response.StatusCode = 200; @@ -121,14 +121,14 @@ namespace WMS.Web.Repositories.DependencyInjection { jiange_timespan = now - logininfo.TokenInfo.Expired; var info = _redisClientService.GetStringKey($"wms_login_{token}"); - + if (info != null) { //超过16个小时的,就要移除缓存 if (jiange_timespan.TotalHours >= 16) _redisClientService.RemoveStringKey($"wms_login_{token}"); //超过1个小时的,就要刷新token - else if (!string.IsNullOrEmpty(logininfo.TokenInfo.Token) && jiange_timespan.TotalHours>=1) + else if (!string.IsNullOrEmpty(logininfo.TokenInfo.Token) && jiange_timespan.TotalHours >= 1) this.RefreshToken(logininfo.TokenInfo.Token, logininfo.TokenInfo.RefreshToken, loginService); } @@ -140,7 +140,7 @@ namespace WMS.Web.Repositories.DependencyInjection // if (!string.IsNullOrEmpty(logininfo.TokenInfo.Token) && jiange_timespan.TotalMinutes<=10) // this.RefreshToken(logininfo.TokenInfo.Token, logininfo.TokenInfo.RefreshToken, loginService); //} - + //3.验证检查是否有黑名单的token缓存 string blacktoken = _redisClientService.GetStringKey($"wms_black_token_{logininfo.UserInfo.UcId}"); if (string.IsNullOrEmpty(blacktoken)) @@ -157,7 +157,7 @@ namespace WMS.Web.Repositories.DependencyInjection await context.Response.WriteAsync(result); } } - + } } diff --git a/src/WMS.Web.Repositories/SerialNumbersRepositories.cs b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs index 31c0bbb7..40192e5d 100644 --- a/src/WMS.Web.Repositories/SerialNumbersRepositories.cs +++ b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs @@ -379,5 +379,34 @@ namespace WMS.Web.Repositories return _mapper.Map>(res.Clone()); } + /// + /// 根据箱id批量删除 + /// + /// + /// + /// + public async Task DeleteEntityList(List boxIds, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + var res = await _context.SerialNumbers + .Where(f => boxIds.Contains(f.BoxId)).ToListAsync(); + + _context.SerialNumbers.RemoveRange(res); + await _context.SaveChangesAsync(); + if (_transaction != null) + _transaction.Commit(); + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + return true; + } } }