diff --git a/src/WMS.Web.Api/Controllers/InStockController.cs b/src/WMS.Web.Api/Controllers/InStockController.cs index b3551060..42e4c905 100644 --- a/src/WMS.Web.Api/Controllers/InStockController.cs +++ b/src/WMS.Web.Api/Controllers/InStockController.cs @@ -65,15 +65,19 @@ namespace WMS.Web.Api.Controllers } /// - /// 上架-非采购订单 + /// 上架-非采购订单(按箱和按产品) /// /// /// [HttpPost] [Route("ShelfOther")] - public async Task ShelfOther([FromBody] SaveInStockRequest dto) + public async Task ShelfOther([FromBody] NoPurchaseShelfRequest dto) { - return Result.ReSuccess(); + 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.ShelfNoPurchase(dto, loginInfo); } /// diff --git a/src/WMS.Web.Api/Controllers/SysConfigController.cs b/src/WMS.Web.Api/Controllers/SysConfigController.cs index 47b1e9d1..848c1d2e 100644 --- a/src/WMS.Web.Api/Controllers/SysConfigController.cs +++ b/src/WMS.Web.Api/Controllers/SysConfigController.cs @@ -79,6 +79,10 @@ namespace WMS.Web.Api.Controllers { response.OrderType.Add(enumv.ToString(), enumv.GetRemark()); } + foreach (ShelfMethod enumv in Enum.GetValues(typeof(ShelfMethod))) + { + response.ShelfMethod.Add(enumv.ToString(), enumv.GetRemark()); + } //2 //1 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 7756dacf..9b174e90 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -68,9 +68,9 @@ - + - 上架-非采购订单 + 上架-非采购订单(按箱和按产品) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index c7466844..1324203a 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -465,6 +465,11 @@ 单据类型 + + + 非采购上架方式 + + ERP:单据查询-dto @@ -1530,6 +1535,36 @@ 同步成功或者失败 + + + 非采购单上架请求对象-按箱 + + + + + 单据ID(等同-入库任务单ID) + + + + + 上架方式 + + + + + 箱集合 + + + + + 入库任务单明细 + + + + + 入库单明细 + + 采购上架-请求对象 @@ -1572,7 +1607,7 @@ - 仓库ID + 仓库编码 @@ -2350,12 +2385,7 @@ 完成装箱时间 - - - 箱子的创建时间 - - - + 箱子创建用户 @@ -2365,7 +2395,7 @@ 创建时间(对应老OPS的创建时间) - + 明细 @@ -2375,14 +2405,14 @@ 序列号 - + - 条码生成时间 + 序列号生成时间 - + - 条码生成用户 + 序列号生成用户 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 30a6bd65..e2a875be 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -110,6 +110,16 @@ 组织Id + + + 完成装箱时间 + + + + + 箱子创建用户 + + 创建时间(对应老OPS的创建时间) @@ -449,6 +459,12 @@ + + + 非采购上架 + + + erp入库任务单的对应box箱信息表 @@ -938,6 +954,56 @@ 出库结束时间 + + + 序列号操作记录表 + + + + + ID + + + + + 序列号 + + + + + 序列号操作类型 + + + + + 供应商Id + + + + + 组织Id + + + + + 仓库Id + + + + + 操作时间 + + + + + 操作人 + + + + + 备注 + + wms盘点单 @@ -1393,6 +1459,14 @@ 删除实体集合 + + + 批量添加 + + + + + 批量添加 @@ -1462,6 +1536,14 @@ + + + 上架-非采购订单 + + + + + 获取任务单:根据箱号信息 @@ -1469,7 +1551,7 @@ - + 修改-入库任务信息 @@ -2199,6 +2281,14 @@ 箱服务信息 + + + 序列号操作记录日志 + + + + + 改箱 移箱服务 @@ -2246,6 +2336,14 @@ + + + 非采购单上架-按箱 + + + + + 获取任务单:根据箱号信息 @@ -2253,7 +2351,7 @@ - + 采购上架-保存 @@ -2262,7 +2360,16 @@ - + + + 非采购上架-按箱-保存 + + + + + + + 修改-入库任务信息 @@ -3259,6 +3366,26 @@ 数据操作失败 + + + 序列号操作类型 + + + + + 非采购上架方式 + + + + + 按箱上架 + + + + + 按产品上架 + + 对接单点的接口方法-枚举 diff --git a/src/WMS.Web.Core/Dto/EnumStatusResponse.cs b/src/WMS.Web.Core/Dto/EnumStatusResponse.cs index 9f9fe246..b49f469e 100644 --- a/src/WMS.Web.Core/Dto/EnumStatusResponse.cs +++ b/src/WMS.Web.Core/Dto/EnumStatusResponse.cs @@ -42,6 +42,10 @@ namespace WMS.Web.Core.Dto /// 单据类型 /// public Dictionary OrderType { get; set; } = new Dictionary(); + /// + /// 非采购上架方式 + /// + public Dictionary ShelfMethod { get; set; } = new Dictionary(); diff --git a/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs b/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs new file mode 100644 index 00000000..e510eab0 --- /dev/null +++ b/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Text; +using WMS.Web.Core.Dto.InStockTask; + +namespace WMS.Web.Core.Dto.InStock +{ + /// + /// 非采购单上架请求对象-按箱 + /// + public class NoPurchaseShelfRequest + { + /// + /// 单据ID(等同-入库任务单ID) + /// + [Required(ErrorMessage = "任务单ID不能为空")] + public int TaskId { get; set; } + + /// + /// 上架方式 + /// + [Required(ErrorMessage = "上架方式不能为空")] + public int ShelfMethod { get; set; } + + /// + /// 箱集合 + /// + public List Boxs { get; set; } = new List(); + + /// + /// 入库任务单明细 + /// + public List TaskDetails { get; set; } = new List(); + + /// + /// 入库单明细 + /// + public List Details { get; set; } = new List(); + } +} diff --git a/src/WMS.Web.Domain/Entitys/InstockTask.cs b/src/WMS.Web.Domain/Entitys/InstockTask.cs index f8584fb6..8a5b69df 100644 --- a/src/WMS.Web.Domain/Entitys/InstockTask.cs +++ b/src/WMS.Web.Domain/Entitys/InstockTask.cs @@ -115,5 +115,17 @@ namespace WMS.Web.Domain.Entitys this.ShelferId = creatorId; this.ShelfTime = DateTime.Now; } + + /// + /// 非采购上架 + /// + /// + public void NoPurchaseShelf(int creatorId) + { + this.ReceiverId = creatorId; + this.ReceiveTime = DateTime.Now; + this.ShelferId = creatorId; + this.ShelfTime = DateTime.Now; + } } } diff --git a/src/WMS.Web.Domain/IService/IInStockService.cs b/src/WMS.Web.Domain/IService/IInStockService.cs index 25bab78a..346dfcbc 100644 --- a/src/WMS.Web.Domain/IService/IInStockService.cs +++ b/src/WMS.Web.Domain/IService/IInStockService.cs @@ -7,6 +7,7 @@ using WMS.Web.Core.Dto.InStock; using WMS.Web.Core.Dto.InStockTask; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Values; namespace WMS.Web.Domain.IService @@ -40,6 +41,14 @@ namespace WMS.Web.Domain.IService /// Task Shelf(PurchaseShelfRequest instock, LoginInDto loginInfo); + /// + /// 上架-非采购订单 + /// + /// + /// + /// + Task ShelfNoPurchase(NoPurchaseShelfRequest dto, LoginInDto loginInDto); + /// /// 获取任务单:根据箱号信息 /// @@ -55,7 +64,7 @@ namespace WMS.Web.Domain.IService /// /// /// - Task Update(UpdateInStockTaskRequest dto, int staffId, bool isReceive, bool isTransaction = true); + Task> Update(UpdateInStockTaskRequest dto, int staffId, bool? isReceive, bool isTransaction = true, bool isNoPurchaseShelf = false); /// /// 批量修改-入库任务信息 diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs index 98dc27e5..f316cc27 100644 --- a/src/WMS.Web.Domain/Services/InStockService.cs +++ b/src/WMS.Web.Domain/Services/InStockService.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto; +using WMS.Web.Core.Dto.ChangeBoxRecord; using WMS.Web.Core.Dto.Erp; using WMS.Web.Core.Dto.InStock; using WMS.Web.Core.Dto.InStockTask; @@ -28,19 +29,21 @@ namespace WMS.Web.Domain.Services private readonly IMapper _mapper; private readonly IErpService _erpService; private readonly ILoginService _loginService; + private readonly IChangeMoveBoxService _changeMoveBoxService; private readonly IBoxRepositories _boxRepositories; private readonly IBasicsRepositories _basicsRepositories; private readonly IInStockRepositories _inStockRepositories; private readonly IInStockTaskRepositories _inStockTaskRepositories; private readonly IErpBasicDataExtendService _erpBasicDataExtendService; public InStockService(IMapper mapper, IErpService erpService, ILoginService loginService, IBoxRepositories boxRepositories, - IBasicsRepositories basicsRepositories, IErpBasicDataExtendService erpBasicDataExtendService, + IBasicsRepositories basicsRepositories, IErpBasicDataExtendService erpBasicDataExtendService, IChangeMoveBoxService changeMoveBoxService, IInStockRepositories inStockRepositories, IInStockTaskRepositories inStockTaskRepositories) { _mapper = mapper; _erpService = erpService; _loginService = loginService; _boxRepositories = boxRepositories; + _changeMoveBoxService = changeMoveBoxService; _basicsRepositories = basicsRepositories; _inStockRepositories = inStockRepositories; _inStockTaskRepositories = inStockTaskRepositories; @@ -95,7 +98,7 @@ namespace WMS.Web.Domain.Services bool isRollback = false; bool isTransaction = false; //1.添加入库单:(同步金蝶在save方法里面进行) - var save_result = await this.Save(instock, InstockType.Purchase, loginInfo.UserInfo.StaffId, isTransaction); + var save_result = await this.ShelfSave(instock, InstockType.Purchase, loginInfo.UserInfo.StaffId, isTransaction); if (!save_result.IsSuccess) isRollback = true; { //2.修改入库任务单 @@ -112,6 +115,27 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(); } + /// + /// 非采购单上架-按箱 + /// + /// + /// + /// + public async Task ShelfNoPurchase(NoPurchaseShelfRequest dto,LoginInDto loginInDto) + { + IDbContextTransaction _transaction = _basicsRepositories.GetTransaction(); + bool isRollback = false; + bool isTransaction = false; + //保存非采购上架的数据 + var shelfSave_result = await this.ShelfNoPurchaseSave(dto,loginInDto.UserInfo.StaffId, isTransaction); + if(!shelfSave_result.IsSuccess) isRollback = true; + //提交事务 + var isSuccess = _basicsRepositories.CommitTransaction(isRollback, _transaction); + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + return Result.ReSuccess(); + } + /// /// 获取任务单:根据箱号信息 /// @@ -160,7 +184,7 @@ namespace WMS.Web.Domain.Services /// /// /// - private async Task Save(PurchaseShelfRequest dto, InstockType type, int staffId, bool isTransaction = true) + private async Task ShelfSave(PurchaseShelfRequest dto, InstockType type, int staffId, bool isTransaction = true) { var entity = new InStock(); entity.Type = type; @@ -178,7 +202,49 @@ namespace WMS.Web.Domain.Services else return Result.ReFailure(ResultCodes.DateWriteError); } + /// + /// 非采购上架-按箱-保存 + /// + /// + /// + /// + /// + private async Task ShelfNoPurchaseSave(NoPurchaseShelfRequest dto,int staffId, bool isTransaction = true) + { + //1.修改-入库任务单的信息 + var updateInStockTaskRequest = new UpdateInStockTaskRequest(); + updateInStockTaskRequest.Id = dto.TaskId; + updateInStockTaskRequest.Boxs = dto.Boxs; + updateInStockTaskRequest.Details = dto.TaskDetails; + //2.修改后返回当前实体 + var update_result = await this.Update(updateInStockTaskRequest, staffId, null, isTransaction, true); + if (!update_result.IsSuccess) + return update_result; + + //执行保存 + var entity = new InStock(); + entity.Type = update_result.Data.Type; + entity.Details = _mapper.Map>(dto.Details); + entity.Create(staffId); + + //需要填写序列号 + //需要修改库存 + //需要同步金蝶 + + entity = await _inStockRepositories.Add(entity, isTransaction); + + if (entity != null) + return Result.ReSuccess(); + else + return Result.ReFailure(ResultCodes.DateWriteError); + + //当按产品上架:就要调用该箱的操作; + var changeBox = new SaveChangeBoxRecordRequest(); + + //await _changeMoveBoxService.ChangeBoxSave() + + } /// /// 修改-入库任务信息 /// @@ -187,26 +253,38 @@ namespace WMS.Web.Domain.Services /// /// /// - public async Task Update(UpdateInStockTaskRequest dto, int staffId,bool isReceive, bool isTransaction = true) + public async Task> Update(UpdateInStockTaskRequest dto, int staffId,bool? isReceive, bool isTransaction = true,bool isNoPurchaseShelf=false) { var entity = await _inStockTaskRepositories.Get(dto.Id); if (entity == null) - return Result.ReFailure(ResultCodes.DateWriteError); + return Result.ReFailure(ResultCodes.DateWriteError); entity = _mapper.Map(dto, entity); - //子集单独映射 - entity.Boxs = _mapper.ToMapList(dto.Boxs, entity.Boxs); + ////子集单独映射:这个弃用;这个不好的地方就是,前端必须拿到全部的boxs集合一起给到后端处理; + //entity.Boxs = _mapper.ToMapList(dto.Boxs, entity.Boxs); + //子集单独映射:box子集单独组装获取;这个好处就是前端就只传新增的box过来; + foreach (var item in dto.Boxs) + { + var box = _mapper.Map(item); + entity.Boxs.Add(box); + } + //子集单独映射 entity.Details = _mapper.ToMapList(dto.Details, entity.Details); - if (isReceive) - entity.Receive(staffId); + if (isNoPurchaseShelf) + entity.NoPurchaseShelf(staffId); else - entity.Shelf(staffId); + { + if (isReceive.HasValue && isReceive.Value) + entity.Receive(staffId); + else + entity.Shelf(staffId); + } var result =await _inStockTaskRepositories.Update(entity, isTransaction); if (result != null) - return Result.ReSuccess(); + return Result.ReSuccess(entity); else - return Result.ReFailure(ResultCodes.DateWriteError); + return Result.ReFailure(ResultCodes.DateWriteError); } /// diff --git a/src/WMS.Web.Domain/Values/ShelfMethod.cs b/src/WMS.Web.Domain/Values/ShelfMethod.cs new file mode 100644 index 00000000..bb55393c --- /dev/null +++ b/src/WMS.Web.Domain/Values/ShelfMethod.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Core; + +namespace WMS.Web.Domain.Values +{ + /// + /// 非采购上架方式 + /// + public enum ShelfMethod + { + /// + /// 按箱上架 + /// + [EnumRemark("按箱上架")] + Box = 1, + /// + /// 按产品上架 + /// + [EnumRemark("按产品上架")] + Product = 2, + } +}