diff --git a/src/WMS.Web.Api/Controllers/InStockController.cs b/src/WMS.Web.Api/Controllers/InStockController.cs
index e29572ef..d2cad974 100644
--- a/src/WMS.Web.Api/Controllers/InStockController.cs
+++ b/src/WMS.Web.Api/Controllers/InStockController.cs
@@ -5,8 +5,10 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WMS.Web.Core.Dto;
+using WMS.Web.Core.Dto.InStock;
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;
@@ -20,10 +22,12 @@ namespace WMS.Web.Api.Controllers
public class InStockController : ControllerBase
{
private readonly ILoginService _loginService;
+ private readonly IInStockService _inStockService;
private readonly IInStockRepositories _inStockRepositories;
- public InStockController(ILoginService loginService, IInStockRepositories inStockRepositories)
+ public InStockController(ILoginService loginService, IInStockRepositories inStockRepositories, IInStockService inStockService)
{
this._loginService = loginService;
+ this._inStockService = inStockService;
this._inStockRepositories = inStockRepositories;
}
@@ -42,5 +46,37 @@ namespace WMS.Web.Api.Controllers
var result= await _inStockRepositories.GetPagedList(dto);
return result;
}
+
+ ///
+ /// 保存
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Save")]
+ public async Task Save(List 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 _inStockService.Save(dto, loginInfo);
+ }
+
+ ///
+ /// 同步金蝶
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Sync")]
+ public async Task Sync(OperateRequest 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 _inStockService.Sync(dto);
+ }
}
}
diff --git a/src/WMS.Web.Api/Controllers/SysConfigController.cs b/src/WMS.Web.Api/Controllers/SysConfigController.cs
index 48c80262..5fd87e7d 100644
--- a/src/WMS.Web.Api/Controllers/SysConfigController.cs
+++ b/src/WMS.Web.Api/Controllers/SysConfigController.cs
@@ -43,6 +43,10 @@ namespace WMS.Web.Api.Controllers
{
response.TakeStockType.Add(enumv.ToString(), enumv.GetRemark());
}
+ foreach (InstockType enumv in Enum.GetValues(typeof(InstockType)))
+ {
+ response.InstockType.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 aaec77b2..17126da2 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml
@@ -35,6 +35,20 @@
+
+
+ 保存
+
+
+
+
+
+
+ 同步金蝶
+
+
+
+
入库任务单-接口
diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
index e73963dc..ea66dc7e 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
@@ -475,6 +475,51 @@
同步成功或者失败
+
+
+ 保存入库单-请求对象
+
+
+
+
+ 入库类型
+
+
+
+
+ 来源单号
+
+
+
+
+ 供应商
+
+
+
+
+ 组织
+
+
+
+
+ 物料Id
+
+
+
+
+ 仓库ID
+
+
+
+
+ 仓位ID
+
+
+
+
+ 入库数量
+
+
授权token -- 给前端用的验证token
@@ -980,6 +1025,11 @@
单据Id
+
+
+ 明细Id
+
+
单据编号
@@ -1070,6 +1120,11 @@
出库单任务
+
+
+ 刷新 明细Id
+
+
单据类型(出库单下拉列表)
diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index ebd1347f..b7d0800d 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -300,6 +300,17 @@
明细
+
+
+ 创建
+
+
+
+
+
+ 生成单据号
+
+
wms入库单明细
@@ -964,6 +975,14 @@
+
+
+ 添加
+
+
+
+
+
入库任务-仓储接口
@@ -1045,6 +1064,26 @@
改箱 移箱服务
+
+
+ 入库单服务接口
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+ 同步金蝶
+
+
+
+
出库服务
@@ -1538,6 +1577,26 @@
+
+
+ 入库单服务
+
+
+
+
+ 出库单
+
+
+
+
+
+
+
+ 同步金蝶
+
+
+
+
出库服务
diff --git a/src/WMS.Web.Core/Dto/EnumStatusResponse.cs b/src/WMS.Web.Core/Dto/EnumStatusResponse.cs
index 0a0711f6..d5e4b112 100644
--- a/src/WMS.Web.Core/Dto/EnumStatusResponse.cs
+++ b/src/WMS.Web.Core/Dto/EnumStatusResponse.cs
@@ -22,6 +22,12 @@ namespace WMS.Web.Core.Dto
/// 盘点结果类型
///
public Dictionary TakeStockType { get; set; } = new Dictionary();
+ ///
+ /// 入库单类型
+ ///
+ public Dictionary InstockType { get; set; } = new Dictionary();
+
+
}
}
diff --git a/src/WMS.Web.Core/Dto/InStock/SaveInStockRequest.cs b/src/WMS.Web.Core/Dto/InStock/SaveInStockRequest.cs
new file mode 100644
index 00000000..35c15bc2
--- /dev/null
+++ b/src/WMS.Web.Core/Dto/InStock/SaveInStockRequest.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace WMS.Web.Core.Dto.InStock
+{
+ ///
+ /// 保存入库单-请求对象
+ ///
+ public class SaveInStockRequest
+ {
+
+ ///
+ /// 入库类型
+ ///
+ [Required(ErrorMessage = "入库类型不能为空")]
+ public int Type { get; set; }
+
+ ///
+ /// 来源单号
+ ///
+ [Required(ErrorMessage = "来源单号不能为空")]
+ public string SourceBillNo { get; set; }
+
+ ///
+ /// 供应商
+ ///
+ [Required(ErrorMessage = "供应商不能为空")]
+ public int SupplierId { get; set; }
+ ///
+ /// 组织
+ ///
+ [Required(ErrorMessage = "组织不能为空")]
+ public int OrgId { get; set; }
+
+ ///
+ /// 物料Id
+ ///
+ [Required(ErrorMessage = "物料不能为空")]
+ public int MaterialId { get; set; }
+
+ ///
+ /// 仓库ID
+ ///
+ [Required(ErrorMessage = "仓库不能为空")]
+ public int StockId { get; set; }
+ ///
+ /// 仓位ID
+ ///
+ [Required(ErrorMessage = " 仓位不能为空")]
+ public int SubStockId { get; set; }
+
+ ///
+ /// 入库数量
+ ///
+ [Required(ErrorMessage = "入库数量不能为空")]
+ public decimal Qty { get; set; }
+ }
+}
diff --git a/src/WMS.Web.Domain/Entitys/InStock.cs b/src/WMS.Web.Domain/Entitys/InStock.cs
index 6ad4c909..a9ec4518 100644
--- a/src/WMS.Web.Domain/Entitys/InStock.cs
+++ b/src/WMS.Web.Domain/Entitys/InStock.cs
@@ -43,5 +43,38 @@ namespace WMS.Web.Domain.Entitys
///
[NotMapped]
public List Details = new List();
+
+ ///
+ /// 创建
+ ///
+ ///
+ public void Create(int creatorId)
+ {
+ this.CreatorId = creatorId;
+ this.CreateTime = DateTime.Now;
+ }
+
+ ///
+ /// 生成单据号
+ ///
+ public void GenerateNo()
+ {
+ //用户手动输入了 就不自动生成了
+ if (!string.IsNullOrEmpty(this.BillNo)) return;
+
+ if (this.Id.ToString().Length >= 8)
+ {
+ this.BillNo = "RK" + this.Id.ToString();
+ return;
+ }
+
+ string idStr = this.Id.ToString();
+ while (true)
+ {
+ idStr = "0" + idStr;
+ if (idStr.Length >= 8) break;
+ }
+ this.BillNo = "RK" + idStr;
+ }
}
}
diff --git a/src/WMS.Web.Domain/IService/IInStockService.cs b/src/WMS.Web.Domain/IService/IInStockService.cs
new file mode 100644
index 00000000..5f7d1caf
--- /dev/null
+++ b/src/WMS.Web.Domain/IService/IInStockService.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using WMS.Web.Core.Dto;
+using WMS.Web.Core.Dto.InStock;
+using WMS.Web.Core.Dto.Login;
+using WMS.Web.Core.Internal.Results;
+
+namespace WMS.Web.Domain.IService
+{
+ ///
+ /// 入库单服务接口
+ ///
+ public interface IInStockService
+ {
+ ///
+ /// 保存
+ ///
+ ///
+ ///
+ ///
+ Task Save(List dto, LoginInDto loginInfo);
+
+ ///
+ /// 同步金蝶
+ ///
+ ///
+ ///
+ Task Sync(OperateRequest dto);
+ }
+}
diff --git a/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs
index 885a7d4a..355383c2 100644
--- a/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs
+++ b/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.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(InStockQueryRequest dto);
+
+ ///
+ /// 添加
+ ///
+ ///
+ ///
+ ///
+ Task Add(InStock entity, bool isTransaction = true);
}
}
diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs
new file mode 100644
index 00000000..dee56fd8
--- /dev/null
+++ b/src/WMS.Web.Domain/Services/InStockService.cs
@@ -0,0 +1,82 @@
+using AutoMapper;
+using Microsoft.EntityFrameworkCore.Storage;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using WMS.Web.Core.Dto;
+using WMS.Web.Core.Dto.InStock;
+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 InStockService: IInStockService
+ {
+ private readonly IMapper _mapper;
+ private readonly ILoginService _loginService;
+ public readonly ITransactionRepositories _transactionRepositories;
+ private readonly IInStockRepositories _inStockRepositories;
+ private readonly IInStockTaskRepositories _inStockTaskRepositories;
+ public InStockService(IMapper mapper, ILoginService loginService,
+ ITransactionRepositories transactionRepositories,
+ IInStockRepositories inStockRepositories, IInStockTaskRepositories inStockTaskRepositories)
+ {
+ _mapper = mapper;
+ _loginService = loginService;
+ _transactionRepositories = transactionRepositories;
+ _inStockRepositories = inStockRepositories;
+ _inStockTaskRepositories = inStockTaskRepositories;
+ }
+
+ ///
+ /// 出库单
+ ///
+ ///
+ ///
+ ///
+ public async Task Save(List dto, LoginInDto loginInfo)
+ {
+ var entity = new InStock();
+ entity.Details = _mapper.Map>(dto);
+ entity.Create(loginInfo.UserInfo.StaffId);
+
+ //需要填写序列号
+ //需要修改库存
+ //需要同步金蝶
+
+ IDbContextTransaction _transaction = _transactionRepositories.GetTransaction();
+ bool isRollback = false;
+ bool isSuccess = true;
+ entity = await _inStockRepositories.Add(entity, true);
+ if (entity == null) isRollback = true;
+
+ //提交事务
+ isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction);
+ if (!isSuccess)
+ return Result.ReFailure(ResultCodes.DateWriteError);
+
+ return Result.ReSuccess();
+ }
+
+ ///
+ /// 同步金蝶
+ ///
+ ///
+ ///
+ public Task Sync(OperateRequest dto)
+ {
+ //调用同步服务方法
+
+ return Task.FromResult(Result.ReSuccess());
+ }
+ }
+}
diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs
index 6aa71384..bb5e8c89 100644
--- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs
+++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs
@@ -237,7 +237,8 @@ namespace WMS.Web.Repositories.DependencyInjection
Services.AddTransient();
Services.AddTransient();
Services.AddTransient();
-
+ Services.AddTransient();
+
}
}
}
diff --git a/src/WMS.Web.Repositories/InStockRepositories.cs b/src/WMS.Web.Repositories/InStockRepositories.cs
index af3a5970..2a60da38 100644
--- a/src/WMS.Web.Repositories/InStockRepositories.cs
+++ b/src/WMS.Web.Repositories/InStockRepositories.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.Domain.Values.Single;
@@ -77,5 +79,40 @@ namespace WMS.Web.Repositories
response.Data = list;
return response;
}
+
+ ///
+ /// 新增
+ ///
+ ///
+ ///
+ ///
+ public async Task Add(InStock entity, bool isTransaction = true)
+ {
+ IDbContextTransaction _transaction = null;
+ if (isTransaction)
+ _transaction = _context.Database.BeginTransaction();
+ try
+ {
+ await _context.Instock.AddAsync(entity);
+ await _context.SaveChangesAsync();
+
+ if (string.IsNullOrEmpty(entity.BillNo))
+ {
+ entity.GenerateNo();
+ await _context.SaveChangesAsync();
+ }
+
+ if (_transaction != null)
+ _transaction.Commit();
+ return entity;
+ }
+ catch (Exception ex)
+ {
+ if (_transaction != null)
+ _transaction.Rollback();
+ return null;
+ }
+
+ }
}
}