From ca3a43c77564f40f95e23c844d71bbd3b1f7acff Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Wed, 27 Mar 2024 10:12:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 109 +++++++++++- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 34 ++++ .../Dto/Erp/ErpInStockResultDto.cs | 5 + .../Dto/InStockTask/InStockTaskBoxInfoDto.cs | 82 +++++++++ .../Dto/InStockTask/InStockTaskInfoDto.cs | 33 +++- src/WMS.Web.Domain/Entitys/InStockTaskBox.cs | 15 ++ src/WMS.Web.Domain/Entitys/InstockTask.cs | 16 ++ .../IInStockTaskRepositories.cs | 8 + src/WMS.Web.Domain/Mappers/InStockMapper.cs | 7 +- src/WMS.Web.Domain/Services/InStockService.cs | 3 +- .../InStockTaskRepositories.cs | 161 ++++++++++++++++++ 11 files changed, 461 insertions(+), 12 deletions(-) create mode 100644 src/WMS.Web.Core/Dto/InStockTask/InStockTaskBoxInfoDto.cs diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 803c34ca..9b3c988c 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -951,6 +951,11 @@ 单据类型 + + + 销售订单 + + 物料编码 @@ -1837,6 +1842,77 @@ 仓库编码 + + + 任务箱信息 + + + + + 箱ID + + + + + 箱编码 + + + + + 物料编码 + + + + + 物料规格型号 + + + + + 收货时间 + + + + + 收货人 + + + + + 上架人 + + + + + 入库方式:内部用 + + + + + 入库方式:1按箱,2按产品 + + + + + 入库时间(上架时间) + + + + + 箱数量 + + + + + 收货数量 + + + + + + 序列号 + + 入库任务单明细详情 @@ -1907,14 +1983,39 @@ 来源单号 - + - 箱ID + 销售订单号 - + - 明细 + 供应商 + + + + + 组织 + + + + + 入库状态 + + + + + 入库类型 + + + + + 创建时间(erp那边的创建时间) + + + + + 箱信息 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 06c93d6e..1168d252 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -913,6 +913,11 @@ 来源单号 + + + 销售订单号 + + 入库状态 @@ -958,6 +963,16 @@ 作废时间 + + + 供应商Id + + + + + 组织编码 + + 明细 @@ -1031,11 +1046,22 @@ 收货时间 + + + 收货人 + + 明细 + + + 收货 + + + erp入库任务单的对应box箱信息表的明细表 @@ -2680,6 +2706,14 @@ + + + 详情 + + + + + 实体:根据来源单号 diff --git a/src/WMS.Web.Core/Dto/Erp/ErpInStockResultDto.cs b/src/WMS.Web.Core/Dto/Erp/ErpInStockResultDto.cs index 7e7cc4f8..870a51be 100644 --- a/src/WMS.Web.Core/Dto/Erp/ErpInStockResultDto.cs +++ b/src/WMS.Web.Core/Dto/Erp/ErpInStockResultDto.cs @@ -78,5 +78,10 @@ namespace WMS.Web.Core.Dto.Erp /// 单据类型 /// public int Type { get; set; } + + /// + /// 销售订单 + /// + public string SaleBillNo { get; set; } } } diff --git a/src/WMS.Web.Core/Dto/InStockTask/InStockTaskBoxInfoDto.cs b/src/WMS.Web.Core/Dto/InStockTask/InStockTaskBoxInfoDto.cs new file mode 100644 index 00000000..a5cc09d7 --- /dev/null +++ b/src/WMS.Web.Core/Dto/InStockTask/InStockTaskBoxInfoDto.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.InStockTask +{ + /// + /// 任务箱信息 + /// + public class InStockTaskBoxInfoDto + { + + /// + /// 箱ID + /// + public int BoxId { get; set; } + + /// + /// 箱编码 + /// + public string BoxBillNo { get; set; } + + /// + /// 物料编码 + /// + public string MaterialNumber { get; set; } + + /// + /// 物料规格型号 + /// + public string Specifications { get; set; } + + /// + /// 收货时间 + /// + public string ReceiveTime { get; set; } + + /// + /// 收货人 + /// + public string Receiver { get; set; } + + /// + /// 上架人 + /// + public string Shelfer { get; set; } + + /// + /// 入库方式:内部用 + /// + public int MethodForInt { get; set; } + + /// + /// 入库方式:1按箱,2按产品 + /// + public string Method { get; set; } + + /// + /// 入库时间(上架时间) + /// + public string ShelfTime { get; set; } + + /// + /// 箱数量 + /// + public decimal Qty { get; set; } + + /// + /// 收货数量 + /// + public decimal ReceiveQty { get; set; } + + /// 入库数量 + /// + public decimal RealityQty { get; set; } + + /// + /// 序列号 + /// + public string SerialNumbers { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/InStockTask/InStockTaskInfoDto.cs b/src/WMS.Web.Core/Dto/InStockTask/InStockTaskInfoDto.cs index a3c451fa..a9ccf52f 100644 --- a/src/WMS.Web.Core/Dto/InStockTask/InStockTaskInfoDto.cs +++ b/src/WMS.Web.Core/Dto/InStockTask/InStockTaskInfoDto.cs @@ -23,14 +23,37 @@ namespace WMS.Web.Core.Dto.InStockTask public string SourceBillNo { get; set; } /// - /// 箱ID + /// 销售订单号 /// - public int BoxId { get; set; } - + public string SaleBillNo { get; set; } /// - /// 明细 + /// 供应商 /// - public List Details { get; set; } = new List(); + public string Supplier { get; set; } + + /// + /// 组织 + /// + public string Org { get; set; } + + /// + /// 入库状态 + /// + public string Status { get; set; } + /// + /// 入库类型 + /// + public string Type { get; set; } + + /// + /// 创建时间(erp那边的创建时间) + /// + public string CreateTime { get; set; } + + /// + /// 箱信息 + /// + public List Boxs { get; set; } = new List(); } } diff --git a/src/WMS.Web.Domain/Entitys/InStockTaskBox.cs b/src/WMS.Web.Domain/Entitys/InStockTaskBox.cs index b9f814e4..8d0bd708 100644 --- a/src/WMS.Web.Domain/Entitys/InStockTaskBox.cs +++ b/src/WMS.Web.Domain/Entitys/InStockTaskBox.cs @@ -39,9 +39,24 @@ namespace WMS.Web.Domain.Entitys /// public DateTime? CreateTime { get; set; } = DateTime.Now; + /// + /// 收货人 + /// + public int? ReceiverId { get; set; } + /// /// 明细 /// public List Details { get; set; } = new List(); + + /// + /// 收货 + /// + /// + public void Receiver(int staffId) + { + this.ReceiverId = staffId; + this.CreateTime = DateTime.Now; + } } } diff --git a/src/WMS.Web.Domain/Entitys/InstockTask.cs b/src/WMS.Web.Domain/Entitys/InstockTask.cs index 6f7f0071..84097ad4 100644 --- a/src/WMS.Web.Domain/Entitys/InstockTask.cs +++ b/src/WMS.Web.Domain/Entitys/InstockTask.cs @@ -27,6 +27,12 @@ namespace WMS.Web.Domain.Entitys /// 来源单号 /// public string SourceBillNo { get; set; } + + /// + /// 销售订单号 + /// + public string SaleBillNo { get; set; } + /// /// 入库状态 /// @@ -68,6 +74,16 @@ namespace WMS.Web.Domain.Entitys /// public DateTime? RepealTime { get; set; } + /// + /// 供应商Id + /// + public int SupplierId { get; set; } + + /// + /// 组织编码 + /// + public string OrgCode { get; set; } + /// /// 明细 /// diff --git a/src/WMS.Web.Domain/Infrastructure/IInStockTaskRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IInStockTaskRepositories.cs index e9b0a424..c9f9e29f 100644 --- a/src/WMS.Web.Domain/Infrastructure/IInStockTaskRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IInStockTaskRepositories.cs @@ -29,6 +29,14 @@ namespace WMS.Web.Domain.Infrastructure /// Task Get(int id); + /// + /// 详情 + /// + /// + /// + /// + Task GetInfo(int id, int companyId); + /// /// 实体:根据来源单号 /// diff --git a/src/WMS.Web.Domain/Mappers/InStockMapper.cs b/src/WMS.Web.Domain/Mappers/InStockMapper.cs index 010adcb5..0b764e41 100644 --- a/src/WMS.Web.Domain/Mappers/InStockMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InStockMapper.cs @@ -45,8 +45,8 @@ namespace WMS.Web.Domain.Mappers CreateMap(); - CreateMap() - .ForMember(x => x.Details, ops => ops.Ignore()); + //CreateMap() + // .ForMember(x => x.Details, ops => ops.Ignore()); CreateMap(); @@ -58,6 +58,9 @@ namespace WMS.Web.Domain.Mappers //ERP-同步结果对象统一映射 CreateMap() .ForMember(x => x.SourceBillNo, ops => ops.MapFrom(x => x.BillNo)) + .ForMember(x => x.SaleBillNo, ops => ops.MapFrom(x => x.SaleBillNo)) + .ForMember(x => x.OrgCode, ops => ops.MapFrom(x => x.OrgCode)) + .ForMember(x => x.SupplierId, ops => ops.MapFrom(x => x.SupplierId)) .ForMember(x => x.CreateTime, ops => ops.MapFrom(x => x.CreateTime)); CreateMap() diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs index 25e535b9..3e6ac22b 100644 --- a/src/WMS.Web.Domain/Services/InStockService.cs +++ b/src/WMS.Web.Domain/Services/InStockService.cs @@ -556,7 +556,8 @@ namespace WMS.Web.Domain.Services foreach (var item in dto.Boxs) { var taskBox = _mapper.Map(item); - taskBox.TaskId = entity.Id; + taskBox.TaskId = entity.Id; + taskBox.Receiver(staffId); var current_dto_box_dets = boxEntitys.Where(x => x.Id == item.BoxId).SelectMany(x => x.Details).ToList(); taskBox.Details = _mapper.Map>(current_dto_box_dets); taskBox.Details.ForEach(x => { x.ErpDetailId = item.ErpDetailId; }); diff --git a/src/WMS.Web.Repositories/InStockTaskRepositories.cs b/src/WMS.Web.Repositories/InStockTaskRepositories.cs index 73a25bf3..e2a442ff 100644 --- a/src/WMS.Web.Repositories/InStockTaskRepositories.cs +++ b/src/WMS.Web.Repositories/InStockTaskRepositories.cs @@ -115,6 +115,167 @@ namespace WMS.Web.Repositories return list; } + /// + /// 获取详情 + /// + /// + /// + public async Task GetInfo(int id, int companyId) + { + + //1.获取物料集合和组织集合和供应商的集合 + var materials = new List(); + var materials_result = await _erpService.BillQueryForMaterial(); + if (materials_result.IsSuccess) + materials = materials_result.Data.ToList(); + + //组织集合 + var orgs = new List(); + var orgs_result = await _erpService.BillQueryForOrg(); + if (orgs_result.IsSuccess) + orgs = orgs_result.Data.ToList(); + + //供应商集合 + var suppliers = new List(); + var suppliers_result = await _erpService.BillQueryForSupplier(); + if (suppliers_result.IsSuccess) + suppliers = suppliers_result.Data.ToList(); + + var entity = await _context.InStockTask.Where(x => x.Id == id).FirstOrDefaultAsync(); + + if (entity != null) + { + var response = new InStockTaskInfoDto() + { + Id = entity.Id, + BillNo = entity.BillNo, + SourceBillNo = entity.SourceBillNo, + SaleBillNo = entity.SaleBillNo, + Status = entity.Status.GetRemark(), + Type = entity.Type.GetRemark(), + Supplier = _erpBasicDataExtendService.GetSupplierName(suppliers, entity.SupplierId), + Org = _erpBasicDataExtendService.GetOrgName(orgs, entity.OrgCode), + CreateTime = entity.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") + }; + if (entity.Type == InstockType.Purchase) + { + //采购任务的箱明细 + var boxList = await _context.InStockTaskBoxDetails + .GroupJoin(_context.InstockTaskBox, boxde => boxde.Fid, ts => ts.Id, (detail, ts) => new { detail, ts }) + .SelectMany(x => x.ts.DefaultIfEmpty(), (p, box) => new { p.detail, box }) + .Where(x => x.box.TaskId == entity.Id).Select(x => new InStockTaskBoxInfoDto() + { + BoxId=x.box.BoxId, + BoxBillNo = x.box.BoxBillNo, + MaterialNumber = x.detail.MaterialNumber, + Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, x.detail.MaterialNumber), + ReceiveTime = x.box.CreateTime.HasValue ? "" : x.box.CreateTime.Value.ToString("yyyy-MM-dd HH:mm:ss"), + Receiver = x.box.ReceiverId.HasValue ? _singleDataService.GetSingleData(SingleAction.Staffs, companyId, x.box.ReceiverId.Value) : "", + Qty = x.detail.ReceiveQty, + ReceiveQty=x.detail.ReceiveQty + }).ToListAsync(); + + if (boxList != null && boxList.Count != 0) + { + //采购入库明细 + var boxInstockList_details = await _context.InStockDetails.Where(x => x.TaskId == entity.Id).ToListAsync(); + + if (boxInstockList_details != null && boxInstockList_details.Count != 0) + { + var instockOrder_ids= boxInstockList_details.GroupBy(x => x.Fid).Select(x => x.Key).ToList(); + var instockOrder=await _context.Instock.Where(x => instockOrder_ids.Contains(x.Id)).ToListAsync(); + //var boxInstockList = boxInstockList_details.GroupBy(x => new { BoxId = x.BoxId, MaterialNumber = x.MaterialNumber }). + // Select(x => new { BoxId = x.Key.BoxId, MaterialNumber = x.Key.MaterialNumber, RealityQty = x.Sum(t => t.Qty) }).ToList(); + + boxList.ForEach(x => + { + var currentInstock= boxInstockList_details.Where(t => t.BoxId == x.BoxId && t.MaterialNumber == x.MaterialNumber).FirstOrDefault(); + if (currentInstock != null) { + var order= instockOrder.Where(o => o.Id == currentInstock.Fid).FirstOrDefault(); + x.RealityQty = currentInstock.Qty; + x.Shelfer = _singleDataService.GetSingleData(SingleAction.Staffs, companyId, (order == null ? 0 : order.CreatorId)); + x.ShelfTime= order == null ? "" : order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"); + } + }); + } + + //序列号 + var materNumbs = boxList.GroupBy(x => x.MaterialNumber).Select(x => x.Key).ToList(); + var serialNumbList = _context.SerialNumbers.Where(x => materNumbs.Contains(x.MaterialNumber)).ToList(); + + boxList.ForEach(x => + { + x.SerialNumbers = (string.Join(",", serialNumbList.Where(x => x.MaterialNumber == x.MaterialNumber).Select(x => x.SerialNumber).ToList())).TrimEnd(','); + }); + } + response.Boxs = boxList; + } + else + { + var boxList= await _context.InStockDetails + .GroupJoin(_context.Instock, det => det.Fid, ts => ts.Id, (detail, ts) => new { detail, ts }) + .SelectMany(x => x.ts.DefaultIfEmpty(), (p, order) => new { p.detail, order }) + .GroupJoin(_context.Box, p => p.detail.BoxId, ts => ts.Id, (p, ts) => new { p.detail,p.order, ts }) + .SelectMany(x => x.ts.DefaultIfEmpty(), (p, box) => new { p.detail, p.order,box }) + .Where(x => x.detail.TaskId == entity.Id).Select(x => new InStockTaskBoxInfoDto() + { + BoxId=x.box.Id, + BoxBillNo = x.box.BoxBillNo, + Method=x.order.Method.GetRemark(), + MethodForInt=(int)x.order.Method, + MaterialNumber = x.detail.MaterialNumber, + Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, x.detail.MaterialNumber), + + Qty=0, + RealityQty = x.detail.Qty, + ShelfTime = x.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), + Shelfer =_singleDataService.GetSingleData(SingleAction.Staffs, companyId, x.order.CreatorId), + + ReceiveQty=x.detail.Qty, + Receiver= _singleDataService.GetSingleData(SingleAction.Staffs, companyId, x.order.CreatorId), + ReceiveTime = x.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), + + SerialNumbers= (string.Join(",", x.detail.SerialNumbers).TrimEnd(',')) + + }).ToListAsync(); + + if (boxList != null && boxList.Count != 0) + { + var boxIds= boxList.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); + + var boxdetails= await _context.BoxDetails + .GroupJoin(_context.Box, det => det.Fid, ts => ts.Id, (detail, ts) => new { detail, ts }) + .SelectMany(x => x.ts.DefaultIfEmpty(), (p, box) => new { p.detail, box }) + .Where(x => boxIds.Contains(x.box.Id)).Select(x=>new + { + BoxId=x.box.Id, + MaterialNumber=x.detail.MaterialNumber, + Qty=x.detail.Qty + }).ToListAsync(); + + if (boxdetails != null && boxdetails.Count != 0) + { + boxList.ForEach(x => + { + var method = (InventoryInOutMethod)x.MethodForInt; + if (method == InventoryInOutMethod.Box) { + var currentBoxDet = boxdetails.Where(t => t.BoxId == x.BoxId && t.MaterialNumber == x.MaterialNumber).FirstOrDefault(); + if (currentBoxDet != null) + { + x.Qty = currentBoxDet.Qty; + } + } + }); + } + } + + response.Boxs = boxList; + } + + return response; + } + return null; + } /// /// 列表-根据明细中的来源单号