库房业务,入出库申请,根据入出库明细Id获取匹配信息
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user