diff --git a/src/WMS.Web.Api/Controllers/OutStockController.cs b/src/WMS.Web.Api/Controllers/OutStockController.cs index b9a86961..ae68fd50 100644 --- a/src/WMS.Web.Api/Controllers/OutStockController.cs +++ b/src/WMS.Web.Api/Controllers/OutStockController.cs @@ -52,6 +52,24 @@ namespace WMS.Web.Api.Controllers return result; } + /// + /// 获取详情 + /// + /// + /// + [HttpGet] + [Route("GetInfo/{id}")] + public async Task> GetInfo([FromRoute] int id) + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null || loginInfo.UserInfo == null) + return Result.ReFailure(ResultCodes.Token_Invalid_Error); + + var response = await _repositories.GetInfo(id); + return Result.ReSuccess(response); + } + + /// /// 出库保存(出库)-PDA /// @@ -80,7 +98,7 @@ namespace WMS.Web.Api.Controllers if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); - return await _outStockService.Sync(dto); + return await _outStockService.Sync(dto, loginInfo); } } } diff --git a/src/WMS.Web.Api/Controllers/OutStockTaskController.cs b/src/WMS.Web.Api/Controllers/OutStockTaskController.cs index 63798774..e12f0c28 100644 --- a/src/WMS.Web.Api/Controllers/OutStockTaskController.cs +++ b/src/WMS.Web.Api/Controllers/OutStockTaskController.cs @@ -67,7 +67,7 @@ namespace WMS.Web.Api.Controllers if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); - return await _outStockTaskService.Repeal(dto,loginInfo); + return await _outStockTaskService.Repeal(dto, loginInfo); } /// @@ -99,10 +99,25 @@ namespace WMS.Web.Api.Controllers if (loginInfo == null || loginInfo.UserInfo == null) return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); - var res= await _repositories.GetOutStockTaskByNo(billNo); + var res = await _repositories.GetOutStockTaskByNo(billNo); if (res == null) return ResultList.ReFailure(ResultCodes.OutStockTaskNoData); return ResultList.ReSuccess(res); } + /// + /// 刷新金蝶数据 + /// + /// + /// + [HttpPost] + [Route("Refresh")] + public async Task Refresh(OperateStrRequest 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 _outStockTaskService.Ssyn(dto.Ids); + } } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 5940d92e..3cb696f0 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -218,6 +218,13 @@ + + + 获取详情 + + + + 出库保存(出库)-PDA @@ -265,6 +272,13 @@ + + + 刷新金蝶数据 + + + + 系统配置 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 1b8a2f33..300f309f 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -2395,6 +2395,11 @@ 操作 Id集合 + + + 操作 string集合 + + 老ops箱信息请求 @@ -2695,6 +2700,31 @@ 仓库编码 + + + 出库单详情 + + + + + 创建人 + + + + + 操作人 + + + + + 创建时间(出库时间) + + + + + 同步时间 + + 出库列表详情 @@ -2775,6 +2805,11 @@ 出库数量 + + + 备注 + + 出库单列表请求 @@ -3045,16 +3080,21 @@ 物料ID - + 仓库ID - + 仓位ID + + + 子仓库(跟金蝶交互字段) + + 盘点前数量(wms系统数量) @@ -3120,6 +3160,11 @@ 仓位 + + + 子仓库 + + 盘点前数量(wms系统数量) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 6c5d079d..cf9938ee 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -742,6 +742,11 @@ 创建人 + + + 操作人 + + 创建时间(出库时间) @@ -752,6 +757,16 @@ 同步成功或者失败 null 就是未同步 + + + 同步时间 + + + + + 备注 + + 明细 @@ -763,6 +778,12 @@ + + + 同步金蝶 + + + 生成单据号 @@ -2442,7 +2463,7 @@ - + 同步金蝶 diff --git a/src/WMS.Web.Core/Dto/OperateRequest.cs b/src/WMS.Web.Core/Dto/OperateRequest.cs index 1d8ba550..b3afdd03 100644 --- a/src/WMS.Web.Core/Dto/OperateRequest.cs +++ b/src/WMS.Web.Core/Dto/OperateRequest.cs @@ -19,4 +19,11 @@ namespace WMS.Web.Core.Dto { public List Ids { get; set; } = new List(); } + /// + /// 操作 string集合 + /// + public class OperateStrRequest + { + public List Ids { get; set; } = new List(); + } } diff --git a/src/WMS.Web.Core/Dto/OutStock/OutStockInfoResponse.cs b/src/WMS.Web.Core/Dto/OutStock/OutStockInfoResponse.cs new file mode 100644 index 00000000..99c491c1 --- /dev/null +++ b/src/WMS.Web.Core/Dto/OutStock/OutStockInfoResponse.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.OutStock +{ + /// + /// 出库单详情 + /// + public class OutStockInfoResponse + { + /// + /// 创建人 + /// + public string Creator { get; set; } + /// + /// 操作人 + /// + public string Operate { get; set; } + /// + /// 创建时间(出库时间) + /// + public string CreateTime { get; set; } + /// + /// 同步时间 + /// + public string SyncTime { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/OutStock/OutStockQueryInfoResponse.cs b/src/WMS.Web.Core/Dto/OutStock/OutStockQueryInfoResponse.cs index 31bb7f9f..db89a365 100644 --- a/src/WMS.Web.Core/Dto/OutStock/OutStockQueryInfoResponse.cs +++ b/src/WMS.Web.Core/Dto/OutStock/OutStockQueryInfoResponse.cs @@ -70,5 +70,9 @@ namespace WMS.Web.Core.Dto.OutStock /// 出库数量 /// public decimal Qty { get; set; } + /// + /// 备注 + /// + public string Remark { get; set; } } } diff --git a/src/WMS.Web.Core/Dto/TakeStock/SaveTakeStockRequest.cs b/src/WMS.Web.Core/Dto/TakeStock/SaveTakeStockRequest.cs index 4e863ae8..53f71c33 100644 --- a/src/WMS.Web.Core/Dto/TakeStock/SaveTakeStockRequest.cs +++ b/src/WMS.Web.Core/Dto/TakeStock/SaveTakeStockRequest.cs @@ -24,12 +24,16 @@ namespace WMS.Web.Core.Dto.TakeStock /// 仓库ID /// [Required(ErrorMessage = "仓库不能为空")] - public int StockId { get; set; } + public string StockCode { get; set; } /// /// 仓位ID /// [Required(ErrorMessage = "仓位不能为空")] - public int SubStockId { get; set; } + public string SubStockCode { get; set; } + /// + /// 子仓库(跟金蝶交互字段) + /// + public string Erp_SubStockCode { get; set; } /// /// 盘点前数量(wms系统数量) /// diff --git a/src/WMS.Web.Core/Dto/TakeStock/TakeStockQueryInfoResponse.cs b/src/WMS.Web.Core/Dto/TakeStock/TakeStockQueryInfoResponse.cs index 8d092964..dee0857a 100644 --- a/src/WMS.Web.Core/Dto/TakeStock/TakeStockQueryInfoResponse.cs +++ b/src/WMS.Web.Core/Dto/TakeStock/TakeStockQueryInfoResponse.cs @@ -42,6 +42,10 @@ namespace WMS.Web.Core.Dto.TakeStock /// public string SubStock { get; set; } /// + /// 子仓库 + /// + public string Erp_SubStockCode { get; set; } + /// /// 盘点前数量(wms系统数量) /// public decimal BeforeQty { get; set; } diff --git a/src/WMS.Web.Domain/Entitys/OutStock.cs b/src/WMS.Web.Domain/Entitys/OutStock.cs index e9a7d6ef..a13afe31 100644 --- a/src/WMS.Web.Domain/Entitys/OutStock.cs +++ b/src/WMS.Web.Domain/Entitys/OutStock.cs @@ -56,6 +56,11 @@ namespace WMS.Web.Domain.Entitys [Column("CreatorId")] public int CreatorId { get; set; } /// + /// 操作人 + /// + [Column("OperateId")] + public int OperateId { get; set; } + /// /// 创建时间(出库时间) /// [Column("CreateTime")] @@ -66,6 +71,16 @@ namespace WMS.Web.Domain.Entitys [Column("SuccessSync")] public bool? SuccessSync { get; set; } /// + /// 同步时间 + /// + [Column("SyncTime")] + public DateTime? SyncTime { get; set; } + /// + /// 备注 + /// + [Column("Remark")] + public string Remark { get; set; } + /// /// 明细 /// public List Details = new List(); @@ -82,7 +97,17 @@ namespace WMS.Web.Domain.Entitys this.CreatorId = creatorId; this.CreateTime = DateTime.Now; } - + /// + /// 同步金蝶 + /// + /// + public void Sync(bool isSuccess, int operateId,string remark) + { + this.SuccessSync = isSuccess; + this.Remark = remark; + this.OperateId = operateId; + this.SyncTime = DateTime.Now; + } /// /// 生成单据号 diff --git a/src/WMS.Web.Domain/IService/IOutStockService.cs b/src/WMS.Web.Domain/IService/IOutStockService.cs index f051c911..872409c8 100644 --- a/src/WMS.Web.Domain/IService/IOutStockService.cs +++ b/src/WMS.Web.Domain/IService/IOutStockService.cs @@ -18,7 +18,7 @@ namespace WMS.Web.Domain.IService //出库单保存 Task Save(SaveOutStockRequest dto, LoginInDto loginInfo); // 同步金蝶 - Task Sync(OperateRequest dto); + Task Sync(OperateRequest dto, LoginInDto loginInfo); } } diff --git a/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs index 50fcfac9..3d42c2f2 100644 --- a/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs @@ -21,5 +21,7 @@ namespace WMS.Web.Domain.Infrastructure Task> GetEntityList(List ids); /// 修改实体集合 Task EditEntityList(List entitys, bool isTransaction = true); + //获取详情 + Task GetInfo(int id); } } diff --git a/src/WMS.Web.Domain/Services/OutStockService.cs b/src/WMS.Web.Domain/Services/OutStockService.cs index 18ac6157..db05fb70 100644 --- a/src/WMS.Web.Domain/Services/OutStockService.cs +++ b/src/WMS.Web.Domain/Services/OutStockService.cs @@ -29,9 +29,11 @@ namespace WMS.Web.Domain.Services private readonly IOutStockRepositories _outStockRepositories; private readonly IOutStockTaskRepositories _outStockTaskRepositories; private readonly IOutStockTaskService _outStockTaskService; + private readonly IErpService _erpService; public OutStockService(IMapper mapper, ILoginService loginService, IBasicsRepositories transactionRepositories, - IOutStockRepositories outStockRepositories, IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService) + IOutStockRepositories outStockRepositories, IOutStockTaskRepositories outStockTaskRepositories, + IOutStockTaskService outStockTaskService, IErpService erpService) { _mapper = mapper; _loginService = loginService; @@ -39,6 +41,7 @@ namespace WMS.Web.Domain.Services _outStockRepositories = outStockRepositories; _outStockTaskRepositories = outStockTaskRepositories; _outStockTaskService = outStockTaskService; + _erpService = erpService; } /// /// 出库单 @@ -95,9 +98,19 @@ namespace WMS.Web.Domain.Services /// /// /// - public Task Sync(OperateRequest dto) + public async Task Sync(OperateRequest dto, LoginInDto loginInfo) { - return Task.FromResult(Result.ReSuccess()); + var list = await _outStockRepositories.GetEntityList(dto.Ids); + foreach (var entity in list) + { + //下推金蝶 + var res = await _erpService.Push(new Core.Dto.Erp.ErpPushDto() { }); + entity.Sync(res.IsSuccess, loginInfo.UserInfo.StaffId, res.Message); + } + var isSuccess = await _outStockRepositories.EditEntityList(list, true); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + + return Result.ReSuccess(); } } } diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index 15813662..922a55e5 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -89,9 +89,10 @@ namespace WMS.Web.Domain.Services.Public /// /// erp:单据查询-采购入库单 /// + /// 模糊搜索 /// 单据编号集合精确查找 /// - public async Task> BillQueryForPurchaseInStock(List sourceBillNos = null) + public async Task> BillQueryForPurchaseInStock(string billNo = "", List sourceBillNos = null) { try { @@ -121,7 +122,7 @@ namespace WMS.Web.Domain.Services.Public //3.单据类型:标准采购订单和标准委外订单 //4.明细关闭状态:正常 //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 - param.FilterString = "FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "' and FDocumentStatus='C' and (FBillTypeID='83d822ca3e374b4ab01e5dd46a0062bd' or FBillTypeID='6d01d059713d42a28bb976c90a121142') and FMRPCloseStatus='A'"; + param.FilterString = "FCreateDate>='" + beginTime + "' and FCreateDate<='" + endTime + "' and FDocumentStatus='C' and (FBillTypeID='83d822ca3e374b4ab01e5dd46a0062bd' or FBillTypeID='6d01d059713d42a28bb976c90a121142') and FMRPCloseStatus='A'"; param.FilterString = param.FilterString + " and FSOSTOCKID.FNumber in ("; var str = ""; @@ -136,6 +137,12 @@ namespace WMS.Web.Domain.Services.Public } param.FilterString = param.FilterString + str + ")"; + //单据编号模糊查询 + if (!string.IsNullOrEmpty(billNo)) + { + param.FilterString = param.FilterString + " and FBillNo like '%" + billNo + "%'"; + } + //根据原订单号查询 if (sourceBillNos != null && sourceBillNos.Count() > 0) { @@ -265,7 +272,7 @@ namespace WMS.Web.Domain.Services.Public return ResultList.ReFailure(ResultCodes.ErpMaterialError); } - + } @@ -544,34 +551,46 @@ namespace WMS.Web.Domain.Services.Public { try { - var token_result = await this.Init(); - if (!token_result.IsSuccess) - return ResultList.ReFailure(token_result); - var query = new ErpBillQueryDto(token_result.Data); - var param = new ErpBillQueryParamDto(FormIdParam.BD_STOCK.ToString()); - param.FieldKeys = "FStockFlexDetail_FDetailID,FFlexEntryName,FFlexEntryId,'0'"; - param.Limit = 100000; - if (!string.IsNullOrEmpty(code)) - param.FilterString = "FNumber='" + code + "'";//FNumber='C' - query.Data = JsonConvert.SerializeObject(param); - var json = JsonConvert.SerializeObject(query); - - var result_json = await _client.ExecuteBillQueryAsync(json); - var result = JsonConvert.DeserializeObject>>(result_json); - - var list = new List(); - foreach (var item in result) + //1.获取缓存中的仓库数据; + var cache_key = "erp_substock_list"; + var stocks = _memoryCache.Get>(cache_key); + if (stocks == null || stocks.Count == 0) { - var lis = new ErpStockDto(); - lis.Id = int.Parse(item[0]); - lis.Name = item[1]; - lis.Code = item[2]; - lis.OrgId = Convert.ToInt32(item[3]); - list.Add(lis); + var token_result = await this.Init(); + if (!token_result.IsSuccess) + return ResultList.ReFailure(token_result); + var query = new ErpBillQueryDto(token_result.Data); + var param = new ErpBillQueryParamDto(FormIdParam.BD_STOCK.ToString()); + param.FieldKeys = "FStockFlexDetail_FDetailID,FFlexEntryName,FFlexEntryId,'0'"; + param.Limit = 100000; + if (!string.IsNullOrEmpty(code)) + param.FilterString = "FNumber='" + code + "'";//FNumber='C' + query.Data = JsonConvert.SerializeObject(param); + var json = JsonConvert.SerializeObject(query); + var result_json = await _client.ExecuteBillQueryAsync(json); + var result = JsonConvert.DeserializeObject>>(result_json); + + var list = new List(); + foreach (var item in result) + { + var lis = new ErpStockDto(); + lis.Id = int.Parse(item[0]); + lis.Name = item[1]; + lis.Code = item[2]; + lis.OrgId = Convert.ToInt32(item[3]); + list.Add(lis); + + } + //5.供应商集合进行缓存 + _memoryCache.Set(cache_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(12))); + _logger.LogInformation($"子仓库拉取-总条数:{list.Count}"); + return ResultList.ReSuccess(list); + } + else + { + return ResultList.ReSuccess(stocks); } - return ResultList.ReSuccess(list); - } catch (Exception) { @@ -1082,7 +1101,7 @@ namespace WMS.Web.Domain.Services.Public } } - + #endregion } diff --git a/src/WMS.Web.Repositories/OutStockRepositories.cs b/src/WMS.Web.Repositories/OutStockRepositories.cs index 132463ab..311988da 100644 --- a/src/WMS.Web.Repositories/OutStockRepositories.cs +++ b/src/WMS.Web.Repositories/OutStockRepositories.cs @@ -169,7 +169,8 @@ namespace WMS.Web.Repositories MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.detail.MaterialId), MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, s.detail.MaterialId), Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.detail.MaterialId), - Qty = s.detail.Qty + Qty = s.detail.Qty, + Remark = s.order.Remark #endregion }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); @@ -272,5 +273,24 @@ namespace WMS.Web.Repositories return res.Clone(); } + /// + /// 获取详情 + /// + /// + /// + public async Task GetInfo(int id) + { + var res = await _context.OutStock + .FirstOrDefaultAsync(f => id == f.Id); + if (res == null) return null; + OutStockInfoResponse response = new OutStockInfoResponse() + { + CreateTime = res.CreateTime.DateToStringSeconds(), + SyncTime = res.SyncTime.DateToStringSeconds(), + Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, res.CreatorId), + Operate = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, res.OperateId) + }; + return response; + } } } diff --git a/src/WMS.Web.Repositories/SerialNumberOperateRepositories.cs b/src/WMS.Web.Repositories/SerialNumberOperateRepositories.cs index a458bc4b..bd311b89 100644 --- a/src/WMS.Web.Repositories/SerialNumberOperateRepositories.cs +++ b/src/WMS.Web.Repositories/SerialNumberOperateRepositories.cs @@ -39,7 +39,7 @@ namespace WMS.Web.Repositories _transaction.Commit(); return true; } - catch + catch (Exception ex) { if (_transaction != null) _transaction.Rollback(); diff --git a/src/WMS.Web.Repositories/TakeStockRepositories.cs b/src/WMS.Web.Repositories/TakeStockRepositories.cs index 5e6c6526..114b7707 100644 --- a/src/WMS.Web.Repositories/TakeStockRepositories.cs +++ b/src/WMS.Web.Repositories/TakeStockRepositories.cs @@ -166,6 +166,11 @@ namespace WMS.Web.Repositories if (!materials_result.IsSuccess) return (new List(), 0); var materials = materials_result.Data.ToList(); + //金蝶子仓库 + var subStock_result = await _erpService.BillQueryForSubStock(); + if (!subStock_result.IsSuccess) + return (new List(), 0); + var subStocks = subStock_result.Data.ToList(); var query = _context.TakeStock //.GroupJoin(_context.TakeStock, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) @@ -193,6 +198,7 @@ namespace WMS.Web.Repositories Unit = _erpBasicDataExtendService.GetMaterialUnitName(materials, s.MaterialId), Stock = _singleDataService.GetSingleData(SingleAction.Stocks, _loginRepositories.CompanyId, s.StockCode), SubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, s.SubStockCode), + Erp_SubStockCode= _erpBasicDataExtendService.GetStockName(subStocks, s.Erp_SubStockCode), BeforeQty = s.BeforeQty, AfterQty = s.AfterQty, FinalQty = s.FinalQty,