diff --git a/src/WMS.Web.Api/Controllers/BackRecordController.cs b/src/WMS.Web.Api/Controllers/BackRecordController.cs new file mode 100644 index 00000000..74c3e48d --- /dev/null +++ b/src/WMS.Web.Api/Controllers/BackRecordController.cs @@ -0,0 +1,81 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WMS.Web.Core.Dto; +using WMS.Web.Core.Dto.BackRecord; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.IService; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Api.Controllers +{ + /// + /// 出入库回退上下架:接口 + /// + [Route("api/[controller]")] + [ApiController] + public class BackRecordController : ControllerBase + { + private readonly ILoginService _loginService; + private readonly IBackRecordService _backRecordService; + private readonly IBackRecordRepositories _backRecordRepositories; + public BackRecordController(ILoginService loginService, IBackRecordRepositories backRecordRepositories, IBackRecordService backRecordService) + { + this._loginService = loginService; + this._backRecordService = backRecordService; + this._backRecordRepositories = backRecordRepositories; + } + + /// + /// 列表 + /// + /// + /// + [HttpPost] + [Route("GetList")] + public async Task> GetPagedList([FromBody] BackRecordQueryRequest dto) + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null || loginInfo.UserInfo == null) + return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error); + var result = await _backRecordRepositories.GetPagedList(dto); + return result; + } + + /// + /// 出库回退上架 + /// + /// + /// + [HttpPost] + [Route("OnShelf")] + public async Task OnShelf([FromBody] SaveBackRecordRequest 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 _backRecordService.BackShelf(dto, loginInfo); + } + + /// + /// 入库回退下架 + /// + /// + /// + [HttpPost] + [Route("OffShelf")] + public async Task OffShelf([FromBody] SaveBackRecordRequest 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 _backRecordService.BackShelf(dto, loginInfo); + } + + } +} diff --git a/src/WMS.Web.Api/Controllers/SysConfigController.cs b/src/WMS.Web.Api/Controllers/SysConfigController.cs index def21d15..78c23a86 100644 --- a/src/WMS.Web.Api/Controllers/SysConfigController.cs +++ b/src/WMS.Web.Api/Controllers/SysConfigController.cs @@ -58,6 +58,10 @@ namespace WMS.Web.Api.Controllers { response.InstockStatus.Add(enumv.ToString(), enumv.GetRemark()); } + foreach (BackRecordType enumv in Enum.GetValues(typeof(BackRecordType))) + { + response.BackRecordType.Add(enumv.ToString(), enumv.GetRemark()); + } //2 //1 return Task.FromResult(Result.ReSuccess(response)); diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index b513b2b9..ffcabe7e 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -4,6 +4,32 @@ WMS.Web.Api + + + 出入库回退上下架:接口 + + + + + 列表 + + + + + + + 出库回退上架 + + + + + + + 入库回退下架 + + + + 改箱 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index e50d7003..0b61e63d 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -180,6 +180,51 @@ 序列号集 + + + 保存出入库回退上下架明细:请求对象 + + + + + 所属箱号ID + + + + + 物料ID + + + + + 数量 + + + + + 仓位ID + + + + + 序列号集 + + + + + 保存出入库回退上下架:请求对象 + + + + + 类型:1为入库回退下架,2为出库回退上架 + + + + + 明细 + + 改箱列表请求 @@ -350,6 +395,11 @@ 入库状态 + + + 类型:1为入库回退下架,2为出库回退上架 + + ERP:单据查询-dto diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 0bb5024b..a09e73bf 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -14,11 +14,6 @@ ID - - - 所属箱号ID - - 类型:1为入库回退下架,2为出库回退上架 @@ -39,6 +34,12 @@ 明细 + + + 创建 + + + wms出入库回退记录表 @@ -54,6 +55,11 @@ 回退记录表ID + + + 所属箱号ID + + 物料ID @@ -997,6 +1003,14 @@ + + + 新增 + + + + + 基础数据 @@ -1132,6 +1146,19 @@ + + + 出入库回退上下架:服务接口 + + + + + 回退上下架 + + + + + 改箱 移箱服务 @@ -1663,7 +1690,7 @@ - erp入库单-获取定时任务 + erp入库任务单-获取定时任务 @@ -1673,6 +1700,19 @@ + + + 出入库回退上下架:服务接口 + + + + + 回退上下架 + + + + + 改箱 移箱服务 diff --git a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs new file mode 100644 index 00000000..e99d4fed --- /dev/null +++ b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Text; + +namespace WMS.Web.Core.Dto.BackRecord +{ + /// + /// 保存出入库回退上下架明细:请求对象 + /// + public class SaveBackRecordDetailsRequest + { + /// + /// 所属箱号ID + /// + [Required(ErrorMessage = "箱号不能为空")] + public int BoxId { get; set; } + /// + /// 物料ID + /// + [Required(ErrorMessage = "物料不能为空")] + public int MaterialId { get; set; } + /// + /// 数量 + /// + [Required(ErrorMessage = "数量不能为空")] + public decimal Qty { get; set; } + /// + /// 仓位ID + /// + [Required(ErrorMessage = "仓位不能为空")] + public int SubStockId { get; set; } + + /// + /// 序列号集 + /// + [Required(ErrorMessage = "序列号不能为空")] + public string SerialNumbers { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs new file mode 100644 index 00000000..29113284 --- /dev/null +++ b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Text; + +namespace WMS.Web.Core.Dto.BackRecord +{ + /// + /// 保存出入库回退上下架:请求对象 + /// + public class SaveBackRecordRequest + { + /// + /// 类型:1为入库回退下架,2为出库回退上架 + /// + [Required(ErrorMessage = "类型不能为空")] + public int Type { get; set; } + + /// + /// 明细 + /// + public List Details { get; set; } = new List(); + } +} diff --git a/src/WMS.Web.Core/Dto/EnumStatusResponse.cs b/src/WMS.Web.Core/Dto/EnumStatusResponse.cs index 58a968d5..2b4c868f 100644 --- a/src/WMS.Web.Core/Dto/EnumStatusResponse.cs +++ b/src/WMS.Web.Core/Dto/EnumStatusResponse.cs @@ -30,6 +30,10 @@ namespace WMS.Web.Core.Dto /// 入库状态 /// public Dictionary InstockStatus { get; set; } = new Dictionary(); + /// + /// 类型:1为入库回退下架,2为出库回退上架 + /// + public Dictionary BackRecordType { get; set; } = new Dictionary(); diff --git a/src/WMS.Web.Domain/Entitys/BackRecord.cs b/src/WMS.Web.Domain/Entitys/BackRecord.cs index a8c4065f..45fd19de 100644 --- a/src/WMS.Web.Domain/Entitys/BackRecord.cs +++ b/src/WMS.Web.Domain/Entitys/BackRecord.cs @@ -16,11 +16,7 @@ namespace WMS.Web.Domain.Entitys /// /// ID /// - public int Id { get; set; } - /// - /// 所属箱号ID - /// - public int BoxId { get; set; } + public int Id { get; set; } /// /// 类型:1为入库回退下架,2为出库回退上架 /// @@ -39,5 +35,15 @@ namespace WMS.Web.Domain.Entitys /// [NotMapped] public List Details = new List(); + + /// + /// 创建 + /// + /// + public void Create(int creatorId) + { + this.CreatorId = creatorId; + this.CreateTime = DateTime.Now; + } } } diff --git a/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs b/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs index 9062e885..558299ae 100644 --- a/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs +++ b/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs @@ -21,6 +21,10 @@ namespace WMS.Web.Domain.Entitys /// public int Fid { get; set; } /// + /// 所属箱号ID + /// + public int BoxId { get; set; } + /// /// 物料ID /// public int MaterialId { get; set; } diff --git a/src/WMS.Web.Domain/IService/IBackRecordService.cs b/src/WMS.Web.Domain/IService/IBackRecordService.cs new file mode 100644 index 00000000..a5767bb7 --- /dev/null +++ b/src/WMS.Web.Domain/IService/IBackRecordService.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.BackRecord; +using WMS.Web.Core.Dto.Login; +using WMS.Web.Core.Internal.Results; + +namespace WMS.Web.Domain.IService +{ + /// + /// 出入库回退上下架:服务接口 + /// + public interface IBackRecordService + { + /// + /// 回退上下架 + /// + /// + /// + /// + Task BackShelf(SaveBackRecordRequest dto, LoginInDto loginInfo); + } +} diff --git a/src/WMS.Web.Domain/Infrastructure/IBackRecordRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IBackRecordRepositories.cs index 67067323..52613288 100644 --- a/src/WMS.Web.Domain/Infrastructure/IBackRecordRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IBackRecordRepositories.cs @@ -4,6 +4,7 @@ using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto; using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Entitys; namespace WMS.Web.Domain.Infrastructure { @@ -18,5 +19,13 @@ namespace WMS.Web.Domain.Infrastructure /// /// Task> GetPagedList(BackRecordQueryRequest dto); + + /// + /// 新增 + /// + /// + /// + /// + Task Add(BackRecord entity, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/Mappers/BackRecordMapper.cs b/src/WMS.Web.Domain/Mappers/BackRecordMapper.cs new file mode 100644 index 00000000..7e96ee98 --- /dev/null +++ b/src/WMS.Web.Domain/Mappers/BackRecordMapper.cs @@ -0,0 +1,17 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Core.Dto.BackRecord; +using WMS.Web.Domain.Entitys; + +namespace WMS.Web.Domain.Mappers +{ + public class BackRecordMapper : Profile + { + public BackRecordMapper() + { + CreateMap().ReverseMap(); + } + } +} diff --git a/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs b/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs index d3bcc4f4..fb82291b 100644 --- a/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs +++ b/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs @@ -13,7 +13,7 @@ using WMS.Web.Domain.Options; namespace WMS.Web.Domain.QuartzJob { /// - /// erp入库单-获取定时任务 + /// erp入库任务单-获取定时任务 /// public class InStockOrderQuartzJob : IJob { diff --git a/src/WMS.Web.Domain/Services/BackRecordService.cs b/src/WMS.Web.Domain/Services/BackRecordService.cs new file mode 100644 index 00000000..3c8321e7 --- /dev/null +++ b/src/WMS.Web.Domain/Services/BackRecordService.cs @@ -0,0 +1,66 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore.Storage; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.BackRecord; +using WMS.Web.Core.Dto.Login; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Entitys; +using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.IService; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Domain.Services +{ + /// + /// 出入库回退上下架:服务接口 + /// + public class BackRecordService: IBackRecordService + { + private readonly IMapper _mapper; + private readonly ILoginService _loginService; + public readonly ITransactionRepositories _transactionRepositories; + private readonly IBackRecordRepositories _backRecordRepositories; + public BackRecordService(IMapper mapper, ILoginService loginService, + ITransactionRepositories transactionRepositories, + IBackRecordRepositories backRecordRepositories) + { + _mapper = mapper; + _loginService = loginService; + _transactionRepositories = transactionRepositories; + _backRecordRepositories = backRecordRepositories; + } + + /// + /// 回退上下架 + /// + /// + /// + /// + public async Task BackShelf(SaveBackRecordRequest dto, LoginInDto loginInfo) + { + IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); + bool isRollback = false; + bool isTransaction = false; + + var entity = new BackRecord(); + entity.Type = (BackRecordType)dto.Type; + entity.Details = _mapper.Map>(dto.Details); + entity.Create(loginInfo.UserInfo.StaffId); + entity = await _backRecordRepositories.Add(entity, isTransaction); + + //提交事务 + var isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction); + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + + if (entity != null) + return Result.ReSuccess(); + else + return Result.ReFailure(ResultCodes.DateWriteError); + } + } +} diff --git a/src/WMS.Web.Repositories/BackRecordRepositories.cs b/src/WMS.Web.Repositories/BackRecordRepositories.cs index 4fd40e0a..e5be5710 100644 --- a/src/WMS.Web.Repositories/BackRecordRepositories.cs +++ b/src/WMS.Web.Repositories/BackRecordRepositories.cs @@ -1,5 +1,6 @@ using AutoMapper; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; using System; using System.Collections.Generic; using System.Linq; @@ -8,6 +9,7 @@ using System.Threading.Tasks; using WMS.Web.Core; using WMS.Web.Core.Dto; using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService.Public; using WMS.Web.Repositories.Configuration; @@ -88,5 +90,33 @@ namespace WMS.Web.Repositories response.Data = list; return response; } + + /// + /// 新增 + /// + /// + /// + /// + public async Task Add(BackRecord entity, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + await _context.BackRecord.AddAsync(entity); + await _context.SaveChangesAsync(); + if (_transaction != null) + _transaction.Commit(); + return entity; + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return null; + } + + } } } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index bb5e8c89..6b160fa8 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -233,6 +233,8 @@ namespace WMS.Web.Repositories.DependencyInjection Services.AddTransient(); Services.AddTransient(); Services.AddTransient(); + Services.AddTransient(); + Services.AddTransient(); Services.AddTransient();