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