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;
+ }
///
/// 列表-根据明细中的来源单号