采购收货,销售发货业务代码提交
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
namespace Tnb.WarehouseMgr;
|
using System.CodeDom;
|
||||||
|
|
||||||
|
namespace Tnb.WarehouseMgr;
|
||||||
|
|
||||||
public class ModuleConsts
|
public class ModuleConsts
|
||||||
{
|
{
|
||||||
@@ -185,5 +187,8 @@ public class ModuleConsts
|
|||||||
/// 模块标识-PDA寄存出库
|
/// 模块标识-PDA寄存出库
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string MODULE_WMSSCANCODEINSTOCKPDA_ID = "28576495374869";
|
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
|
/// 流程引擎Id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? f_flowid { get; set; }
|
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.Consts;
|
||||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||||
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
|
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 ? "不合格" : "合格");
|
.Map(dest => dest.qc_status, src => src.is_check == 0 ? "不合格" : "合格");
|
||||||
config.ForType<WmsCarryCode, CarryCodeQueryOutput>()
|
config.ForType<WmsCarryCode, CarryCodeQueryOutput>()
|
||||||
.Map(dest => dest.check_conclusion, src => GenericEnumDicionary<EnumCheckConclusion>.GetEnumDesc(src.check_conclusion));
|
.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>
|
||||||
/// 入库申请服务接口
|
/// 入库申请服务接口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IWmsInStockService
|
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
|
namespace Tnb.WarehouseMgr.Interfaces
|
||||||
{
|
{
|
||||||
@@ -13,5 +14,11 @@ namespace Tnb.WarehouseMgr.Interfaces
|
|||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<dynamic> MESCreateOutstock(MESCreateOutstockInput input);
|
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;
|
OverideFuncs.CreateAsync = OutStockApplyFor;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<dynamic> OutStockApplyFor(VisualDevModelDataCrInput input)
|
public async Task<dynamic> OutStockApplyFor(VisualDevModelDataCrInput input)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -235,30 +235,33 @@ namespace Tnb.WarehouseMgr
|
|||||||
List<WmsInstockCode> items = instockDetails.Adapt<List<WmsInstockCode>>();
|
List<WmsInstockCode> items = instockDetails.Adapt<List<WmsInstockCode>>();
|
||||||
//items.ForEach(it => it.org_id = _userManager.User.OrganizeId);
|
//items.ForEach(it => it.org_id = _userManager.User.OrganizeId);
|
||||||
List<WmsInstockCode> instockCOdes = new();
|
List<WmsInstockCode> instockCOdes = new();
|
||||||
jArr = JArray.Parse(input.data["tablefield115"].ToString()!);
|
if (input.data.ContainsKey("tablefield115"))
|
||||||
if (jArr?.Children().Count() > 0)
|
|
||||||
{
|
{
|
||||||
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));
|
foreach (JToken jo in jArr.Children())
|
||||||
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);
|
string? materialCode = jo.Value<string>(nameof(WmsInstockCode.material_code));
|
||||||
c.id = SnowflakeIdHelper.NextId();
|
string? codeBatch = jo.Value<string>(nameof(WmsInstockCode.code_batch));
|
||||||
c.bill_d_id = b.id;
|
WmsInstockCode? b = items.Find(x => x.material_code == materialCode && x.code_batch == codeBatch);
|
||||||
c.barcode = jo.Value<string>(nameof(WmsInstockCode.barcode))!;
|
if (b != null)
|
||||||
c.codeqty = jo.Value<int>(nameof(WmsInstockCode.codeqty));
|
{
|
||||||
instockCOdes.Add(c);
|
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(carryCodes).ExecuteCommandAsync();
|
||||||
_ = await _db.Insertable(instockCOdes).CallEntityMethod(it => it.Create(orgId)).ExecuteCommandAsync();
|
|
||||||
// 更新临时条码表 状态is_end
|
// 更新临时条码表 状态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,
|
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 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() });
|
it => new BasLocation { is_lock = 1, is_use = ((int)EnumCarryStatus.占用).ToString() });
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[OverideVisualDev(ModuleConsts.MODULE_WMSSCANCODEINSTOCKPDA_ID)]
|
[OverideVisualDev(ModuleConsts.MODULE_WMSSCANCODEINSTOCKPDA_ID)]
|
||||||
[ServiceModule(BizTypeId)]
|
[ServiceModule(BizTypeId)]
|
||||||
public class WmsPDAScanInStockService : BaseWareHouseService, IPdaStroage
|
public class WmsPDAScanInStockService : BaseWareHouseService, IWmsPDAScanInStockService, IPdaStroage
|
||||||
{
|
{
|
||||||
private const string BizTypeId = "26191496816421";
|
private const string BizTypeId = "26191496816421";
|
||||||
private readonly ISqlSugarClient _db;
|
private readonly ISqlSugarClient _db;
|
||||||
@@ -57,90 +57,126 @@ namespace Tnb.WarehouseMgr
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _db.Ado.BeginTranAsync();
|
await _db.Ado.BeginTranAsync();
|
||||||
WmsInstockCode item = input.data.Adapt<WmsInstockCode>();
|
WmsInstockCode? item = null;
|
||||||
if (item.codeqty == 0)
|
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;
|
var whId = input.data.ContainsKey(nameof(WmsPurchaseH.warehouse_id)) ? input.data[nameof(WmsPurchaseH.warehouse_id)] : null;
|
||||||
WmsCarryH carry = await _db.Queryable<WmsCarryH>().FirstAsync(it => it.carry_code == carryCode);
|
var billCode = input.data.ContainsKey(nameof(WmsPurchaseH.bill_code)) ? input.data[nameof(WmsPurchaseH.warehouse_id)] : null;
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
WmsInstockH instock = new()
|
WmsInstockH instock = new()
|
||||||
{
|
{
|
||||||
id = SnowflakeIdHelper.NextId(),
|
id = SnowflakeIdHelper.NextId(),
|
||||||
org_id = _userManager.UserId,
|
org_id = _userManager.UserId,
|
||||||
carry_code = carryCode,
|
carry_code = carryCode,
|
||||||
carry_id = carry.id,
|
carry_id = carry?.id ?? string.Empty,
|
||||||
location_id = loc.id,
|
location_id = loc?.id ?? string.Empty,
|
||||||
bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_INSTOCK_ENCODE).GetAwaiter().GetResult(),
|
bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_INSTOCK_ENCODE).GetAwaiter().GetResult(),
|
||||||
bill_type = WmsWareHouseConst.BILLTYPE_MATERIALINSTOCK_ID,
|
bill_type = WmsWareHouseConst.BILLTYPE_MATERIALINSTOCK_ID,
|
||||||
biz_type = WmsWareHouseConst.BIZTYPE_WMSINSTOCK_ID,
|
biz_type = WmsWareHouseConst.BIZTYPE_WMSINSTOCK_ID,
|
||||||
bill_date = DateTime.Today,
|
bill_date = DateTime.Today,
|
||||||
warehouse_id = "26103372441637",
|
warehouse_id = whId?.ToString() ?? "26103372441637",
|
||||||
status = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
status = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
||||||
generate_type = "0",
|
generate_type = "0",
|
||||||
sync_status = WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC,
|
sync_status = WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC,
|
||||||
print_status = WmsWareHouseConst.PRINT_STATUS_PRINTCOMPLETE,
|
print_status = WmsWareHouseConst.PRINT_STATUS_PRINTCOMPLETE,
|
||||||
is_check = 1,
|
is_check = 1,
|
||||||
|
purchase_code = billCode?.ToString() ?? string.Empty,
|
||||||
create_id = _userManager.UserId,
|
create_id = _userManager.UserId,
|
||||||
create_time = DateTime.Now,
|
create_time = DateTime.Now,
|
||||||
};
|
};
|
||||||
WmsInstockD instockD = new()
|
var instockDs = new List<WmsInstockD>();
|
||||||
|
WmsInstockD? instockD = null;
|
||||||
|
if (mat != null)
|
||||||
{
|
{
|
||||||
id = SnowflakeIdHelper.NextId(),
|
instockD = new()
|
||||||
bill_id = instock.id,
|
{
|
||||||
line_status = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
id = SnowflakeIdHelper.NextId(),
|
||||||
material_id = mat.id,
|
bill_id = instock.id,
|
||||||
material_code = mat.code,
|
line_status = WmsWareHouseConst.BILLSTATUS_ADD_ID,
|
||||||
unit_id = mat.unit_id,
|
material_id = mat.id,
|
||||||
pr_qty = item.codeqty,
|
material_code = mat.code,
|
||||||
qty = 0,
|
unit_id = mat.unit_id,
|
||||||
code_batch = item.code_batch,
|
pr_qty = item.codeqty,
|
||||||
warehouse_id = "26103372441637",
|
qty = 0,
|
||||||
print_qty = item.codeqty,
|
code_batch = item.code_batch,
|
||||||
scan_qty = item.codeqty,
|
warehouse_id = "26103372441637",
|
||||||
print_id = "",
|
print_qty = item.codeqty,
|
||||||
create_id = _userManager.UserId,
|
scan_qty = item.codeqty,
|
||||||
create_time = DateTime.Now,
|
print_id = "",
|
||||||
};
|
create_id = _userManager.UserId,
|
||||||
WmsInstockCode instockCode = new()
|
create_time = DateTime.Now,
|
||||||
|
};
|
||||||
|
instockDs.Add(instockD);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
id = SnowflakeIdHelper.NextId(),
|
if (input.data.ContainsKey("details"))
|
||||||
bill_id = instock.id,
|
{
|
||||||
bill_d_id = instockD.id,
|
instockDs = input.data["details"].Adapt<List<WmsInstockD>>();
|
||||||
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,
|
WmsInstockCode? instockCode = null;
|
||||||
codeqty = item.codeqty,
|
if (mat != null)
|
||||||
is_lock = 0,
|
{
|
||||||
is_end = 0,
|
instockCode = new()
|
||||||
create_id = _userManager.UserId,
|
{
|
||||||
create_time = DateTime.Now,
|
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(instock).ExecuteCommandAsync();
|
||||||
_ = await _db.Insertable(instockD).ExecuteCommandAsync();
|
_ = await _db.Insertable(instockDs).ExecuteCommandAsync();
|
||||||
_ = await _db.Insertable(instockCode).ExecuteCommandAsync();
|
if (instockCode != null)
|
||||||
|
{
|
||||||
|
_ = await _db.Insertable(instockCode).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = "26103372441637", Size = 1 };
|
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