diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 283ff789..e1dbf467 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/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 7f3eff22..001901dc 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -108,6 +108,11 @@ namespace WMS.Web.Api.Controllers //var m2 = my2.Object; //var md = m2.code; + List<(string orgCode, string stockCode)> request = new List<(string orgCode, string stockCode)>(); + request.Add(("101", "CK001")); + request.Add(("101", "CK002")); + var list = await _erpService.BillQueryForInventory(request); + //LingXingResponse r = new LingXingResponse(); //string str = "{\"code\":0,\"message\":\"success\",\"error_details\":[],\"request_id\":\"7A739491-8740-01AC-304E-0203AF887AE2\",\"response_time\":\"2024-10-16 17:58:57\",\"data\":[{\"wid\":437,\"type\":1,\"name\":\"ORICO_OD\",\"is_delete\":0}],\"total\":1}"; @@ -117,8 +122,8 @@ namespace WMS.Web.Api.Controllers //var s = await _lingXingService.GetSeller(); //var ns = s.Data.Where(w =>w.Id== "2101").ToList(); //string str = string.Join(",", s.Data.Select(s => s.Id).ToList()); - var sd= await _lingXingService.GetInventory(new LingXingInventoryRequest() { wid = "437" }); - string sdsdf = sd.Message; + //var sd= await _lingXingService.GetInventory(new LingXingInventoryRequest() { wid = "437" }); + //string sdsdf = sd.Message; //List list = new List(); //list.Add("GD-02-15"); //list.Add("GD-01-15"); diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 018bf731..d3357fe3 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -1006,15 +1006,25 @@ 仓库 - + - 子仓库(跟金蝶交互字段) + 子仓库 + + + 批号 + + - - 数量 - + + 可用量 + + + + + 库存量 + diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 231aad46..9b51cd52 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -4304,7 +4304,7 @@ - + 及时库存 diff --git a/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs b/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs index 39a786f7..30597164 100644 --- a/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs +++ b/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs @@ -19,12 +19,20 @@ namespace WMS.Web.Core.Dto.Erp /// public string StockCode { get; set; } /// - /// 子仓库(跟金蝶交互字段) + /// 子仓库 /// - public int Erp_SubStockId { get; set; } + public string Erp_SubStockName { get; set; } /// - /// 数量 - /// - public decimal Qty { get; set; } + /// 批号 + /// + public string Batch { get; set; } + /// + /// 可用量 + /// + public decimal Qty { get; set; } = 0; + /// + /// 库存量 + /// + public decimal BeforeQty { get; set; } = 0; } } diff --git a/src/WMS.Web.Domain/IService/Public/IErpService.cs b/src/WMS.Web.Domain/IService/Public/IErpService.cs index f561fa68..5d7510c5 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpService.cs @@ -178,7 +178,7 @@ namespace WMS.Web.Domain.IService.Public /// 及时库存 /// /// - Task> BillQueryForInventory(List<(string materialNumber, string orgCode, string stockCode, int subStockId)> request); + Task> BillQueryForInventory(List<(string orgCode, string stockCode)> request); //同步数据(保存提交审核) Task> Save(T dto, string formId); //提交 diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 33697c87..096d6cce 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -45,9 +45,53 @@ namespace WMS.Web.Domain.Services } - public Task Erp() + public async Task Erp() { - throw new NotImplementedException(); + //获取单点配置 + var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); + var codes = r.Where(w => + w.ManagementSystem == 1 || w.ManagementSystem == 4).Select(s => (s.Code, s.ErpOrgCode)).ToList(); + + var res = await _erpService.BillQueryForInventory(codes); + if (!res.IsSuccess) return res; + List inventoryList = new List(); + + foreach (var item in res.Data) + { + var entity = new ProductInventory() + { + Type = ProductInventoryType.JinDie, + MaterialNumber = item.MaterialNumber, + Customer = item.Erp_SubStockName, + OrgCode = item.OrgCode, + StockCode = item.StockCode, + Qty = item.Qty, + BeforeQty = item.BeforeQty + }; + inventoryList.Add(entity); + } + + IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); + Result res_Rollback = Result.ReSuccess(); + bool isSuccess = true; + //修改库存 + //先删除之前的再添加 + if (res_Rollback.IsSuccess) + { + isSuccess = await _repositories.Delete(ProductInventoryType.JinDie, false); + if (isSuccess == false) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); + } + if (res_Rollback.IsSuccess) + { + isSuccess = await _repositories.AddRange(inventoryList, false); + if (isSuccess == false) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); + } + //提交事务 + isSuccess = _transactionRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction); + if (!res_Rollback.IsSuccess) return res_Rollback; + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + return Result.ReSuccess(); } public Task JuShuiTan() @@ -95,7 +139,7 @@ namespace WMS.Web.Domain.Services var stock = r.FirstOrDefault(f => f.WarehouseCodeOfLingxing.Equals(l_stock.Name)); if (stock == null) continue; //店铺 - var seller = sellerList.Data.FirstOrDefault(f=>f.Id== item.Key.SellerId); + var seller = sellerList.Data.FirstOrDefault(f => f.Id == item.Key.SellerId); if (seller == null) continue; var pList = resInventory.Data.Where(w => w.SKU == item.Key.SKU && w.StockId == item.Key.StockId && w.SellerId == item.Key.SellerId).ToList(); diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index e0c5f6f3..d3d397d6 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -160,7 +160,7 @@ namespace WMS.Web.Domain.Services.Public /// 模糊搜索 /// 单据编号集合精确查找 /// - public async Task> BillQueryForPurchaseInStock(List sourceBillNos = null, DateTime? beginTime = null,bool isCheck=true) + public async Task> BillQueryForPurchaseInStock(List sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true) { string result_json = ""; try @@ -194,7 +194,7 @@ namespace WMS.Web.Domain.Services.Public //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 //param.FilterString = " FDocumentStatus='C' and (FBillTypeID='83d822ca3e374b4ab01e5dd46a0062bd' or FBillTypeID='6d01d059713d42a28bb976c90a121142') and FMRPCloseStatus='A'"; param.FilterString = " FMRPCloseStatus='A'"; - if(isCheck) param.FilterString += " and FDocumentStatus='C'"; + if (isCheck) param.FilterString += " and FDocumentStatus='C'"; for (int i = 0; i < stocks.Count(); i++) { if (i == 0) @@ -2635,7 +2635,7 @@ namespace WMS.Web.Domain.Services.Public } } - public async Task> BillQueryForInventory(List<(string materialNumber, string orgCode, string stockCode, int subStockId)> request) + public async Task> BillQueryForInventory(List<(string orgCode, string stockCode)> request) { try { @@ -2648,51 +2648,76 @@ namespace WMS.Web.Domain.Services.Public //3.获取金蝶采购订单:拼接参数和条件 var query = new ErpBillQueryDto(token_result.Data); var param = new ErpBillQueryParamDto(FormIdParam.STK_Inventory.ToString()); - param.FieldKeys = "FBASEQTY,FMATERIALID.FNumber,FSTOCKORGID.FNumber,FSTOCKID.FNumber,FSTOCKLOCID"; - param.Limit = 100; - //param.FilterString = $"FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}'"; - //param.FilterString = $""; + // ORICO_AD,FF100004 ORICO_GD,FF100005 ORICO_HD,FF100007 ORICO_JD,FF100008 + param.FieldKeys = "FMATERIALID.FNumber,FSTOCKORGID.FNumber,FSTOCKID.FNumber,FLot.FNumber,FBASEQTY,FSTOREURNOM,FSTOREURNUM,FSTOCKLOCID.FF100004.FName,FSTOCKLOCID.FF100005.FName,FSTOCKLOCID.FF100007.FName,FSTOCKLOCID.FF100008.FName"; + param.Limit = 10000; + //param.FilterString = $" FMATERIALID.FNumber='G01-11-572474' and FSTOCKID.FNumber='AD' and FBASEQTY>0"; + param.FilterString = $" FBASEQTY>0"; for (int i = 0; i < request.Count(); i++) { if (i == 0) { - param.FilterString = $"(FMATERIALID.FNumber='{request[0].materialNumber}' and FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}' and FSTOCKLOCID={request[0].subStockId})"; + param.FilterString += $" and ((FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}' )"; + if (request.Count() == 1) param.FilterString += ")"; } else { - param.FilterString += $" or (FMATERIALID.FNumber='{request[i].materialNumber}' and FSTOCKORGID.FNumber='{request[i].orgCode}' and FSTOCKID.FNumber='{request[i].stockCode}' and FSTOCKLOCID={request[i].subStockId})"; + param.FilterString += $" or (FSTOCKORGID.FNumber='{request[i].orgCode}' and FSTOCKID.FNumber='{request[i].stockCode}' ))"; } } - query.Data = JsonConvert.SerializeObject(param); - var json = JsonConvert.SerializeObject(query); - - //4.请求查询接口 - var result_json = await _client.ExecuteBillQueryAsync(json); - var result = JsonConvert.DeserializeObject>>(result_json); + bool isHave = true; var erp_list = new List(); - foreach (var item in result) + int skip = 0; + + + while (isHave) { + //4.1.页码:页码按照金蝶的要求从0开始 + param.StartRow = (Convert.ToInt32(skip) * param.Limit); - var lis = erp_list.FirstOrDefault(f => f.MaterialNumber.Equals(item[1]) - && f.OrgCode.Equals(item[2]) - && f.StockCode.Equals(item[3])); + query.Data = JsonConvert.SerializeObject(param); + var json = JsonConvert.SerializeObject(query); - if (lis == null) + //4.请求查询接口 + var result_json = await _client.ExecuteBillQueryAsync(json); + var result = JsonConvert.DeserializeObject>>(result_json); + //4.4.判断数据是否全部拉取完成:并停止循环的条件 + if (result == null || result.Count == 0) + isHave = false; + + foreach (var item in result) { - lis = new ErpInventoryDto(); - lis.Qty = Convert.ToDecimal(item[0]); - lis.MaterialNumber = item[1]; - lis.OrgCode = item[2]; - lis.StockCode = item[3]; - lis.Erp_SubStockId = Convert.ToInt32(item[4]); - erp_list.Add(lis); - } - else - lis.Qty = lis.Qty + Convert.ToDecimal(item[0]); - } + string name = GetName(item[7], item[8], item[9], item[10]); + var lis = erp_list.FirstOrDefault(f => f.MaterialNumber.Equals(item[0]) + && f.OrgCode.Equals(item[1]) + && f.StockCode.Equals(item[2]) && f.Erp_SubStockName.Equals(name)); - return ResultList.ReSuccess(erp_list); + if (lis == null) + { + lis = new ErpInventoryDto(); + lis.MaterialNumber = item[0]; + lis.OrgCode = item[1]; + lis.StockCode = item[2]; + lis.Batch = item[3]; + //查询库存单位数量FQTY:FMaterialid.FSTOREURNOM,FMaterialid.FSTOREURNUM, + //查出结果后用(FBASEQTY*FSTOREURNOM/FSTOREURNUM)计算得到库存单位数量。 + lis.BeforeQty = Convert.ToDecimal(item[4]) * Convert.ToDecimal(item[5]) / Convert.ToDecimal(item[6]); + //lis.Qty= Convert.ToDecimal(item[10]) * Convert.ToDecimal(item[5]) / Convert.ToDecimal(item[6]); + lis.Erp_SubStockName = name; + erp_list.Add(lis); + } + else + { + lis.BeforeQty = lis.BeforeQty + (Convert.ToDecimal(item[4]) * Convert.ToDecimal(item[5]) / Convert.ToDecimal(item[6])); + //lis.Qty = lis.Qty + Convert.ToDecimal(item[5]); + } + } + //4.6页面的叠加 + skip++; + } + var list = erp_list.Where(w => w.BeforeQty > 0 || w.Qty > 0).ToList(); + return ResultList.ReSuccess(list); } catch (Exception ex) { @@ -2700,9 +2725,16 @@ namespace WMS.Web.Domain.Services.Public return ResultList.ReFailure(ResultCodes.Erp_Inventory_Error); } } + - - + public string GetName(string name1,string name2,string name3,string name4) + { + if (!string.IsNullOrEmpty(name1)) return name1; + if (!string.IsNullOrEmpty(name2)) return name2; + if (!string.IsNullOrEmpty(name3)) return name3; + if (!string.IsNullOrEmpty(name4)) return name4; + return ""; + } #endregion } diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs index 76440189..80a2220e 100644 --- a/src/WMS.Web.Domain/Services/TakeStockService.cs +++ b/src/WMS.Web.Domain/Services/TakeStockService.cs @@ -262,14 +262,14 @@ namespace WMS.Web.Domain.Services int subStockId = subs.Data.FirstOrDefault(w => w.OrgCode.Equals(d.OrgCode) && w.StockCode.Equals(d.Erp_SubStockCode))?.Id ?? 0; requestInventory.Add((d.MaterialNumber, d.OrgCode, d.StockCode, subStockId)); }; - var res_s = await sc_erpService.BillQueryForInventory(requestInventory); - if (!res_s.IsSuccess) - { - entity.Sync(false, res_s.Message, SyncStatus.Fail, ""); - await sc_takeStockRepositories.Edit(entity, true); - _logger.LogInformation($"及时库存获取异常->错误:{res_s.Message} 数据: {JsonConvert.SerializeObject(entity)}"); - return Result.ReFailure(res_s.Message, res_s.Status); - } + //var res_s = await sc_erpService.BillQueryForInventory(requestInventory); + //if (!res_s.IsSuccess) + //{ + // entity.Sync(false, res_s.Message, SyncStatus.Fail, ""); + // await sc_takeStockRepositories.Edit(entity, true); + // _logger.LogInformation($"及时库存获取异常->错误:{res_s.Message} 数据: {JsonConvert.SerializeObject(entity)}"); + // return Result.ReFailure(res_s.Message, res_s.Status); + //} //组装dto #region 组装dto //子仓库 ORICO_JD:1000008 GD:1000005 HD:1000007 AD:1000004 @@ -278,9 +278,10 @@ namespace WMS.Web.Domain.Services { int subStockId = subs.Data.FirstOrDefault(w => w.OrgCode.Equals(d.OrgCode) && w.StockCode.Equals(d.Erp_SubStockCode))?.Id ?? 0; var number = d.MaterialNumber; - var erpInventory = res_s.Data.FirstOrDefault(f => f.MaterialNumber == number && f.StockCode == d.StockCode - && f.OrgCode == d.OrgCode && f.Erp_SubStockId == subStockId); - decimal qty = erpInventory?.Qty ?? 0; + //var erpInventory = res_s.Data.FirstOrDefault(f => f.MaterialNumber == number && f.StockCode == d.StockCode + //&& f.OrgCode == d.OrgCode && f.Erp_SubStockId == subStockId); + //decimal qty = erpInventory?.Qty ?? 0; + decimal qty = 0; var unitNumber = _erpBasicDataExtendService.GetMaterialUnitNumber(materials, d.MaterialNumber); detils.Add(new ErpTakeStockDetailsSaveDto() {