diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 8fb124c7..1af4f939 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/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 94644910..d0339d17 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -2498,6 +2498,12 @@ 仓位 + + + 老仓位(如果更好了仓位 这里就是原有仓位) + 如果没有更换仓位 那老仓位和新仓位就是一样的值 + + 子仓库(跟金蝶交互字段) @@ -3434,7 +3440,7 @@ - + 盘点-箱库存的变更 @@ -4888,7 +4894,7 @@ - + 盘点单-箱库存的变更 @@ -6508,6 +6514,13 @@ + + + 盘点更换仓位组装盘点单结构,用来调用即时库存 + + + + erp基础数据-同步定时任务 diff --git a/src/WMS.Web.Domain/IService/IBoxInventoryService.cs b/src/WMS.Web.Domain/IService/IBoxInventoryService.cs index c0da4b14..0c0a3cf4 100644 --- a/src/WMS.Web.Domain/IService/IBoxInventoryService.cs +++ b/src/WMS.Web.Domain/IService/IBoxInventoryService.cs @@ -51,7 +51,7 @@ namespace WMS.Web.Domain.IService /// /// /// - Task GenerateTakeBox(List dtoDatas, List serNubBoxDto, bool isTransaction); + Task GenerateTakeBox(List dtoDatas, List serNubBoxDto,bool isUpdateSubStock, bool isTransaction); /// /// 入库单-箱库存的变更 diff --git a/src/WMS.Web.Domain/Services/BoxInventoryService.cs b/src/WMS.Web.Domain/Services/BoxInventoryService.cs index 9340389a..6efcd7e4 100644 --- a/src/WMS.Web.Domain/Services/BoxInventoryService.cs +++ b/src/WMS.Web.Domain/Services/BoxInventoryService.cs @@ -328,7 +328,7 @@ namespace WMS.Web.Domain.Services /// /// /// - public async Task GenerateTakeBox(List dtoDatas, List serNubBoxDto, bool isTransaction) + public async Task GenerateTakeBox(List dtoDatas, List serNubBoxDto,bool isUpdateSubStock, bool isTransaction) { _logger.LogInformation("盘点单-箱库存的变更:" + JsonConvert.SerializeObject(dtoDatas)); //1.判断来源数据是否存在 @@ -399,17 +399,35 @@ namespace WMS.Web.Domain.Services } } }); - - //整合一起 - var generateDtoList = new List(); - generateDtoList.AddRange(generateDtoList_in); - generateDtoList.AddRange(generateDtoList_out); - //提交处理 - var result = await this.ExeTakeBox(generateDtoList, serNubBoxDto, isTransaction); - if (!result.IsSuccess) + if (isUpdateSubStock) { - _logger.LogInformation("盘点单-箱库存的变更:失败->" + result.Message + ",参数->" + JsonConvert.SerializeObject(dtoDatas)); - return result; + //更改了仓位 分两次调 先调出库 再调入库 + var result = await this.ExeTakeBox(generateDtoList_out, serNubBoxDto, isTransaction); + if (!result.IsSuccess) + { + _logger.LogInformation("盘点单-箱库存的变更(出):失败->" + result.Message + ",参数->" + JsonConvert.SerializeObject(dtoDatas)); + return result; + } + result = await this.ExeTakeBox(generateDtoList_in, serNubBoxDto, isTransaction); + if (!result.IsSuccess) + { + _logger.LogInformation("盘点单-箱库存的变更(入):失败->" + result.Message + ",参数->" + JsonConvert.SerializeObject(dtoDatas)); + return result; + } + } + else + { + //整合一起 + var generateDtoList = new List(); + generateDtoList.AddRange(generateDtoList_in); + generateDtoList.AddRange(generateDtoList_out); + //提交处理 + var result = await this.ExeTakeBox(generateDtoList, serNubBoxDto, isTransaction); + if (!result.IsSuccess) + { + _logger.LogInformation("盘点单-箱库存的变更:失败->" + result.Message + ",参数->" + JsonConvert.SerializeObject(dtoDatas)); + return result; + } } //5.组装物料收发明细 diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs index bd72428a..76440189 100644 --- a/src/WMS.Web.Domain/Services/TakeStockService.cs +++ b/src/WMS.Web.Domain/Services/TakeStockService.cs @@ -6,6 +6,7 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto; @@ -39,6 +40,7 @@ namespace WMS.Web.Domain.Services private readonly IErpService _erpService; private readonly ILogger _logger; private readonly IBoxInventoryService _boxInventoryService; + private readonly IBoxInventoryRepositories _boxInventoryRepositories; private readonly IErpBasicDataExtendService _erpBasicDataExtendService; private readonly ISerialNumberService _serialNumberService; private readonly IServiceScopeFactory _serviceScopeFactory; @@ -50,7 +52,8 @@ namespace WMS.Web.Domain.Services ISingleDataService singleDataService, IErpService erpService, ILogger logger, IBoxInventoryService boxInventoryService, IErpBasicDataExtendService erpBasicDataExtendService, ISerialNumberService serialNumberService, IServiceScopeFactory serviceScopeFactory, - ISerialNumbersRepositories serialNumberRepositories, IBoxRepositories boxRepositories) + ISerialNumbersRepositories serialNumberRepositories, IBoxRepositories boxRepositories, + IBoxInventoryRepositories boxInventoryRepositories) { _mapper = mapper; _loginService = loginService; @@ -66,6 +69,7 @@ namespace WMS.Web.Domain.Services _serviceScopeFactory = serviceScopeFactory; _serialNumberRepositories = serialNumberRepositories; _boxRepositories = boxRepositories; + _boxInventoryRepositories = boxInventoryRepositories; } /// /// 保存 @@ -80,8 +84,15 @@ namespace WMS.Web.Domain.Services if (dto.Count() == 0) return Result.ReSuccess(); if (dto.GroupBy(g => g.BoxId).Count() > 1) return Result.ReFailure(ResultCodes.TakeStockBoxError); - //v1.0.6 如果箱子不存在则添加箱信息 + //v1.0.6 如果箱子不存在则添加箱信息 和 可以更换仓位 var dto_f = dto.First(); + bool isUpdateSubStock = false; + BoxInventory boxInventory = null; + if (isUpdateSubStock) + { + boxInventory = await _boxInventoryRepositories.Get(dto_f.BoxId); + if (boxInventory == null) return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); + } if (dto_f.BoxId == 0) { var dBox = await _boxRepositories.GetByNo(dto_f.BoxBillNo); @@ -95,7 +106,7 @@ namespace WMS.Web.Domain.Services CreateTime = DateTime.Now }; dBox = await _boxRepositories.Add(dBox); - if(dBox==null)return Result.ReFailure(ResultCodes.DateWriteError); + if (dBox == null) return Result.ReFailure(ResultCodes.DateWriteError); dto.ForEach(f => f.BoxId = dBox.Id); } @@ -163,7 +174,13 @@ namespace WMS.Web.Domain.Services } if (res_Rollback.IsSuccess) { - var res_Inventory = await _boxInventoryService.GenerateTakeBox(list, serialNumbersBoxInventoryList, false); + List takes = list; + if (isUpdateSubStock) + { + takes = new List(); + takes = GetUpdateSubStockTakeStock(dto, loginInfo, boxInventory); + } + var res_Inventory = await _boxInventoryService.GenerateTakeBox(list, serialNumbersBoxInventoryList, isUpdateSubStock, false); if (!res_Inventory.IsSuccess) res_Rollback = res_Inventory; } @@ -386,5 +403,50 @@ namespace WMS.Web.Domain.Services } return list; } + /// + /// 盘点更换仓位组装盘点单结构,用来调用即时库存 + /// + /// + /// + private List GetUpdateSubStockTakeStock(List dto, LoginInDto loginInfo, BoxInventory boxInventory) + { + List list = new List(); + var fist = dto.First(); + + //先用箱库存 组装盘亏单 把数据都盘出去 + TakeStock loss = new TakeStock(); + loss.Create(loginInfo.UserInfo.StaffId, TakeStockType.Loss); + foreach (var d in boxInventory.Details) + { + loss.Details.Add(new TakeStockDetails() + { + BoxId = fist.BoxId, + MaterialNumber = d.MaterialNumber, + OrgCode = boxInventory.OrgCode, + StockCode = boxInventory.StockCode, + SubStockCode = boxInventory.SubStockCode, + Old_SubStockCode = boxInventory.SubStockCode, + AfterQty = 0, + BeforeQty = d.Qty, + SerialNumbers = d.SerialNumbers, + FinalQty = d.Qty + }); + } + list.Add(loss); + + //组装盘盈单 + TakeStock profit = new TakeStock(); + profit.Create(loginInfo.UserInfo.StaffId, TakeStockType.Profit); + profit.Details = _mapper.Map>(dto.Where(w => w.AfterQty > 0)); + foreach (var d in profit.Details) + { + d.OrgCode = boxInventory.OrgCode; + d.BeforeQty = 0; + d.FinalQty = d.AfterQty; + } + list.Add(profit); + + return list; + } } }