调整出库任务单结构

This commit is contained in:
18942506660
2023-11-16 11:03:07 +08:00
parent be659f01ad
commit d7b2c9bbb2
12 changed files with 199 additions and 138 deletions

View File

@@ -131,7 +131,11 @@ namespace WMS.Web.Api.Controllers
if (loginInfo == null || loginInfo.UserInfo == null) if (loginInfo == null || loginInfo.UserInfo == null)
return ResultList<GetOutStockTaskByNoResponse>.ReFailure(ResultCodes.Token_Invalid_Error); return ResultList<GetOutStockTaskByNoResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
List<string> str = new List<string>();
str.Add(billNo);
var res2 = await _repositories.GetListBySourceBillNo(str);
var res = await _repositories.GetOutStockTaskListByNo(billNo); var res = await _repositories.GetOutStockTaskListByNo(billNo);
if (res == null || res.Count() == 0) return ResultList<GetOutStockTaskByNoResponse>.ReFailure(ResultCodes.OutStockTaskNoData); if (res == null || res.Count() == 0) return ResultList<GetOutStockTaskByNoResponse>.ReFailure(ResultCodes.OutStockTaskNoData);
return ResultList<GetOutStockTaskByNoResponse>.ReSuccess(res); return ResultList<GetOutStockTaskByNoResponse>.ReSuccess(res);
} }

View File

@@ -964,6 +964,11 @@
同步成功或者失败 null 就是未同步 同步成功或者失败 null 就是未同步
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Domain.Entitys.OutStock.SuccessSyncFail">
<summary>
同步失败的源订单号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStock.SyncTime"> <member name="P:WMS.Web.Domain.Entitys.OutStock.SyncTime">
<summary> <summary>
同步时间 同步时间
@@ -985,7 +990,7 @@
</summary> </summary>
<param name="creatorId"></param> <param name="creatorId"></param>
</member> </member>
<member name="M:WMS.Web.Domain.Entitys.OutStock.Sync(System.Boolean,System.Int32,System.String)"> <member name="M:WMS.Web.Domain.Entitys.OutStock.Sync(System.Collections.Generic.List{System.String},System.Boolean,System.Int32,System.String)">
<summary> <summary>
同步金蝶 同步金蝶
</summary> </summary>
@@ -1142,21 +1147,6 @@
单据头Id 单据头Id
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.Erp_DetailId">
<summary>
对应金蝶单据明细id(销售出库同步金蝶下推使用)
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.SourceBillNos">
<summary>
来源单号(合并后有多个)
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.SaleBillNos">
<summary>
销售订单号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.MaterialId"> <member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.MaterialId">
<summary> <summary>
物料Id 物料Id
@@ -1182,16 +1172,6 @@
已出库数量 已出库数量
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.RealityQty_Dic">
<summary>
已出库数量(合并后不同物料 分别出库多少)
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.AccruedQty_Dic">
<summary>
应出库数量(合并后不同物料 分别应出多少)
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.Remark"> <member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.Remark">
<summary> <summary>
订单明细备注 订单明细备注
@@ -1207,6 +1187,51 @@
出库结束时间 出库结束时间
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskDetails.ErpDetails">
<summary>
对应erp明细 同一个物料 存在于不同的来源单中(合并后出现多条)
</summary>
</member>
<member name="T:WMS.Web.Domain.Entitys.OutStockTaskErpDetails">
<summary>
对应金蝶的明细
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskErpDetails.Id">
<summary>
主键 订单编号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskErpDetails.DetailId">
<summary>
任务单明细Id
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskErpDetails.Erp_DetailId">
<summary>
对应金蝶单据明细id(销售出库同步金蝶下推使用)
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskErpDetails.SourceBillNo">
<summary>
来源单号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskErpDetails.SaleBillNo">
<summary>
销售订单号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskErpDetails.AccruedQty">
<summary>
应出库数量
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.OutStockTaskErpDetails.RealityQty">
<summary>
已出库数量
</summary>
</member>
<member name="T:WMS.Web.Domain.Entitys.SerialNumberOperate"> <member name="T:WMS.Web.Domain.Entitys.SerialNumberOperate">
<summary> <summary>
序列号操作记录表 序列号操作记录表
@@ -1882,7 +1907,7 @@
</member> </member>
<member name="M:WMS.Web.Domain.Infrastructure.IOutStockTaskRepositories.GetListBySourceBillNo(System.Collections.Generic.List{System.String})"> <member name="M:WMS.Web.Domain.Infrastructure.IOutStockTaskRepositories.GetListBySourceBillNo(System.Collections.Generic.List{System.String})">
<summary> <summary>
列表-根据明细中的来源单号 列表-根据明细中的来源单号精确匹配
</summary> </summary>
<param name="sourceBillNos"></param> <param name="sourceBillNos"></param>
<returns></returns> <returns></returns>

