库房业务,入出库申请,根据入出库明细Id获取匹配信息

This commit is contained in:
DEVICE8\12494
2023-06-07 17:46:14 +08:00
parent fc23384325
commit 4b818980de
5 changed files with 421 additions and 85 deletions

View File

@@ -0,0 +1,217 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tnb.WarehouseMgr.Entities.Enums;
namespace Tnb.WarehouseMgr.Entities.Dto
{
/// <summary>
/// 出入库申请修改输入参数
/// </summary>
public class InOutStockApplyforUpInput
{
// bill_line,location_id,delivery_date,carry_id,carry_code
/// <summary>
/// 出入库申请类型 1、入库 2、出库
/// </summary>
public EnumInOutStockType inoutStockType { get; set; }
/// <summary>
/// 所属组织ID
/// </summary>
public string? org_id { get; set; }
/// <summary>
/// 入库单ID
/// </summary>
public string bill_id { get; set; } = string.Empty;
/// <summary>
/// 执行状态
/// </summary>
public string line_status { get; set; } = string.Empty;
/// <summary>
/// 物品ID
/// </summary>
public string material_id { get; set; } = string.Empty;
/// <summary>
/// 物品代码
/// </summary>
public string material_code { get; set; } = string.Empty;
/// <summary>
/// 单位ID
/// </summary>
public string unit_id { get; set; } = string.Empty;
/// <summary>
/// 单位代码
/// </summary>
public string? unit_code { get; set; }
/// <summary>
/// 入库需求数量
/// </summary>
public int pr_qty { get; set; }
/// <summary>
/// 实际入库数量
/// </summary>
public int qty { get; set; }
/// <summary>
/// 原因
/// </summary>
public string? reason { get; set; }
/// <summary>
/// 入库仓库ID
/// </summary>
public string? warehouse_id { get; set; }
/// <summary>
/// 不含税单价
/// </summary>
public decimal? price { get; set; }
/// <summary>
/// 含税单价
/// </summary>
public decimal? tax_price { get; set; }
/// <summary>
/// 不含税金额
/// </summary>
public decimal? amount { get; set; }
/// <summary>
/// 含税金额
/// </summary>
public decimal? all_amount { get; set; }
/// <summary>
/// 来源单据ID
/// </summary>
public string? source_id { get; set; }
/// <summary>
/// 来源单据代码
/// </summary>
public string? source_code { get; set; }
/// <summary>
/// 源单单据类型
/// </summary>
public int? source_type { get; set; }
/// <summary>
/// 来源单据行号
/// </summary>
public int? source_line { get; set; }
/// <summary>
/// 来源单据明细ID
/// </summary>
public string? source_detail_id { get; set; }
/// <summary>
/// 生产工单号
/// </summary>
public string? mo_code { get; set; }
/// <summary>
/// 生产工单行号
/// </summary>
public int? mo_line { get; set; }
/// <summary>
/// 生产工单BOM明细Id
/// </summary>
public string? mo_bom_detail_id { get; set; }
/// <summary>
/// 已打印数量
/// </summary>
public int print_qty { get; set; }
/// <summary>
/// 扫描数量
/// </summary>
public int scan_qty { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? remark { get; set; }
/// <summary>
/// 扩展字段
/// </summary>
public string? extras { get; set; }
/// <summary>
/// 时间戳
/// </summary>
public DateTime? time_stamp { get; set; }
/// <summary>
/// 创建用户
/// </summary>
public string? create_id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? create_time { get; set; }
/// <summary>
/// 修改用户
/// </summary>
public string? modify_id { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime? modify_time { get; set; }
/// <summary>
/// 批次
/// </summary>
public string? code_batch { get; set; }
/// <summary>
/// 打印模板ID
/// </summary>
public string? print_id { get; set; }
/// <summary>
/// 行号
/// </summary>
public int bill_line { get; set; }
/// <summary>
/// 库位ID
/// </summary>
public string location_id { get; set; } = string.Empty;
/// <summary>
/// 要求出库日期(销售出库为交期)
/// </summary>
public DateTime delivery_date { get; set; } = DateTime.Now;
/// <summary>
/// 载具ID
/// </summary>
public string? carry_id { get; set; }
/// <summary>
/// 载具编号
/// </summary>
public string? carry_code { get; set; }
public List<WmsInstockCode> InstockCodes { get; set; }
public List<WmsOutstockCode> OutstockCodes { get; set; }
}
}

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tnb.WarehouseMgr.Entities.Enums;
namespace Tnb.WarehouseMgr.Entities.Dto
{
public class InOutStockDetailQuery
{
/// <summary>
/// 出入库申请类型 1、入库 2、出库
/// </summary>
public EnumInOutStockType inoutStockType { get; set; }
/// <summary>
/// 出入库单明细Id
/// </summary>
public string bill_d_id { get; set; }
}
}

View File

@@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Entities.Dto
{
/// <summary>
/// 入库单据物料明细信息
/// </summary>
public class InStockDetailOutput
{
/// <summary>
/// 入库单明细Id
/// </summary>
public string bill_id { get; set; }
/// <summary>
/// 单位id
/// </summary>
public string unit_id { get; set; }
/// <summary>
/// 批次
/// </summary>
public string code_batch { get; set; }
/// <summary>
/// 入库仓库Id
/// </summary>
public string warehouse_id { get; set; }
/// <summary>
/// 执行状态
/// </summary>
public string line_status { get; set; }
/// <summary>
/// 原因
/// </summary>
public string reason { get; set; }
/// <summary>
/// 需求数量
/// </summary>
public int pr_qty { get; set; }
/// <summary>
/// 实际入库数量
/// </summary>
public int qty { get; set; }
/// <summary>
/// 不含税单价
/// </summary>
public decimal? price { get; set; }
/// <summary>
/// 含税单价
/// </summary>
public decimal? tax_price { get; set; }
/// <summary>
/// 已打印数量
/// </summary>
public int print_qty { get; set; }
/// <summary>
/// 扫描数量
/// </summary>
public int scan_qty { get; set; }
/// <summary>
/// 条码明细
/// </summary>
public List<WmsInstockCode> CodeDetails { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Entities.Enums
{
/// <summary>
/// 出入库申请类型
/// </summary>
public enum EnumInOutStockType
{
/// <summary>
/// 入库
/// </summary>
In=1,
/// <summary>
/// 出库
/// </summary>
Out=2,
}
}

View File

@@ -1,15 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Aspose.Cells.Drawing;
using JNPF.Common.Contracts;
using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.Extras.CollectiveOAuth.Config;
using JNPF.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis;
using NPOI.OpenXmlFormats.Wordprocessing;
using Polly.Timeout;
using Spire.Pdf.Widget;
@@ -18,6 +25,8 @@ using Tnb.BasicData.Entities;
using Tnb.BasicData.Entities.Enums;
using Tnb.Common.Utils;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
@@ -69,102 +78,101 @@ namespace Tnb.WarehouseMgr
return items;
}
/// <summary>
/// 获取载具信息(入库业务) 当前载具启用;未锁定;如果有库位信息,库位不能为存储库位,出库库位,分拣库位;
/// 库房业务,入库、出库申请新增修改功能
/// </summary>
/// <remarks>
/// returns:
/// <br/>{
/// <br/> carry_id:载具Id
/// <br/> carry_code:载具编号
/// <br/> carry_name:载具名称
/// <br/> location_id:库位id
/// <br/> location_code:库位编码
/// <br/> location_name:库位名称
/// <br/>}
/// </remarks>
[HttpGet]
public async Task<dynamic> GetCarryInfo()
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task ApplyFor(InOutStockApplyforUpInput input)
{
var locationTypes = new[] { (int)EnumLocationType., (int)EnumLocationType., (int)EnumLocationType. };
var items = await _db.Queryable<WmsCarryH>().LeftJoin<BasLocation>((a, b) => a.location_id == b.id)
.Where((a, b) => a.status == 0 && a.is_lock == 0 && !locationTypes.Contains(Convert.ToInt32(b.is_type)))
.Select((a, b) => new
{
carry_id = a.id,
carry_code = a.carry_code,
carry_name = a.carry_name,
location_id = b.id,
location_code = b.location_code,
location_name = b.location_name,
})
.ToListAsync();
return items;
// bill_line,location_id,delivery_date,carry_id,carry_code
if (input == null) throw new ArgumentNullException("input");
var isOk = false;
switch (input.inoutStockType)
{
case EnumInOutStockType.In:
var wmsInstockD = input.Adapt<WmsInstockD>();
var wmsInstockCodes = input.InstockCodes.Adapt<List<WmsInstockCode>>();
wmsInstockCodes.ForEach(x =>
{
if (x.id.IsNullOrWhiteSpace())
{
x.id = SnowflakeIdHelper.NextId();
}
});
isOk = await _update<WmsInstockD, WmsInstockCode>(wmsInstockD, wmsInstockCodes);
break;
case EnumInOutStockType.Out:
var wmsOutstockD = input.Adapt<WmsOutstockD>();
var wmsOutstockCodes = input.InstockCodes.Adapt<List<WmsOutstockCode>>();
wmsOutstockCodes.ForEach(x =>
{
if (x.id.IsNullOrWhiteSpace())
{
x.id = SnowflakeIdHelper.NextId();
}
});
isOk = await _update<WmsOutstockD, WmsOutstockCode>(wmsOutstockD, wmsOutstockCodes);
break;
}
if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
}
/// <summary>
/// 获取库位信息(入库业务) 库位不能为存储库位,出库库位,分拣库位;未锁定
/// </summary>
/// <remarks>
/// returns
/// <br/>{
/// <br/> location_id:库位Id
/// <br/> location_code库位编号
/// <br/> location_name:库位名称
/// <br/> layers:楼层
/// <br/>}
/// </remarks>
[HttpGet]
public async Task<dynamic> GetLocationInfo()
{
var locationTypes = new[] { (int)EnumLocationType., (int)EnumLocationType., (int)EnumLocationType. };
var items = await _db.Queryable<BasLocation>().Where(it => it.is_lock == 0 && !locationTypes.Contains(Convert.ToInt32(it.is_type)))
.Select(it => new
{
location_id = it.id,
location_code = it.location_code,
location_name = it.location_name,
layers = it.layers,
})
.ToListAsync();
return items;
}
/// <summary>
/// 出库查询目标库位信息,覆盖过滤条件
/// 根据明细Id获取出入库明细信息
/// </summary>
/// <param name="billDId"></param>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> GetOutStoreDestLocation()
public async Task<dynamic> GetInOutStockCodesById([FromQuery] InOutStockDetailQuery input)
{
var locationTypes = new[] { (int)EnumLocationType., (int)EnumLocationType. };
var items = await _db.Queryable<BasLocation>().Where(it => it.is_lock == 0 && !locationTypes.Contains(Convert.ToInt32(it.is_type)))
.Select(it => new
{
location_id = it.id,
location_code = it.location_code,
})
.ToListAsync();
return items;
dynamic result = null;
switch (input.inoutStockType)
{
case EnumInOutStockType.In:
result = await _db.Queryable<WmsInstockD>()
.Where(a => a.id == input.bill_d_id)
.Select(a => new InStockDetailOutput
{
bill_id = a.id,
unit_id = a.unit_id,
code_batch = a.code_batch,
warehouse_id = a.warehouse_id,
line_status = a.line_status,
reason = a.reason,
pr_qty = a.pr_qty,
qty = a.qty,
price = a.price,
tax_price = a.tax_price,
print_qty = a.print_qty,
scan_qty = a.scan_qty,
CodeDetails = SqlFunc.Subqueryable<WmsInstockCode>().Where(it => it.bill_d_id == a.id).ToList(),
}).ToListAsync();
break;
case EnumInOutStockType.Out:
result = await _db.Queryable<WmsOutstockCode>().Where(it => it.bill_d_id == input.bill_d_id).ToListAsync();
break;
}
return result;
}
/// <summary>
/// 出库申请-查询载具信息
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> GetOutStoreLocation()
private async Task<bool> _update<T1, T2>(T1 entity, List<T2> entities) where T1 : BaseEntity<string>, new() where T2 : BaseEntity<string>, new()
{
var items = await _db.Queryable<WmsCarryH>().LeftJoin<BasLocation>((a, b) => a.location_id == b.id)
.Where((a, b) => a.status == 0 && a.is_lock == 0 && Convert.ToInt32(b.is_type) == (int)EnumLocationType.)
.Select((a, b) => new
{
carry_id = a.id,
carry_code = a.carry_code,
carry_name = a.carry_name,
location_id = b.id,
location_code = b.location_code,
location_name = b.location_name,
})
.ToListAsync();
return items;
var isOk = false;
try
{
await _db.Ado.BeginTranAsync();
isOk = await _db.Updateable(entity).ExecuteCommandHasChangeAsync();
isOk = await _db.Updateable(entities).ExecuteCommandHasChangeAsync();
await _db.Ado.CommitTranAsync();
}
catch (Exception)
{
await _db.Ado.RollbackTranAsync();
}
return isOk;
}
/// <summary>
/// 路径算法
/// </summary>