diff --git a/src/WMS.Web.Api/Controllers/OutStockTaskController.cs b/src/WMS.Web.Api/Controllers/OutStockTaskController.cs index ecc5af53..001176af 100644 --- a/src/WMS.Web.Api/Controllers/OutStockTaskController.cs +++ b/src/WMS.Web.Api/Controllers/OutStockTaskController.cs @@ -196,8 +196,12 @@ namespace WMS.Web.Api.Controllers if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); + DateTime begin = DateTime.Now.AddDays(-3);//默认拉去三天以内的数据 var res = await _repositories.GetEntityList(dto.Ids); - return await _outStockTaskService.Sync(res.Select(s => s.BillNo).ToList()); + //先刷新选中的数据 + await _outStockTaskService.Sync(res.Select(s => s.BillNo).ToList()); + //再刷新3天内所有的 + return await _outStockTaskService.Sync(null, begin); } } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 84b8a44c..80086bd1 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -176,6 +176,14 @@ + + + 出库 + + + + + 老ops箱信息明细 @@ -3614,11 +3622,12 @@ - + 同步金蝶数据 不传源订单号则更新所有 + @@ -4318,6 +4327,14 @@ + + + 出库 + + + + + 列表页导出 @@ -4714,7 +4731,7 @@ - + 同步金蝶数据 不传源订单号则更新所有 diff --git a/src/WMS.Web.Domain/Entitys/Box.cs b/src/WMS.Web.Domain/Entitys/Box.cs index a381663f..2c8f391e 100644 --- a/src/WMS.Web.Domain/Entitys/Box.cs +++ b/src/WMS.Web.Domain/Entitys/Box.cs @@ -146,5 +146,19 @@ namespace WMS.Web.Domain.Entitys return Result.ReSuccess(); } + /// + /// 出库 + /// + /// + /// + /// + public Result OutStock(int materialId, decimal qty) + { + var d = this.Details.FirstOrDefault(f => f.MaterialId == materialId); + if (d != null) + d.Qty = (d.Qty - qty) > 0 ? (d.Qty - qty) : 0; + + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs b/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs index efe25e22..52daf3c2 100644 --- a/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs +++ b/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs @@ -25,6 +25,8 @@ namespace WMS.Web.Domain.IService Task ChangeBox_BackRecord(BackRecord BackRecord, LoginInDto loginInfo, bool isTransaction = true); //非采购入库 Task ChangeBox_InStock(InStock InStocks, LoginInDto loginInfo, bool isTransaction = true); + //出库 + Task ChangeBox_OutStock(OutStock outStock, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/IService/Public/IOutStockTaskService.cs b/src/WMS.Web.Domain/IService/Public/IOutStockTaskService.cs index e6a8cf98..6e492436 100644 --- a/src/WMS.Web.Domain/IService/Public/IOutStockTaskService.cs +++ b/src/WMS.Web.Domain/IService/Public/IOutStockTaskService.cs @@ -53,7 +53,8 @@ namespace WMS.Web.Domain.IService.Public /// 同步金蝶数据 不传源订单号则更新所有 /// /// + /// /// - Task Sync(List billNos = null); + Task Sync(List billNos = null,DateTime? begin=null); } } diff --git a/src/WMS.Web.Domain/QuartzJob/OutStockOrderQuartzJob.cs b/src/WMS.Web.Domain/QuartzJob/OutStockOrderQuartzJob.cs index 93ad5c1f..3cc9c1c3 100644 --- a/src/WMS.Web.Domain/QuartzJob/OutStockOrderQuartzJob.cs +++ b/src/WMS.Web.Domain/QuartzJob/OutStockOrderQuartzJob.cs @@ -47,8 +47,10 @@ namespace WMS.Web.Domain.QuartzJob //2.记录:开始时间 var begindatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); _logger.LogInformation($"出库单-同步金蝶出库单数据:执行开始时间->{begindatetime}"); + + DateTime begin = DateTime.Now.AddDays(-3);//默认拉去一天以内的数据 //3.同步数据 - var result = await _outStockTaskService.Sync(null); + var result = await _outStockTaskService.Sync(null, begin); //5.记录:结束时间 var enddatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); _logger.LogInformation($"出库单-同步金蝶出库单数据:执行结束时间->{begindatetime}"); diff --git a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs index 43d0f269..44fdf1a1 100644 --- a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs +++ b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs @@ -427,5 +427,47 @@ namespace WMS.Web.Domain.Services return await ChangeBoxSave(dtoList, loginInfo, isTransaction, false); } + /// + /// 出库 + /// + /// + /// + /// + public async Task ChangeBox_OutStock(OutStock outStock, bool isTransaction = true) + { + if (outStock.Method == InventoryInOutMethod.Box) return Result.ReSuccess(); + List dtoList = new List(); + var boxDetails = outStock.Details.SelectMany(s => s.BoxsDetails); + var boxIds = boxDetails.Select(s => s.BoxId).Distinct().ToList(); + var boxs = await _boxRepositories.GetEntityList(boxIds); + foreach (var d in outStock.Details) + { + foreach (var db in d.BoxsDetails) + { + var box = boxs.FirstOrDefault(f => f.Id == db.BoxId); + if (box == null) continue; + box.OutStock(d.MaterialId, db.Qty); + } + } + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _basbicsRepositories.GetTransaction(); + Result res_Rollback = Result.ReSuccess(); + bool isSuccess = true; + if (res_Rollback.IsSuccess) + { + isSuccess = await _boxRepositories.EditEntityList(boxs, false); + if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); + } + //提交事务 + if (isTransaction) + { + isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction); + if (!res_Rollback.IsSuccess) return res_Rollback; + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + } + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/Services/OutStockService.cs b/src/WMS.Web.Domain/Services/OutStockService.cs index e25d90e9..fc4b3d81 100644 --- a/src/WMS.Web.Domain/Services/OutStockService.cs +++ b/src/WMS.Web.Domain/Services/OutStockService.cs @@ -48,13 +48,15 @@ namespace WMS.Web.Domain.Services private readonly ISingleDataService _singleDataService; private readonly IServiceScopeFactory _serviceScopeFactory; private readonly IInStockTaskBoxService _inStockTaskService; + private readonly IChangeMoveBoxService _changeMoveBoxService; public OutStockService(IMapper mapper, ILoginService loginService, IBasicsRepositories transactionRepositories, IOutStockRepositories outStockRepositories, IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService, IErpService erpService, ISerialNumberService serialNumberService, IBoxInventoryService boxInventoryService, IInventoryInOutDetailsService inventoryInOutDetailsService, IBoxInventoryRepositories boxInventoryRepositories, ILogger logger, IBoxRepositories boxRepositories, - ISingleDataService singleDataService, IServiceScopeFactory serviceScopeFactory, IInStockTaskBoxService inStockTaskService) + ISingleDataService singleDataService, IServiceScopeFactory serviceScopeFactory, IInStockTaskBoxService inStockTaskService, + IChangeMoveBoxService changeMoveBoxService) { _mapper = mapper; _loginService = loginService; @@ -72,6 +74,7 @@ namespace WMS.Web.Domain.Services _singleDataService = singleDataService; _serviceScopeFactory = serviceScopeFactory; _inStockTaskService = inStockTaskService; + _changeMoveBoxService = changeMoveBoxService; } /// /// 出库单 @@ -195,6 +198,11 @@ namespace WMS.Web.Domain.Services if (!res_Inventory.IsSuccess) res_Rollback = res_Inventory; } if (res_Rollback.IsSuccess) + { + var res_changeMoveBox = await _changeMoveBoxService.ChangeBox_OutStock(entity, false); + if (!res_changeMoveBox.IsSuccess) res_Rollback = res_changeMoveBox; + } + if (res_Rollback.IsSuccess) { boxIds = entity.Details.SelectMany(s => s.BoxsDetails).Select(s => s.BoxId).ToList(); var res_InStockTask = await _inStockTaskService.UnBind(boxIds, false); diff --git a/src/WMS.Web.Domain/Services/OutStockTaskService.cs b/src/WMS.Web.Domain/Services/OutStockTaskService.cs index c579662d..692d3058 100644 --- a/src/WMS.Web.Domain/Services/OutStockTaskService.cs +++ b/src/WMS.Web.Domain/Services/OutStockTaskService.cs @@ -285,7 +285,7 @@ namespace WMS.Web.Domain.Services /// /// /// - public async Task Sync(List billNos = null) + public async Task Sync(List billNos = null, DateTime? begin = null) { //1.事务 IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); @@ -296,8 +296,7 @@ namespace WMS.Web.Domain.Services if (billNos == null) { //DateTime begin = await _erpOpsSyncDateRepositories.Get(ErpOpsSyncType.OutStock); - DateTime begin = Convert.ToDateTime("2024-03-01 00:00:00");//正式环境 从3月1好开始 - if (DateTime.Now > Convert.ToDateTime("2024-03-04 00:00:00")) + if (begin == null) begin = DateTime.Now.AddDays(-3);//默认拉去三天以内的数据 //更新时间范围内所有 result = await BillQueryForSalOutStock(false, null, begin); diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index daa41e58..3f5a2085 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -1609,8 +1609,8 @@ namespace WMS.Web.Domain.Services.Public //3.未出库数量>0 //4.日期>=系统上线之日 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 - //6.物料 物料属性=费用或资产的排除 不拉取 - param.FilterString = "FDocumentStatus='C' and FRemainOutQty>=0 and FMaterialID.FERPCLSID not in (10,11)"; + //6.物料 物料属性=费用或资产或服务的排除 不拉取 + param.FilterString = "FDocumentStatus='C' and FRemainOutQty>=0 and FMaterialID.FERPCLSID not in (10,11,6)"; //param.FilterString += " and FStockID.FNumber in (" + stocks_codes + ")"; //param.FilterString += " and FDeliveryOrgID.FNumber in (" + stocks_orgs + ")"; for (int i = 0; i < stocks.Count(); i++) @@ -1703,8 +1703,8 @@ namespace WMS.Web.Domain.Services.Public //2.审核状态:已审核 //3.单据类型:标准 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 - //6.物料 物料属性=费用或资产的排除 不拉取 - param.FilterString = "FDocumentStatus='C' and FBillTypeID='ce8f49055c5c4782b65463a3f863bb4a' and FMaterialID.FERPCLSID not in (10,11)"; + //6.物料 物料属性=费用或资产或服务的排除 不拉取 + param.FilterString = "FDocumentStatus='C' and FBillTypeID='ce8f49055c5c4782b65463a3f863bb4a' and FMaterialID.FERPCLSID not in (10,11,6)"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString += " and FSrcStockId.FNumber in (" + stocks_codes + ")"; //param.FilterString += " and FStockOutOrgId.FNumber in (" + stocks_orgs + ")"; @@ -1796,8 +1796,8 @@ namespace WMS.Web.Domain.Services.Public //2.审核状态:已审核 //3.单据类型:标准 //4.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 - //6.物料 物料属性=费用或资产的排除 不拉取 - param.FilterString = "FDocumentStatus='C' and FBillTypeID='de3bcacc98434ec68a358aa5abcd9183' and FMaterialID.FERPCLSID not in (10,11)"; + //6.物料 物料属性=费用或资产或服务的排除 不拉取 + param.FilterString = "FDocumentStatus='C' and FBillTypeID='de3bcacc98434ec68a358aa5abcd9183' and FMaterialID.FERPCLSID not in (10,11,6)"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString += " and FSrcStockID.FNumber in (" + stocks_codes + ")"; //param.FilterString += " and FStockOrgID.FNumber in (" + stocks_orgs + ")"; @@ -1889,8 +1889,8 @@ namespace WMS.Web.Domain.Services.Public //2.审核状态:已审核 //3.单据类型:标准 //4.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 FBillTypeID - //6.物料 物料属性=费用或资产的排除 不拉取 - param.FilterString = "FDocumentStatus='C' and FAffairType='Dassembly' and FBillTypeID='3441ac133848446f824d0ab760c8b3c7' and FMaterialID.FERPCLSID not in (10,11)"; + //6.物料 物料属性=费用或资产或服务的排除 不拉取 + param.FilterString = "FDocumentStatus='C' and FAffairType='Dassembly' and FBillTypeID='3441ac133848446f824d0ab760c8b3c7' and FMaterialID.FERPCLSID not in (10,11,6)"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString += " and FStockID.FNumber in (" + stocks_codes + ")"; //param.FilterString += " and FStockOrgId.FNumber in (" + stocks_orgs + ")"; @@ -1982,8 +1982,8 @@ namespace WMS.Web.Domain.Services.Public //2.审核状态:已审核 //3.单据类型:标准 //4.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 - //6.物料 物料属性=费用或资产的排除 不拉取 - param.FilterString = "FDocumentStatus='C' and FBillTypeID='54533291F9A44D38809F70000499BEE9' and FMaterialID.FERPCLSID not in (10,11)"; + //6.物料 物料属性=费用或资产或服务的排除 不拉取 + param.FilterString = "FDocumentStatus='C' and FBillTypeID='54533291F9A44D38809F70000499BEE9' and FMaterialID.FERPCLSID not in (10,11,6)"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString += " and FStockId.FNumber in (" + stocks_codes + ")"; //param.FilterString += " and FStockOrgId.FNumber in (" + stocks_orgs + ")"; @@ -2075,8 +2075,8 @@ namespace WMS.Web.Domain.Services.Public //2.审核状态:已审核 //3.单据类型:标准 //4.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 FBillTypeID - //6.物料 物料属性=费用或资产的排除 不拉取 - param.FilterString = "FDocumentStatus='C' and FAffairType='Assembly' and FBillTypeID='3441ac133848446f824d0ab760c8b3c7' and FMaterialID.FERPCLSID not in (10,11)"; + //6.物料 物料属性=费用或资产或服务的排除 不拉取 + param.FilterString = "FDocumentStatus='C' and FAffairType='Assembly' and FBillTypeID='3441ac133848446f824d0ab760c8b3c7' and FMaterialID.FERPCLSID not in (10,11,6)"; //string srt = JsonConvert.SerializeObject(stocks_codes); //param.FilterString += " and FStockIDSETY.FNumber in (" + stocks_codes + ")"; //param.FilterString += " and FStockOrgId.FNumber in (" + stocks_orgs + ")"; @@ -2174,8 +2174,8 @@ namespace WMS.Web.Domain.Services.Public //2.审核状态:已审核 //4.日期>=系统上线之日 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 - //6.物料 物料属性=费用或资产的排除 不拉取 - param.FilterString = "FDocumentStatus='C' and FMaterialID.FERPCLSID not in (10,11)"; + //6.物料 物料属性=费用或资产或服务的排除 不拉取 + param.FilterString = "FDocumentStatus='C' and FMaterialID.FERPCLSID not in (10,11,6)"; //param.FilterString += " and FStockID.FNumber in (" + stocks_codes + ")"; //param.FilterString += " and FDeliveryOrgID.FNumber in (" + stocks_orgs + ")"; for (int i = 0; i < stocks.Count(); i++)