View File

@@ -168,10 +168,13 @@ namespace WMS.Web.Domain.Entitys
if (detail_new != null) if (detail_new != null)
{ {
detail_new.AccruedQty += d.AccruedQty;//应出数量累加 detail_new.AccruedQty += d.AccruedQty;//应出数量累加
detail_new.SaleBillNos.AddRange(d.SaleBillNos); foreach (var erpd in d.ErpDetails)
detail_new.SourceBillNos.AddRange(d.SourceBillNos); {
foreach (var dic in d.AccruedQty_Dic) var cd = erpd.Clone();
detail_new.AccruedQty_Dic.Add(dic.Key, dic.Value); cd.Id = 0;cd.DetailId = 0;
detail_new.ErpDetails.Add(cd);
}
} }
else else
details_new.Add(d); details_new.Add(d);

View File

@@ -28,22 +28,6 @@ namespace WMS.Web.Domain.Entitys
[Column("Fid")] [Column("Fid")]
public int Fid { get; set; } public int Fid { get; set; }
/// <summary> /// <summary>
/// 对应金蝶单据明细id(销售出库同步金蝶下推使用)
/// </summary>
[Column("Erp_DetailId")]
public int Erp_DetailId { get; set; }
/// <summary>
/// 来源单号(合并后有多个)
///</summary>
[Column("SourceBillNo")]
public List<string> SourceBillNos { get; set; }
/// <summary>
/// 销售订单号
///</summary>
[Column("SaleBillNo")]
public List<string> SaleBillNos { get; set; }
/// <summary>
/// 物料Id /// 物料Id
///</summary> ///</summary>
[Column("MaterialId")] [Column("MaterialId")]
@@ -69,16 +53,6 @@ namespace WMS.Web.Domain.Entitys
[Column("RealityQty")] [Column("RealityQty")]
public decimal RealityQty { get; set; } public decimal RealityQty { get; set; }
/// <summary> /// <summary>
/// 已出库数量(合并后不同物料 分别出库多少)
///</summary>
[Column("RealityQty_Dic")]
public Dictionary<string, decimal> RealityQty_Dic { get; set; } = new Dictionary<string, decimal>();
/// <summary>
/// 应出库数量(合并后不同物料 分别应出多少)
///</summary>
[Column("AccruedQty_Dic")]
public Dictionary<string, decimal> AccruedQty_Dic { get; set; } = new Dictionary<string, decimal>();
/// <summary>
/// 订单明细备注 /// 订单明细备注
///</summary> ///</summary>
[Column("Remark")] [Column("Remark")]
@@ -93,7 +67,10 @@ namespace WMS.Web.Domain.Entitys
///</summary> ///</summary>
[Column("OutStockEndTime")] [Column("OutStockEndTime")]
public DateTime? OutStockEndTime { get; set; } public DateTime? OutStockEndTime { get; set; }
/// <summary>
/// 对应erp明细 同一个物料 存在于不同的来源单中(合并后出现多条)
/// </summary>
public List<OutStockTaskErpDetails> ErpDetails { get; set; } = new List<OutStockTaskErpDetails>();
} }
} }

View File

