采购收货,销售发货业务代码提交
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
namespace Tnb.WarehouseMgr;
|
||||
using System.CodeDom;
|
||||
|
||||
namespace Tnb.WarehouseMgr;
|
||||
|
||||
public class ModuleConsts
|
||||
{
|
||||
@@ -185,5 +187,8 @@ public class ModuleConsts
|
||||
/// 模块标识-PDA寄存出库
|
||||
/// </summary>
|
||||
public const string MODULE_WMSSCANCODEINSTOCKPDA_ID = "28576495374869";
|
||||
|
||||
/// <summary>
|
||||
/// 模块标识-采购收货
|
||||
/// </summary>
|
||||
public const string MODULE_WMSPURCHASE_ID = "29975280336405";
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
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 PurchaseAndReceiveUpInput
|
||||
{
|
||||
public string bill_code { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 单据类型
|
||||
/// </summary>
|
||||
public string bill_type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 单据状态
|
||||
/// </summary>
|
||||
public string status { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 业务类型
|
||||
/// </summary>
|
||||
public string biz_type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 入库仓库ID
|
||||
/// </summary>
|
||||
public string? warehouse_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商ID
|
||||
/// </summary>
|
||||
public string? supplier_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商代码
|
||||
/// </summary>
|
||||
public string? supplier_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商名称
|
||||
/// </summary>
|
||||
public string? supplier_name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生成类型
|
||||
/// </summary>
|
||||
public string generate_type { get; set; } = string.Empty;
|
||||
|
||||
/// <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; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime create_time { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据ID
|
||||
/// </summary>
|
||||
public string? source_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据代码
|
||||
/// </summary>
|
||||
public string? source_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程任务Id
|
||||
/// </summary>
|
||||
public string? f_flowtaskid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程引擎Id
|
||||
/// </summary>
|
||||
public string? f_flowid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供货日期
|
||||
/// </summary>
|
||||
public DateTime delivery_date { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 审核员
|
||||
/// </summary>
|
||||
public string? auditor_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 运输方式
|
||||
/// </summary>
|
||||
public string? shipping_method { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审核状态
|
||||
/// </summary>
|
||||
public int? audit_status { get; set; }
|
||||
|
||||
public List<WmsPurchaseD> details { get; set; } = new();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity.Constraints
|
||||
{
|
||||
/// <summary>
|
||||
/// 采购收货、销售发货 接口约束
|
||||
/// </summary>
|
||||
public interface IPurchaseAndSaleEntity
|
||||
{
|
||||
public string material_id { get; set; }
|
||||
/// <summary>
|
||||
/// 已到货数量
|
||||
/// </summary>
|
||||
public decimal purchase_prqty { get; set; }
|
||||
/// <summary>
|
||||
/// 采购数量
|
||||
/// </summary>
|
||||
public decimal purchase_qty { get; set; }
|
||||
/// <summary>
|
||||
/// 本次到货数量
|
||||
/// </summary>
|
||||
public decimal purchase_arriveqty { get; set; }
|
||||
/// <summary>
|
||||
/// 执行状态
|
||||
/// </summary>
|
||||
public string line_status { get; set; }
|
||||
public string modify_id { get; set; }
|
||||
public DateTime? modify_time { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity.Constraints
|
||||
{
|
||||
public interface IPurchaseAndSaleQueryEntity
|
||||
{
|
||||
public string bill_id { get; set; }
|
||||
public string material_name { get; set; }
|
||||
public string material_id { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -208,5 +208,8 @@ public partial class WmsInstockH : BaseEntity<string>
|
||||
/// 流程引擎Id
|
||||
/// </summary>
|
||||
public string? f_flowid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 采购单号
|
||||
/// </summary>
|
||||
public string purchase_code { get; set; }
|
||||
}
|
||||
|
||||
102
WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs
Normal file
102
WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 采购收货明细表
|
||||
/// </summary>
|
||||
[SugarTable("wms_purchase_d")]
|
||||
public partial class WmsPurchaseD : BaseEntity<string>
|
||||
{
|
||||
public WmsPurchaseD()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <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 decimal purchase_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 已到货数量
|
||||
/// </summary>
|
||||
public decimal purchase_prqty { 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? f_flowtaskid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程引擎Id
|
||||
/// </summary>
|
||||
public string? f_flowid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 本次到货数量
|
||||
/// </summary>
|
||||
public decimal purchase_arriveqty { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities.Entity.Constraints;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 采购收货明细表
|
||||
/// </summary>
|
||||
public partial class WmsPurchaseD : IPurchaseAndSaleEntity, IPurchaseAndSaleQueryEntity
|
||||
{
|
||||
/// <summary>
|
||||
/// 物料名称
|
||||
/// </summary>
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string material_name { get; set; }
|
||||
}
|
||||
|
||||
|
||||
147
WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseH.cs
Normal file
147
WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseH.cs
Normal file
@@ -0,0 +1,147 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 采购收货主表
|
||||
/// </summary>
|
||||
[SugarTable("wms_purchase_h")]
|
||||
public partial class WmsPurchaseH : BaseEntity<string>
|
||||
{
|
||||
public WmsPurchaseH()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 租户ID
|
||||
/// </summary>
|
||||
public string? tenant_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 所属组织ID
|
||||
/// </summary>
|
||||
public string? org_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 采购收货单号
|
||||
/// </summary>
|
||||
public string bill_code { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 单据类型
|
||||
/// </summary>
|
||||
public string bill_type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 单据状态
|
||||
/// </summary>
|
||||
public string status { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 业务类型
|
||||
/// </summary>
|
||||
public string biz_type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 入库仓库ID
|
||||
/// </summary>
|
||||
public string? warehouse_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商ID
|
||||
/// </summary>
|
||||
public string? supplier_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商代码
|
||||
/// </summary>
|
||||
public string? supplier_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商名称
|
||||
/// </summary>
|
||||
public string? supplier_name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生成类型
|
||||
/// </summary>
|
||||
public string generate_type { get; set; } = string.Empty;
|
||||
|
||||
/// <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; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime create_time { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据ID
|
||||
/// </summary>
|
||||
public string? source_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据代码
|
||||
/// </summary>
|
||||
public string? source_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程任务Id
|
||||
/// </summary>
|
||||
public string? f_flowtaskid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程引擎Id
|
||||
/// </summary>
|
||||
public string? f_flowid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供货日期
|
||||
/// </summary>
|
||||
public DateTime delivery_date { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 审核员
|
||||
/// </summary>
|
||||
public string? auditor_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 运输方式
|
||||
/// </summary>
|
||||
public string? shipping_method { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审核状态
|
||||
/// </summary>
|
||||
public int? audit_status { get; set; }
|
||||
|
||||
}
|
||||
88
WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSaleD.cs
Normal file
88
WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSaleD.cs
Normal file
@@ -0,0 +1,88 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 销售发货明细表
|
||||
/// </summary>
|
||||
[SugarTable("wms_sale_d")]
|
||||
public partial class WmsSaleD : BaseEntity<string>
|
||||
{
|
||||
public WmsSaleD()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <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? 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? f_flowtaskid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程引擎Id
|
||||
/// </summary>
|
||||
public string? f_flowid { get; set; }
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities.Entity.Constraints;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 销售发货明细表
|
||||
/// </summary>
|
||||
public partial class WmsSaleD : IPurchaseAndSaleEntity, IPurchaseAndSaleQueryEntity
|
||||
{
|
||||
/// <summary>
|
||||
/// 物料名称
|
||||
/// </summary>
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string material_name { get; set; }
|
||||
/// <summary>
|
||||
/// 本次发货数量
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "sale_sendqty")]
|
||||
public decimal purchase_arriveqty { get; set; }
|
||||
/// <summary>
|
||||
///已 发货数量
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "sale_prqty")]
|
||||
public decimal purchase_prqty { get; set; }
|
||||
/// <summary>
|
||||
/// 发货数量
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "sale_qty")]
|
||||
public decimal purchase_qty { get; set; }
|
||||
}
|
||||
147
WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSaleH.cs
Normal file
147
WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSaleH.cs
Normal file
@@ -0,0 +1,147 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 销售发货主表
|
||||
/// </summary>
|
||||
[SugarTable("wms_sale_h")]
|
||||
public partial class WmsSaleH : BaseEntity<string>
|
||||
{
|
||||
public WmsSaleH()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 租户ID
|
||||
/// </summary>
|
||||
public string? tenant_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 所属组织ID
|
||||
/// </summary>
|
||||
public string? org_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 销售发货单号
|
||||
/// </summary>
|
||||
public string bill_code { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 单据类型
|
||||
/// </summary>
|
||||
public string bill_type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 单据状态
|
||||
/// </summary>
|
||||
public string status { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 业务类型
|
||||
/// </summary>
|
||||
public string biz_type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 出库仓库ID
|
||||
/// </summary>
|
||||
public string? warehouse_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 客户ID
|
||||
/// </summary>
|
||||
public string? customer_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 客户代码
|
||||
/// </summary>
|
||||
public string? customer_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 客户名称
|
||||
/// </summary>
|
||||
public string? customer_name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生成类型
|
||||
/// </summary>
|
||||
public string generate_type { get; set; } = string.Empty;
|
||||
|
||||
/// <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; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime create_time { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据ID
|
||||
/// </summary>
|
||||
public string? source_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据代码
|
||||
/// </summary>
|
||||
public string? source_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程任务Id
|
||||
/// </summary>
|
||||
public string? f_flowtaskid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程引擎Id
|
||||
/// </summary>
|
||||
public string? f_flowid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供货日期
|
||||
/// </summary>
|
||||
public DateTime ship_date { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 审核员
|
||||
/// </summary>
|
||||
public string? auditor_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 运输方式
|
||||
/// </summary>
|
||||
public string? shipping_method { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审核状态
|
||||
/// </summary>
|
||||
public int? audit_status { get; set; }
|
||||
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using Mapster;
|
||||
using JNPF.Common.Security;
|
||||
using Mapster;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
|
||||
@@ -21,6 +22,9 @@ namespace Tnb.WarehouseMgr.Entities.Mapper
|
||||
.Map(dest => dest.qc_status, src => src.is_check == 0 ? "不合格" : "合格");
|
||||
config.ForType<WmsCarryCode, CarryCodeQueryOutput>()
|
||||
.Map(dest => dest.check_conclusion, src => GenericEnumDicionary<EnumCheckConclusion>.GetEnumDesc(src.check_conclusion));
|
||||
config.ForType<WmsPurchaseD, WmsInstockD>()
|
||||
.Map(dest => dest.id, src => SnowflakeIdHelper.NextId())
|
||||
.Map(dest => dest.pr_qty, src => src.purchase_arriveqty);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,12 @@
|
||||
namespace Tnb.WarehouseMgr.Interfaces
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 入库申请服务接口
|
||||
/// </summary>
|
||||
public interface IWmsInStockService
|
||||
{
|
||||
Task<dynamic> MESCreateInstock(MESCreateInstockInput input);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
using JNPF.Common.Dtos.VisualDev;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Interfaces
|
||||
{
|
||||
@@ -13,5 +14,11 @@ namespace Tnb.WarehouseMgr.Interfaces
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
Task<dynamic> MESCreateOutstock(MESCreateOutstockInput input);
|
||||
/// <summary>
|
||||
/// 出库申请
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
Task<dynamic> OutStockApplyFor(VisualDevModelDataCrInput input);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Common.Dtos.VisualDev;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Interfaces
|
||||
{
|
||||
public interface IWmsPDAScanInStockService
|
||||
{
|
||||
Task<dynamic> ScanInStock(VisualDevModelDataCrInput input);
|
||||
}
|
||||
}
|
||||
@@ -72,7 +72,7 @@ namespace Tnb.WarehouseMgr
|
||||
OverideFuncs.CreateAsync = OutStockApplyFor;
|
||||
}
|
||||
|
||||
private async Task<dynamic> OutStockApplyFor(VisualDevModelDataCrInput input)
|
||||
public async Task<dynamic> OutStockApplyFor(VisualDevModelDataCrInput input)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
@@ -235,30 +235,33 @@ namespace Tnb.WarehouseMgr
|
||||
List<WmsInstockCode> items = instockDetails.Adapt<List<WmsInstockCode>>();
|
||||
//items.ForEach(it => it.org_id = _userManager.User.OrganizeId);
|
||||
List<WmsInstockCode> instockCOdes = new();
|
||||
jArr = JArray.Parse(input.data["tablefield115"].ToString()!);
|
||||
if (jArr?.Children().Count() > 0)
|
||||
if (input.data.ContainsKey("tablefield115"))
|
||||
{
|
||||
foreach (JToken jo in jArr.Children())
|
||||
jArr = JArray.Parse(input.data["tablefield115"].ToString()!);
|
||||
if (jArr?.Children().Count() > 0)
|
||||
{
|
||||
string? materialCode = jo.Value<string>(nameof(WmsInstockCode.material_code));
|
||||
string? codeBatch = jo.Value<string>(nameof(WmsInstockCode.code_batch));
|
||||
WmsInstockCode? b = items.Find(x => x.material_code == materialCode && x.code_batch == codeBatch);
|
||||
if (b != null)
|
||||
foreach (JToken jo in jArr.Children())
|
||||
{
|
||||
WmsInstockCode c = DeepCopyHelper<WmsInstockCode>.DeepCopy(b);
|
||||
c.id = SnowflakeIdHelper.NextId();
|
||||
c.bill_d_id = b.id;
|
||||
c.barcode = jo.Value<string>(nameof(WmsInstockCode.barcode))!;
|
||||
c.codeqty = jo.Value<int>(nameof(WmsInstockCode.codeqty));
|
||||
instockCOdes.Add(c);
|
||||
string? materialCode = jo.Value<string>(nameof(WmsInstockCode.material_code));
|
||||
string? codeBatch = jo.Value<string>(nameof(WmsInstockCode.code_batch));
|
||||
WmsInstockCode? b = items.Find(x => x.material_code == materialCode && x.code_batch == codeBatch);
|
||||
if (b != null)
|
||||
{
|
||||
WmsInstockCode c = DeepCopyHelper<WmsInstockCode>.DeepCopy(b);
|
||||
c.id = SnowflakeIdHelper.NextId();
|
||||
c.bill_d_id = b.id;
|
||||
c.barcode = jo.Value<string>(nameof(WmsInstockCode.barcode))!;
|
||||
c.codeqty = jo.Value<int>(nameof(WmsInstockCode.codeqty));
|
||||
instockCOdes.Add(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
string orgId = _userManager.User.OrganizeId;
|
||||
_ = await _db.Insertable(instockCOdes).CallEntityMethod(it => it.Create(orgId)).ExecuteCommandAsync();
|
||||
_ = await _db.Updateable<WmsTempCode>().SetColumns(it => new WmsTempCode { is_end = 1 }).Where(it => instockCOdes.Select(x => x.barcode).Contains(it.barcode)).ExecuteCommandAsync();
|
||||
}
|
||||
string orgId = _userManager.User.OrganizeId;
|
||||
_ = await _db.Insertable(carryCodes).ExecuteCommandAsync();
|
||||
_ = await _db.Insertable(instockCOdes).CallEntityMethod(it => it.Create(orgId)).ExecuteCommandAsync();
|
||||
// 更新临时条码表 状态is_end
|
||||
_ = await _db.Updateable<WmsTempCode>().SetColumns(it => new WmsTempCode { is_end = 1 }).Where(it => instockCOdes.Select(x => x.barcode).Contains(it.barcode)).ExecuteCommandAsync();
|
||||
await _wareHouseService.GenInStockTaskHandleAfter(preTaskUpInput,
|
||||
it => new WmsCarryH { carry_code = input.data[nameof(WmsCarryH.carry_code)].ToString()!, is_lock = 1, carry_status = ((int)EnumCarryStatus.占用).ToString(), location_id = preTaskUpInput.CarryStartLocationId, location_code = preTaskUpInput.CarryStartLocationCode, source_id = input.data[nameof(WmsOutstockH.source_id)].ToString(), source_code = input.data[nameof(WmsOutstockH.source_code)].ToString() },
|
||||
it => new BasLocation { is_lock = 1, is_use = ((int)EnumCarryStatus.占用).ToString() });
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace Tnb.WarehouseMgr
|
||||
/// </summary>
|
||||
[OverideVisualDev(ModuleConsts.MODULE_WMSSCANCODEINSTOCKPDA_ID)]
|
||||
[ServiceModule(BizTypeId)]
|
||||
public class WmsPDAScanInStockService : BaseWareHouseService, IPdaStroage
|
||||
public class WmsPDAScanInStockService : BaseWareHouseService, IWmsPDAScanInStockService, IPdaStroage
|
||||
{
|
||||
private const string BizTypeId = "26191496816421";
|
||||
private readonly ISqlSugarClient _db;
|
||||
@@ -57,90 +57,126 @@ namespace Tnb.WarehouseMgr
|
||||
try
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
WmsInstockCode item = input.data.Adapt<WmsInstockCode>();
|
||||
if (item.codeqty == 0)
|
||||
WmsInstockCode? item = null;
|
||||
BasMaterial? mat = null;
|
||||
WmsCarryH? carry = null;
|
||||
BasLocation? loc = null;
|
||||
string? carryCode = null;
|
||||
|
||||
if (input.data.ContainsKey(nameof(WmsInstockCode.barcode)))
|
||||
{
|
||||
throw new AppFriendlyException("请输入入库数量", 500);
|
||||
item = input.data.Adapt<WmsInstockCode>();
|
||||
if (item.codeqty == 0)
|
||||
{
|
||||
throw new AppFriendlyException("请输入入库数量", 500);
|
||||
}
|
||||
|
||||
carryCode = item.barcode;
|
||||
carry = await _db.Queryable<WmsCarryH>().FirstAsync(it => it.carry_code == carryCode);
|
||||
if (carry == null)
|
||||
{
|
||||
throw new AppFriendlyException("载具有误", 500);
|
||||
}
|
||||
|
||||
mat = await _db.Queryable<BasMaterial>().FirstAsync(it => it.code == item.material_code);
|
||||
if (mat == null)
|
||||
{
|
||||
throw new AppFriendlyException("物料有误", 500);
|
||||
}
|
||||
|
||||
loc = await _db.Queryable<BasLocation>().FirstAsync(it => it.location_code == item.extras);
|
||||
if (loc == null)
|
||||
{
|
||||
throw new AppFriendlyException("库位有误", 500);
|
||||
}
|
||||
}
|
||||
|
||||
string carryCode = item.barcode;
|
||||
WmsCarryH carry = await _db.Queryable<WmsCarryH>().FirstAsync(it => it.carry_code == carryCode);
|
||||
if (carry == null)
|
||||
{
|
||||
throw new AppFriendlyException("载具有误", 500);
|
||||
}
|
||||
|
||||
BasMaterial mat = await _db.Queryable<BasMaterial>().FirstAsync(it => it.code == item.material_code);
|
||||
if (mat == null)
|
||||
{
|
||||
throw new AppFriendlyException("物料有误", 500);
|
||||
}
|
||||
|
||||
BasLocation loc = await _db.Queryable<BasLocation>().FirstAsync(it => it.location_code == item.extras);
|
||||
if (loc == null)
|
||||
{
|
||||
throw new AppFriendlyException("库位有误", 500);
|
||||
}
|
||||
var whId = input.data.ContainsKey(nameof(WmsPurchaseH.warehouse_id)) ? input.data[nameof(WmsPurchaseH.warehouse_id)] : null;
|
||||
var billCode = input.data.ContainsKey(nameof(WmsPurchaseH.bill_code)) ? input.data[nameof(WmsPurchaseH.warehouse_id)] : null;
|
||||
|
||||
WmsInstockH instock = new()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId(),
|
||||
org_id = _userManager.UserId,
|
||||
carry_code = carryCode,
|
||||
carry_id = carry.id,
|
||||
location_id = loc.id,
|
||||
carry_id = carry?.id ?? string.Empty,
|
||||
location_id = loc?.id ?? string.Empty,
|
||||
bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_INSTOCK_ENCODE).GetAwaiter().GetResult(),
|
||||
bill_type = WmsWareHouseConst.BILLTYPE_MATERIALINSTOCK_ID,
|
||||
biz_type = WmsWareHouseConst.BIZTYPE_WMSINSTOCK_ID,
|
||||
bill_date = DateTime.Today,
|
||||
warehouse_id = "26103372441637",
|
||||
warehouse_id = whId?.ToString() ?? "26103372441637",
|
||||
status = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
||||
generate_type = "0",
|
||||
sync_status = WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC,
|
||||
print_status = WmsWareHouseConst.PRINT_STATUS_PRINTCOMPLETE,
|
||||
is_check = 1,
|
||||
purchase_code = billCode?.ToString() ?? string.Empty,
|
||||
create_id = _userManager.UserId,
|
||||
create_time = DateTime.Now,
|
||||
};
|
||||
WmsInstockD instockD = new()
|
||||
var instockDs = new List<WmsInstockD>();
|
||||
WmsInstockD? instockD = null;
|
||||
if (mat != null)
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId(),
|
||||
bill_id = instock.id,
|
||||
line_status = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
||||
material_id = mat.id,
|
||||
material_code = mat.code,
|
||||
unit_id = mat.unit_id,
|
||||
pr_qty = item.codeqty,
|
||||
qty = 0,
|
||||
code_batch = item.code_batch,
|
||||
warehouse_id = "26103372441637",
|
||||
print_qty = item.codeqty,
|
||||
scan_qty = item.codeqty,
|
||||
print_id = "",
|
||||
create_id = _userManager.UserId,
|
||||
create_time = DateTime.Now,
|
||||
};
|
||||
WmsInstockCode instockCode = new()
|
||||
instockD = new()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId(),
|
||||
bill_id = instock.id,
|
||||
line_status = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
||||
material_id = mat.id,
|
||||
material_code = mat.code,
|
||||
unit_id = mat.unit_id,
|
||||
pr_qty = item.codeqty,
|
||||
qty = 0,
|
||||
code_batch = item.code_batch,
|
||||
warehouse_id = "26103372441637",
|
||||
print_qty = item.codeqty,
|
||||
scan_qty = item.codeqty,
|
||||
print_id = "",
|
||||
create_id = _userManager.UserId,
|
||||
create_time = DateTime.Now,
|
||||
};
|
||||
instockDs.Add(instockD);
|
||||
}
|
||||
else
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId(),
|
||||
bill_id = instock.id,
|
||||
bill_d_id = instockD.id,
|
||||
line_status = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
||||
material_id = mat.id,
|
||||
material_code = mat.code,
|
||||
unit_id = mat.unit_id,
|
||||
barcode = carryCode,
|
||||
code_batch = item.code_batch,
|
||||
codeqty = item.codeqty,
|
||||
is_lock = 0,
|
||||
is_end = 0,
|
||||
create_id = _userManager.UserId,
|
||||
create_time = DateTime.Now,
|
||||
};
|
||||
if (input.data.ContainsKey("details"))
|
||||
{
|
||||
instockDs = input.data["details"].Adapt<List<WmsInstockD>>();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WmsInstockCode? instockCode = null;
|
||||
if (mat != null)
|
||||
{
|
||||
instockCode = new()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId(),
|
||||
bill_id = instock.id,
|
||||
bill_d_id = instockD?.id ?? string.Empty,
|
||||
line_status = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
||||
material_id = mat.id,
|
||||
material_code = mat.code,
|
||||
unit_id = mat.unit_id,
|
||||
barcode = carryCode,
|
||||
code_batch = item.code_batch,
|
||||
codeqty = item.codeqty,
|
||||
is_lock = 0,
|
||||
is_end = 0,
|
||||
create_id = _userManager.UserId,
|
||||
create_time = DateTime.Now,
|
||||
};
|
||||
}
|
||||
|
||||
_ = await _db.Insertable(instock).ExecuteCommandAsync();
|
||||
_ = await _db.Insertable(instockD).ExecuteCommandAsync();
|
||||
_ = await _db.Insertable(instockCode).ExecuteCommandAsync();
|
||||
_ = await _db.Insertable(instockDs).ExecuteCommandAsync();
|
||||
if (instockCode != null)
|
||||
{
|
||||
_ = await _db.Insertable(instockCode).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
|
||||
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = "26103372441637", Size = 1 };
|
||||
|
||||
134
WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs
Normal file
134
WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs
Normal file
@@ -0,0 +1,134 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Dtos.VisualDev;
|
||||
using JNPF.FriendlyException;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.Common.Utils;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
using Tnb.WarehouseMgr.Entities.Entity.Constraints;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
/// <summary>
|
||||
/// 采购收货、销售发货,通用业务类
|
||||
/// </summary>
|
||||
/// <typeparam name="TEntity"></typeparam>
|
||||
public class WmsPurchaseAndSaleCommonService<TEntity> : BaseWareHouseService where TEntity : BaseEntity<string>, IPurchaseAndSaleEntity, IPurchaseAndSaleQueryEntity
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IWmsPDAScanInStockService _wmsPDAScanInStockService;
|
||||
private readonly IWmsOutStockService _wmsOutStockService;
|
||||
private static Dictionary<string, object> s_materialMap = new();
|
||||
|
||||
public WmsPurchaseAndSaleCommonService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager, IWmsOutStockService? wmsOutStockService = null)
|
||||
{
|
||||
_db = repo.AsSugarClient();
|
||||
_userManager = userManager;
|
||||
_wmsOutStockService = wmsOutStockService!;
|
||||
}
|
||||
|
||||
protected async Task<bool> PurchaseAndSaleUpdate(PurchaseAndReceiveUpInput input)
|
||||
{
|
||||
if (input == null) throw new ArgumentNullException("input");
|
||||
if (input.details == null) throw new ArgumentNullException(nameof(input.details));
|
||||
|
||||
|
||||
var dicMaterialPurchaseArriveQty = input.details.ToDictionary(x => x.material_id, x => x.purchase_arriveqty);
|
||||
var materialIds = input.details.Select(x => x.material_id).ToList();
|
||||
var purchaseDs = await _db.Queryable<TEntity>().Where(it => materialIds.Contains(it.material_id)).ToListAsync();
|
||||
|
||||
if (purchaseDs?.Count > 0)
|
||||
{
|
||||
var errMaterialTipList = new List<(string materialName, decimal purchaseArriveQty, decimal topPurchaseQty)>();
|
||||
foreach (var pd in purchaseDs)
|
||||
{
|
||||
pd.purchase_prqty += dicMaterialPurchaseArriveQty.ContainsKey(pd.material_id) ? dicMaterialPurchaseArriveQty[pd.material_id] : 0;
|
||||
var pdInput = input.details.Find(x => x.material_id == pd.material_id);
|
||||
if (pdInput != null)
|
||||
{
|
||||
var topPurchaseQty = pd.purchase_qty - pd.purchase_prqty;
|
||||
if (pdInput.purchase_arriveqty > topPurchaseQty)
|
||||
{
|
||||
if (s_materialMap.ContainsKey(pdInput.material_id) && s_materialMap[pdInput.material_id] != null)
|
||||
{
|
||||
errMaterialTipList.Add((s_materialMap[pdInput.material_id].ToString()!, pdInput.purchase_arriveqty, topPurchaseQty));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (pd.purchase_prqty >= pd.purchase_qty)
|
||||
{
|
||||
pd.line_status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID;
|
||||
}
|
||||
else
|
||||
{
|
||||
pd.line_status = WmsWareHouseConst.BILLSTATUS_ON_ID;
|
||||
}
|
||||
}
|
||||
if (errMaterialTipList.Count > 0)
|
||||
{
|
||||
var errMsgList = new List<string>();
|
||||
if (typeof(TEntity) == typeof(WmsPurchaseD))
|
||||
{
|
||||
errMsgList = errMaterialTipList.Select(x => $"物料:{x.materialName},实际收货数:{x.purchaseArriveQty}已超出可收货数:{x.topPurchaseQty}").ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
errMsgList = errMaterialTipList.Select(x => $"物料:{x.materialName},实际发货数:{x.purchaseArriveQty}已超出可发货数:{x.topPurchaseQty}").ToList();
|
||||
}
|
||||
var errMsg = string.Join("\r\n", errMsgList);
|
||||
throw new AppFriendlyException(errMsg, 500);
|
||||
}
|
||||
|
||||
purchaseDs.ForEach(x =>
|
||||
{
|
||||
x.modify_id = _userManager.UserId;
|
||||
x.modify_time = DateTime.Now;
|
||||
});
|
||||
await _db.Updateable(purchaseDs).ExecuteCommandAsync();
|
||||
if (purchaseDs.All(x => x.line_status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID))
|
||||
{
|
||||
var purchase = await _db.Queryable<WmsPurchaseH>().FirstAsync(it => it.bill_code == input.bill_code);
|
||||
if (purchase != null)
|
||||
{
|
||||
purchase.status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID;
|
||||
purchase.modify_id = _userManager.UserId;
|
||||
purchase.modify_time = DateTime.Now;
|
||||
await _db.Updateable(purchase).UpdateColumns(it => it.status).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
VisualDevModelDataCrInput visualDevModelDataInput = new();
|
||||
visualDevModelDataInput.data = PocoToDictionary.ToDictionary(input) as Dictionary<string, object>;
|
||||
if (_wmsOutStockService != null)
|
||||
{
|
||||
await _wmsOutStockService.OutStockApplyFor(visualDevModelDataInput);
|
||||
}
|
||||
|
||||
return await Task.FromResult(true);
|
||||
}
|
||||
|
||||
protected async Task<List<TEntity>> GetDetailsByPkId(string pkId)
|
||||
{
|
||||
if (s_materialMap.Count == 0)
|
||||
{
|
||||
s_materialMap = await _db.Queryable<BasMaterial>().ToDictionaryAsync(x => x.id, x => x.name);
|
||||
}
|
||||
var list = await _db.Queryable<TEntity>().Where(it => it.bill_id == pkId)
|
||||
.Mapper(it => it.material_name = s_materialMap.ContainsKey(it.material_id) ? s_materialMap[it.material_id]?.ToString() ?? "" : "")
|
||||
.ToListAsync();
|
||||
return list;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
105
WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
Normal file
105
WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
Normal file
@@ -0,0 +1,105 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Dtos.VisualDev;
|
||||
using JNPF.Common.Security;
|
||||
using JNPF.DependencyInjection;
|
||||
using JNPF.FriendlyException;
|
||||
using JNPF.Logging;
|
||||
using JNPF.VisualDev;
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json;
|
||||
using NPOI.OpenXmlFormats;
|
||||
using NPOI.OpenXmlFormats.Dml.Diagram;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.Common.Utils;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
/// <summary>
|
||||
/// 采购收货
|
||||
/// </summary>
|
||||
[OverideVisualDev(ModuleConsts.MODULE_WMSPURCHASE_ID)]
|
||||
public class WmsPurchaseService : WmsPurchaseAndSaleCommonService<WmsPurchaseD>
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IUserManager _userManager;
|
||||
public WmsPurchaseService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager)
|
||||
: base(repo, userManager)
|
||||
{
|
||||
_db = repo.AsSugarClient();
|
||||
_userManager = userManager;
|
||||
}
|
||||
|
||||
private async Task<dynamic> xxx(VisualDevModelDataCrInput input)
|
||||
{
|
||||
PurchaseAndReceiveUpInput input2 = new();
|
||||
var input3 = input.data.ToObject<PurchaseAndReceiveUpInput>();
|
||||
input3.details = input.data["tablefield177"].ToObject<List<WmsPurchaseD>>();
|
||||
var sss = JsonConvert.SerializeObject(input3);
|
||||
return await Task.FromResult(sss);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 采购收货
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> Purchase(PurchaseAndReceiveUpInput input)
|
||||
{
|
||||
var blFlag = true;
|
||||
try
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
blFlag = await PurchaseAndSaleUpdate(input);
|
||||
if (blFlag)
|
||||
{
|
||||
var instock = input.Adapt<WmsInstockH>();
|
||||
instock.id = SnowflakeIdHelper.NextId();
|
||||
instock.create_id = _userManager.UserId;
|
||||
instock.create_time = DateTime.Now;
|
||||
instock.org_id = _userManager.User.OrganizeId;
|
||||
await _db.Insertable(instock).ExecuteCommandAsync();
|
||||
|
||||
var instockD = input.details.Adapt<WmsInstockD>();
|
||||
instockD.create_id = _userManager.UserId;
|
||||
instockD.create_time = DateTime.Now;
|
||||
instockD.org_id = _userManager.User.OrganizeId;
|
||||
await _db.Insertable(instockD).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
blFlag = false;
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
Log.Error("采购收货失败", ex);
|
||||
throw;
|
||||
}
|
||||
return await Task.FromResult(blFlag);
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据主表Id获取采购收货明细
|
||||
/// </summary>
|
||||
/// <param name="id">主表Id</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("id")]
|
||||
public async Task<dynamic> GetPurchaseDetailByBillId(string id)
|
||||
{
|
||||
return await GetDetailsByPkId(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
39
WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs
Normal file
39
WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
/// <summary>
|
||||
/// 销售发货
|
||||
/// </summary>
|
||||
public class WmsSaleService : WmsPurchaseAndSaleCommonService<WmsSaleD>
|
||||
{
|
||||
public WmsSaleService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager, IWmsOutStockService wmsOutStockService)
|
||||
: base(repo, userManager, wmsOutStockService: wmsOutStockService)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<dynamic> Sale(PurchaseAndReceiveUpInput input)
|
||||
{
|
||||
return await PurchaseAndSaleUpdate(input);
|
||||
}
|
||||
|
||||
[HttpGet("id")]
|
||||
public async Task<dynamic> GetSaleDetailsByBillId(string id)
|
||||
{
|
||||
return await GetDetailsByPkId(id);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
46
common/Tnb.Common/Utils/PocoToDictionary.cs
Normal file
46
common/Tnb.Common/Utils/PocoToDictionary.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.Common.Utils
|
||||
{
|
||||
public static class PocoToDictionary
|
||||
{
|
||||
private static readonly MethodInfo AddToDicitonaryMethod = typeof(IDictionary<string, object>).GetMethod("Add");
|
||||
private static readonly ConcurrentDictionary<Type, Func<object, IDictionary<string, object>>> Converters = new ConcurrentDictionary<Type, Func<object, IDictionary<string, object>>>();
|
||||
private static readonly ConstructorInfo DictionaryConstructor = typeof(Dictionary<string, object>).GetConstructors().FirstOrDefault(c => c.IsPublic && !c.GetParameters().Any());
|
||||
|
||||
public static IDictionary<string, object> ToDictionary(this object obj) => obj == null ? null : Converters.GetOrAdd(obj.GetType(), o =>
|
||||
{
|
||||
var outputType = typeof(IDictionary<string, object>);
|
||||
var inputType = obj.GetType();
|
||||
var inputExpression = Expression.Parameter(typeof(object), "input");
|
||||
var typedInputExpression = Expression.Convert(inputExpression, inputType);
|
||||
var outputVariable = Expression.Variable(outputType, "output");
|
||||
var returnTarget = Expression.Label(outputType);
|
||||
var body = new List<Expression>
|
||||
{
|
||||
Expression.Assign(outputVariable, Expression.New(DictionaryConstructor))
|
||||
};
|
||||
body.AddRange(
|
||||
from prop in inputType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)
|
||||
where prop.CanRead //&& (prop.PropertyType.IsPrimitive || prop.PropertyType == typeof(string))
|
||||
let getExpression = Expression.Property(typedInputExpression, prop.GetMethod)
|
||||
let convertExpression = Expression.Convert(getExpression, typeof(object))
|
||||
select Expression.Call(outputVariable, AddToDicitonaryMethod, Expression.Constant(prop.Name), convertExpression));
|
||||
body.Add(Expression.Return(returnTarget, outputVariable));
|
||||
body.Add(Expression.Label(returnTarget, Expression.Constant(null, outputType)));
|
||||
|
||||
var lambdaExpression = Expression.Lambda<Func<object, IDictionary<string, object>>>(
|
||||
Expression.Block(new[] { outputVariable }, body),
|
||||
inputExpression);
|
||||
|
||||
return lambdaExpression.Compile();
|
||||
})(obj);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user