@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
using WMS.Web.Core;
namespace WMS.Web.Domain.Entitys
{
/// <summary>
/// 对应金蝶的明细
/// </summary>
[Serializable]
[Table("t_erp_outstock_task_erp_details")]
public class OutStockTaskErpDetails : EntityBase
{
public OutStockTaskErpDetails() { }
/// <summary>
/// 主键 订单编号
/// </summary>
[Column("Id")]
public override int Id { get; set; }
/// <summary>
/// 任务单明细Id
/// </summary>
[Column("DetailId")]
public int DetailId { get; set; }
/// <summary>
/// 对应金蝶单据明细id(销售出库同步金蝶下推使用)
/// </summary>
[Column("Erp_DetailId")]
public int Erp_DetailId { get; set; }
/// <summary>
/// 来源单号
///</summary>
[Column("SourceBillNo")]
public string SourceBillNo { get; set; }
/// <summary>
/// 销售订单号
///</summary>
[Column("SaleBillNo")]
public string SaleBillNo { get; set; }
/// <summary>
/// 应出库数量
///</summary>
[Column("AccruedQty")]
public decimal AccruedQty { get; set; }
/// <summary>
/// 已出库数量
///</summary>
[Column("RealityQty")]
public decimal RealityQty { get; set; }
}
}

View File

@@ -23,7 +23,7 @@ namespace WMS.Web.Domain.Infrastructure
/// 查询实体集合 /// 查询实体集合
Task<List<OutStockTask>> GetEntityList(List<int> ids); Task<List<OutStockTask>> GetEntityList(List<int> ids);
/// <summary> /// <summary>
/// 列表-根据明细中的来源单号 /// 列表-根据明细中的来源单号精确匹配
/// </summary> /// </summary>
/// <param name="sourceBillNos"></param> /// <param name="sourceBillNos"></param>
/// <returns></returns> /// <returns></returns>

View File

@@ -24,9 +24,8 @@ namespace WMS.Web.Domain.Mappers
CreateMap<OutStockTask, GetOutStockTaskByNoResponse>(); CreateMap<OutStockTask, GetOutStockTaskByNoResponse>();
CreateMap<OutStockTaskDetails, GetOutStockTaskByNoDetailsResponse>(); CreateMap<OutStockTaskDetails, GetOutStockTaskByNoDetailsResponse>();
CreateMap<ErpDeliveryNoticeOutStockResultDto, OutStockTaskDetails>() CreateMap<ErpDeliveryNoticeOutStockResultDto, OutStockTaskDetails>();
.ForPath(x => x.SourceBillNos, ops => ops.MapFrom(x => new List<string>() { x.SourceBillNo })) CreateMap<ErpDeliveryNoticeOutStockResultDto, OutStockTaskErpDetails>();
.ForPath(x => x.SaleBillNos, ops => ops.MapFrom(x => new List<string>() { x.SaleBillNo }));
} }
} }
} }

View File

@@ -76,6 +76,7 @@ namespace WMS.Web.Domain.Services
foreach (var sn in ops_box.Details.SelectMany(s => s.SerialNumbers)) foreach (var sn in ops_box.Details.SelectMany(s => s.SerialNumbers))
{ {
var detail = ops_box.Details.FirstOrDefault(f => f.SerialNumbers.Select(s=>s.SerialNumber).Equals(sn.SerialNumber)); var detail = ops_box.Details.FirstOrDefault(f => f.SerialNumbers.Select(s=>s.SerialNumber).Equals(sn.SerialNumber));
if (detail == null) continue;
var opsSerial = list.FirstOrDefault(f => f.OpsBoxId == b.OpsBoxId).Details var opsSerial = list.FirstOrDefault(f => f.OpsBoxId == b.OpsBoxId).Details
.SelectMany(s => s.SerialNumbers) .SelectMany(s => s.SerialNumbers)
.FirstOrDefault(s => s.SerialNumber.Equals(sn.SerialNumber)); .FirstOrDefault(s => s.SerialNumber.Equals(sn.SerialNumber));

View File

@@ -103,29 +103,41 @@ namespace WMS.Web.Domain.Services
if (data_list.Count != 0) if (data_list.Count != 0)
{ {
//2.1提取出wms任务单明细信息 //2.1提取出wms任务单明细信息
foreach (var e in erp_list) foreach (var outStockTask in data_list)
{ {
//代表单据已经存在 那么就对单据进行修改 var sourcNos = outStockTask.Details.SelectMany(s => s.ErpDetails).Select(s => s.SourceBillNo).ToList();
var data = data_list.FirstOrDefault(f => f.Details.SelectMany(s => s.SourceBillNos).Contains(e.SourceBillNo)); var erps = erp_list.Where(w => sourcNos.Contains(w.SourceBillNo)).ToList();
var detail = data.Details.FirstOrDefault(w => w.MaterialId == e.MaterialId); foreach (var erp in erps)
//存在就修改,没有就添加
if (detail != null)
{ {
if (detail.AccruedQty_Dic.ContainsKey(e.SourceBillNo)) var detail = outStockTask.Details.FirstOrDefault(w => w.MaterialId == erp.MaterialId);
detail.AccruedQty_Dic[e.SourceBillNo] = e.AccruedQty; if (detail == null)
{
//添加一条物料明细
detail = _mapper.Map<OutStockTaskDetails>(erp);
var erpDetail = _mapper.Map<OutStockTaskErpDetails>(erp);
detail.ErpDetails.Add(erpDetail);
outStockTask.Details.Add(detail);
}
else else
detail.AccruedQty_Dic.Add(e.SourceBillNo, e.AccruedQty); {
//对集合里的应发做出累加 //找到物料明细下面对应的来源单明细 然后修改
detail.AccruedQty = detail.AccruedQty_Dic.Sum(s => s.Value); var erpDetail = detail.ErpDetails.FirstOrDefault(f => f.SourceBillNo.Equals(erp.SourceBillNo));
} if (erpDetail == null)
else {
{ erpDetail = _mapper.Map<OutStockTaskErpDetails>(erp);
var de = _mapper.Map<OutStockTaskDetails>(e); detail.ErpDetails.Add(erpDetail);
de.AccruedQty_Dic.Add(de.SourceBillNos.First(), de.AccruedQty); outStockTask.Details.Add(detail);
data.Details.Add(de); }
else
{
erpDetail.AccruedQty = erp.AccruedQty;
detail.AccruedQty = detail.ErpDetails.Sum(s => s.AccruedQty);
}
}
//操作完后剔除
erp_removeList.Add(erp);
} }
erp_removeList.Add(e);
} }
//2.2.提交修改 //2.2.提交修改
var isSuccess = await _outStockTaskRepositories.EditEntityList(data_list, isTransaction); var isSuccess = await _outStockTaskRepositories.EditEntityList(data_list, isTransaction);
@@ -150,9 +162,13 @@ namespace WMS.Web.Domain.Services
//找到当前对应来源单据编号的集合数据 //找到当前对应来源单据编号的集合数据
var current_erp_details = erp_list.Where(x => x.SourceBillNo == item).ToList(); var current_erp_details = erp_list.Where(x => x.SourceBillNo == item).ToList();
//给到dto的实体明细中 //给到dto的实体明细中
entity.Details = _mapper.Map<List<OutStockTaskDetails>>(current_erp_details); foreach (var erp in current_erp_details)
foreach (var de in entity.Details) {
de.AccruedQty_Dic.Add(de.SourceBillNos.First(), de.AccruedQty); var detail = _mapper.Map<OutStockTaskDetails>(erp);
var erpDetail = _mapper.Map<OutStockTaskErpDetails>(erp);
detail.ErpDetails.Add(erpDetail);
entity.Details.Add(detail);
}
add_entitys.Add(entity); add_entitys.Add(entity);
} }
//3.1提交新增 //3.1提交新增
@@ -294,15 +310,15 @@ namespace WMS.Web.Domain.Services
foreach (var entity in taskList) foreach (var entity in taskList)
{ {
if (entity.Type == OutStockType.Sal) if (entity.Type == OutStockType.Sal)
DeliveryNotice_Nos.AddRange(entity.Details.SelectMany(s => s.SourceBillNos)); DeliveryNotice_Nos.AddRange(entity.Details.SelectMany(s => s.ErpDetails).Select(s=>s.SourceBillNo));
else if (entity.Type == OutStockType.Stkdirecttransfers) else if (entity.Type == OutStockType.Stkdirecttransfers)
TransferDirect_Nos.AddRange(entity.Details.SelectMany(s => s.SourceBillNos)); TransferDirect_Nos.AddRange(entity.Details.SelectMany(s => s.ErpDetails).Select(s => s.SourceBillNo));
else if (entity.Type == OutStockType.StktransferInst) else if (entity.Type == OutStockType.StktransferInst)
TransferOut_Nos.AddRange(entity.Details.SelectMany(s => s.SourceBillNos)); TransferOut_Nos.AddRange(entity.Details.SelectMany(s => s.ErpDetails).Select(s => s.SourceBillNo));
else if (entity.Type == OutStockType.Assembled) else if (entity.Type == OutStockType.Assembled)
AssembledApp_Nos.AddRange(entity.Details.SelectMany(s => s.SourceBillNos)); AssembledApp_Nos.AddRange(entity.Details.SelectMany(s => s.ErpDetails).Select(s => s.SourceBillNo));
else if (entity.Type == OutStockType.Miscellaneous) else if (entity.Type == OutStockType.Miscellaneous)
MisDeliveryOut_Nos.AddRange(entity.Details.SelectMany(s => s.SourceBillNos)); MisDeliveryOut_Nos.AddRange(entity.Details.SelectMany(s => s.ErpDetails).Select(s => s.SourceBillNo));
} }
if (DeliveryNotice_Nos.Count() > 0) if (DeliveryNotice_Nos.Count() > 0)

View File

@@ -125,21 +125,16 @@ namespace WMS.Web.Repositories.Configuration
ent.ToTable("t_erp_outstock_task_details"); ent.ToTable("t_erp_outstock_task_details");
ent.HasKey(x => x.Id); ent.HasKey(x => x.Id);
ent.Property(f => f.SourceBillNos).HasConversion( ent.HasMany(p => p.ErpDetails)
v => JsonConvert.SerializeObject(v), .WithOne()
v => JsonConvert.DeserializeObject<List<string>>(v)); .HasForeignKey(p => p.DetailId)
.OnDelete(DeleteBehavior.Cascade);
});
ent.Property(f => f.SaleBillNos).HasConversion( builder.Entity<OutStockTaskErpDetails>(ent =>
v => JsonConvert.SerializeObject(v), {
v => JsonConvert.DeserializeObject<List<string>>(v)); ent.ToTable("t_erp_outstock_task_erp_details");
ent.HasKey(x => x.Id);
ent.Property(f => f.AccruedQty_Dic).HasConversion(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<Dictionary<string, decimal>>(v));
ent.Property(f => f.RealityQty_Dic).HasConversion(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<Dictionary<string, decimal>>(v));
}); });
#endregion #endregion
@@ -298,6 +293,7 @@ namespace WMS.Web.Repositories.Configuration
public DbSet<TakeStock> TakeStock { get; set; } public DbSet<TakeStock> TakeStock { get; set; }
public DbSet<OutStockDetails> OutStockDetails { get; set; } public DbSet<OutStockDetails> OutStockDetails { get; set; }
public DbSet<OutStockTaskDetails> OutStockTaskDetails { get; set; } public DbSet<OutStockTaskDetails> OutStockTaskDetails { get; set; }
public DbSet<OutStockTaskErpDetails> OutStockTaskErpDetails { get; set; }
public DbSet<TakeStockDetails> TakeStockDetails { get; set; } public DbSet<TakeStockDetails> TakeStockDetails { get; set; }
public DbSet<InStock> Instock { get; set; } public DbSet<InStock> Instock { get; set; }
public DbSet<InStockDetails> InStockDetails { get; set; } public DbSet<InStockDetails> InStockDetails { get; set; }

View File

@@ -188,12 +188,13 @@ namespace WMS.Web.Repositories
try try
{ {
var res = await _context.OutStockTask var res = await _context.OutStockTask
.Include(s => s.Details) .Include(s => s.Details).ThenInclude(s => s.ErpDetails)
.FirstOrDefaultAsync(f => f.Id == entity.Id); .FirstOrDefaultAsync(f => f.Id == entity.Id);
if (res == null) return null; if (res == null) return null;
_mapper.Map(entity, res); _mapper.Map(entity, res);
_mapper.ToMapList(entity.Details, res.Details); _mapper.ToMapList(entity.Details, res.Details);
_mapper.ToMapList(entity.Details.SelectMany(s => s.ErpDetails).ToList(), res.Details.SelectMany(s => s.ErpDetails).ToList());
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
if (_transaction != null) if (_transaction != null)
@@ -216,17 +217,13 @@ namespace WMS.Web.Repositories
/// <returns></returns> /// <returns></returns>
public async Task<(List<OutStockTaskQueryInfoResponse> list, int total)> GetListAsync(OutStockTaskQueryRequest dto) public async Task<(List<OutStockTaskQueryInfoResponse> list, int total)> GetListAsync(OutStockTaskQueryRequest dto)
{ {
List<int> ids = new List<int>();
if (!string.IsNullOrEmpty(dto.SourceBillNo))
ids = await _context.OutStockTaskDetails.FromSqlRaw($"SELECT Id FROM t_erp_outstock_task_details WHERE SourceBillNo like '%{dto.SourceBillNo}%'").Select(s => s.Id).ToListAsync();
#region erp基础资料 #region erp基础资料
List<int> mIds = new List<int>(); List<int> mIds = new List<int>();
var materials_result = await _erpService.BillQueryForMaterial(); var materials_result = await _erpService.BillQueryForMaterial();
if (!materials_result.IsSuccess) if (!materials_result.IsSuccess)
return (new List<OutStockTaskQueryInfoResponse>(), 0); return (new List<OutStockTaskQueryInfoResponse>(), 0);
var materials = materials_result.Data.ToList(); var materials = materials_result.Data.ToList();
//var materials =new List<ErpMaterialDto>();
//物料集合;模糊查询后的物料集合 //物料集合;模糊查询后的物料集合
if (!string.IsNullOrEmpty(dto.MaterialNumber)) if (!string.IsNullOrEmpty(dto.MaterialNumber))
{ {
@@ -247,7 +244,7 @@ namespace WMS.Web.Repositories
#endregion #endregion
var query = _context.OutStockTaskDetails var query = _context.OutStockTaskDetails.Include(x => x.ErpDetails)
.GroupJoin(_context.OutStockTask, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) .GroupJoin(_context.OutStockTask, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders })
.SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order })
.OrderByDescending(o => o.order.Id) .OrderByDescending(o => o.order.Id)
@@ -267,8 +264,8 @@ namespace WMS.Web.Repositories
query = query.Where(w => mIds.Contains(w.detail.MaterialId)); query = query.Where(w => mIds.Contains(w.detail.MaterialId));
if (dto.Ids.Count() > 0) if (dto.Ids.Count() > 0)
query = query.Where(w => dto.Ids.Contains(w.detail.Id)); query = query.Where(w => dto.Ids.Contains(w.detail.Id));
if (ids.Count() != 0) if (!string.IsNullOrEmpty(dto.SourceBillNo))
query = query.Where(w => ids.Contains(w.detail.Id)); query = query.Where(w => w.detail.ErpDetails.Where(wd => EF.Functions.Like(wd.SourceBillNo, "%" + dto.SourceBillNo + "%")).Select(s => s.DetailId).Contains(w.detail.Id));
if (dto.Type != null) if (dto.Type != null)
query = query.Where(w => w.order.Type == (OutStockType)dto.Type); query = query.Where(w => w.order.Type == (OutStockType)dto.Type);
if (dto.Status != null) if (dto.Status != null)
@@ -295,8 +292,8 @@ namespace WMS.Web.Repositories
OutStockBeginTime = s.detail.OutStockBeginTime.DateToStringSeconds(), OutStockBeginTime = s.detail.OutStockBeginTime.DateToStringSeconds(),
OutStockEndTime = s.detail.OutStockEndTime.DateToStringSeconds(), OutStockEndTime = s.detail.OutStockEndTime.DateToStringSeconds(),
Stock = _singleDataService.GetSingleData(SingleAction.Stocks, _loginRepositories.CompanyId, s.detail.StockCode), Stock = _singleDataService.GetSingleData(SingleAction.Stocks, _loginRepositories.CompanyId, s.detail.StockCode),
SourceBillNo = string.Join(",", s.detail.SourceBillNos), SourceBillNo = string.Join(",", s.detail.ErpDetails.Select(s => s.SourceBillNo)),
SaleBillNo = string.Join(",", s.detail.SaleBillNos), SaleBillNo = string.Join(",", s.detail.ErpDetails.Select(s => s.SaleBillNo)),
DeliveryOrg = _erpBasicDataExtendService.GetOrgName(orgs, s.order.DeliveryOrgId), DeliveryOrg = _erpBasicDataExtendService.GetOrgName(orgs, s.order.DeliveryOrgId),
ReceiptCustomer = s.order.Type == OutStockType.Sal ReceiptCustomer = s.order.Type == OutStockType.Sal
? _erpBasicDataExtendService.GetCustomerName(customers, s.order.ReceiptCustomerId) ? _erpBasicDataExtendService.GetCustomerName(customers, s.order.ReceiptCustomerId)
@@ -321,13 +318,12 @@ namespace WMS.Web.Repositories
if (!materials_result.IsSuccess) if (!materials_result.IsSuccess)
return new List<GetOutStockTaskByNoResponse>(); return new List<GetOutStockTaskByNoResponse>();
var materials = materials_result.Data.ToList(); var materials = materials_result.Data.ToList();
List<int> ids = new List<int>(); List<int> ids = new List<int>();
ids = await _context.OutStockTaskDetails.FromSqlRaw($"SELECT Fid FROM t_erp_outstock_task_details WHERE SourceBillNo like '%{billNo}%'").Select(s => s.Id).ToListAsync();
var list = await _context.OutStockTask.Include(x => x.Details)
var list = await _context.OutStockTask.Include(x => x.Details).ThenInclude(s => s.ErpDetails)
.Where(f => (EF.Functions.Like(f.BillNo, "%" + billNo + "%") || .Where(f => (EF.Functions.Like(f.BillNo, "%" + billNo + "%") ||
ids.Contains(f.Id)) && f.Details.SelectMany(s => s.ErpDetails).Where(w => EF.Functions.Like(w.SourceBillNo, "%" + billNo + "%")).Any()) &&
(f.Status == OutStockStatus.Part || f.Status == OutStockStatus.Wait)) (f.Status == OutStockStatus.Part || f.Status == OutStockStatus.Wait))
.OrderByDescending(o => o.Id) .OrderByDescending(o => o.Id)
.ToListAsync(); .ToListAsync();
@@ -354,7 +350,7 @@ namespace WMS.Web.Repositories
return new GetOutStockTaskByNoResponse(); return new GetOutStockTaskByNoResponse();
var materials = materials_result.Data.ToList(); var materials = materials_result.Data.ToList();
var entity = await _context.OutStockTask.Include(x => x.Details) var entity = await _context.OutStockTask.Include(x => x.Details).ThenInclude(s => s.ErpDetails)
.FirstOrDefaultAsync(f => f.BillNo.Equals(billNo) && .FirstOrDefaultAsync(f => f.BillNo.Equals(billNo) &&
(f.Status == OutStockStatus.Part || f.Status == OutStockStatus.Wait)); (f.Status == OutStockStatus.Part || f.Status == OutStockStatus.Wait));
@@ -372,26 +368,15 @@ namespace WMS.Web.Repositories
} }
/// <summary> /// <summary>
/// 单号搜索 /// 单号精确匹配
/// </summary> /// </summary>
/// <param name="sourceBillNos"></param> /// <param name="sourceBillNos"></param>
/// <returns></returns> /// <returns></returns>
public async Task<List<OutStockTask>> GetListBySourceBillNo(List<string> sourcebillNos) public async Task<List<OutStockTask>> GetListBySourceBillNo(List<string> sourcebillNos)
{ {
List<int> ids = new List<int>();
string str=$"SELECT Fid FROM t_erp_outstock_task_details WHERE ";
for (int i=0;i<sourcebillNos.Count();i++)
{
if (i == 0)
str += $" SourceBillNo like '%{sourcebillNos[i]}%'";
else
str += $" or SourceBillNo like '%{sourcebillNos[i]}%'";
}
ids = await _context.OutStockTaskDetails.FromSqlRaw(str).Select(s => s.Id).ToListAsync();
var entitys = await _context.OutStockTask var entitys = await _context.OutStockTask
.Include(s => s.Details) .Include(s => s.Details).ThenInclude(s => s.ErpDetails)
.Where(w => ids.Contains(w.Id)) .Where(w => w.Details.SelectMany(s => s.ErpDetails).Where(wd => sourcebillNos.Contains(wd.SourceBillNo)).Any())
.OrderByDescending(o => o.Id) .OrderByDescending(o => o.Id)
.ToListAsync(); .ToListAsync();
@@ -436,12 +421,9 @@ namespace WMS.Web.Repositories
public async Task<List<string>> GetOutStockTaskNosByNo(string billNo) public async Task<List<string>> GetOutStockTaskNosByNo(string billNo)
{ {
List<int> ids = new List<int>(); return await _context.OutStockTask.Include(x => x.Details).ThenInclude(s => s.ErpDetails)
ids = await _context.OutStockTaskDetails.FromSqlRaw($"SELECT Fid FROM t_erp_outstock_task_details WHERE SourceBillNo like '%{billNo}%'").Select(s => s.Id).ToListAsync();
return await _context.OutStockTask.Include(x => x.Details)
.Where(f => (EF.Functions.Like(f.BillNo, "%" + billNo + "%") || .Where(f => (EF.Functions.Like(f.BillNo, "%" + billNo + "%") ||
ids.Contains(f.Id)) && f.Details.SelectMany(s => s.ErpDetails).Where(w => EF.Functions.Like(w.SourceBillNo, "%" + billNo + "%")).Any()) &&
(f.Status == OutStockStatus.Part || f.Status == OutStockStatus.Wait)) (f.Status == OutStockStatus.Part || f.Status == OutStockStatus.Wait))
.OrderByDescending(o => o.Id) .OrderByDescending(o => o.Id)
.Select(s => s.BillNo) .Select(s => s.BillNo)
@@ -458,11 +440,16 @@ namespace WMS.Web.Repositories
{ {
return await GetListAsync(dto); return await GetListAsync(dto);
} }
/// <summary>
/// 根据订单号精确搜索
/// </summary>
/// <param name="billNos"></param>
/// <returns></returns>
public async Task<List<OutStockTask>> GetListByBillNo(List<string> billNos) public async Task<List<OutStockTask>> GetListByBillNo(List<string> billNos)
{ {
var entitys = await _context.OutStockTask var entitys = await _context.OutStockTask
.Include(s => s.Details) .Include(s => s.Details)
.ThenInclude(s => s.ErpDetails)
.Where(w => billNos.Contains(w.BillNo)) .Where(w => billNos.Contains(w.BillNo))
.OrderByDescending(o => o.Id) .OrderByDescending(o => o.Id)
.ToListAsync(); .ToListAsync();