ERP对接WMS接口

This commit is contained in:
qianjiawei
2023-12-08 17:05:10 +08:00
parent ad65e9fd0d
commit 3a7a0dd572
6 changed files with 587 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
{
public class AllotInput
{
/// <summary>
/// 起始库位ID
/// </summary>
public string startlocation { get; set; } = string.Empty;
/// <summary>
/// 目标库位ID
/// </summary>
public string endlocation { get; set; } = string.Empty;
/// <summary>
/// 单据状态
/// </summary>
public string status { get; set; } = string.Empty;
/// <summary>
/// 业务类型:
/// </summary>
public string biz_type { get; set; } = string.Empty;
/// <summary>
/// 所属仓库
/// </summary>
public string warehouse { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
{
public class PurchaseArriveInput
{
/// <summary>
/// 入库仓库
/// </summary>
public string? warehouse { get; set; }
/// <summary>
/// 供应商代码
/// </summary>
public string? supplier_code { get; set; }
/// <summary>
/// 来源单据ID
/// </summary>
public string? source_id { get; set; }
/// <summary>
/// 来源单据代码
/// </summary>
public string? source_code { get; set; }
/// <summary>
/// 供货日期
/// </summary>
public DateTime delivery_date { get; set; } = DateTime.Now;
/// <summary>
/// 运输方式
/// </summary>
public string? shipping_method { get; set; }
public List<PurchaseArriveDetail> details { get; set; }
}
public class PurchaseArriveDetail
{
/// <summary>
/// 物品代码
/// </summary>
public string material_code { get; set; } = string.Empty;
/// <summary>
/// 采购数量
/// </summary>
public decimal purchase_qty { get; set; }
/// <summary>
/// 已到货数量
/// </summary>
public decimal purchase_prqty { get; set; }
/// <summary>
/// 批次
/// </summary>
public string? code_batch { get; set; }
/// <summary>
/// 本次到货数量
/// </summary>
public decimal purchase_arriveqty { get; set; }
/// <summary>
/// 箱号
/// </summary>
public string? container_no { get; set; }
}
}

View File

@@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
{
public class PurchaseReturnInput
{ /// <summary>
/// 入库仓库
/// </summary>
public string? warehouse { get; set; }
/// <summary>
/// 供应商代码
/// </summary>
public string? supplier_code { get; set; }
/// <summary>
/// 来源单据ID
/// </summary>
public string? source_id { get; set; }
/// <summary>
/// 来源单据代码
/// </summary>
public string? source_code { get; set; }
/// <summary>
/// 供货日期
/// </summary>
public DateTime delivery_date { get; set; } = DateTime.Now;
/// <summary>
/// 运输方式
/// </summary>
public string? shipping_method { get; set; }
public List<PurchaseReturnDetail> details { get; set; }
}
public class PurchaseReturnDetail
{
/// <summary>
/// 物品代码
/// </summary>
public string material_code { get; set; } = string.Empty;
/// <summary>
/// 采购数量
/// </summary>
public decimal purchase_qty { get; set; }
/// <summary>
/// 已到货数量
/// </summary>
public decimal purchase_prqty { get; set; }
/// <summary>
/// 批次
/// </summary>
public string? code_batch { get; set; }
/// <summary>
/// 本次到货数量
/// </summary>
public decimal purchase_arriveqty { get; set; }
/// <summary>
/// 箱号
/// </summary>
public string? container_no { get; set; }
}
}

View File

@@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Org.BouncyCastle.Crypto;
using SqlSugar;
namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
{
public class SaleOutInput
{
/// <summary>
/// 仓库
/// </summary>
public string? warehouse { get; set; }
/// <summary>
/// 客户代码
/// </summary>
public string? customer_code { get; set; }
/// <summary>
/// 来源单据ID
/// </summary>
public string? source_id { get; set; }
/// <summary>
/// 来源单据代码
/// </summary>
public string? source_code { get; set; }
/// <summary>
/// 供货日期
/// </summary>
public DateTime ship_date { get; set; } = DateTime.Now;
/// <summary>
/// 运输方式
/// </summary>
public string? shipping_method { get; set; }
public List<SaleOutDetail> details { get; set; }
}
public class SaleOutDetail
{
/// <summary>
/// 物品代码
/// </summary>
public string material_code { get; set; } = string.Empty;
/// <summary>
/// 批次
/// </summary>
public string? code_batch { get; set; }
/// <summary>
/// 箱号
/// </summary>
public string? container_no { get; set; }
/// <summary>
/// 本次发货数量
/// </summary>
public decimal purchase_arriveqty { get; set; }
/// <summary>
///已 发货数量
/// </summary>
public decimal purchase_prqty { get; set; }
/// <summary>
/// 发货数量
/// </summary>
public decimal purchase_qty { get; set; }
}
}

View File

@@ -0,0 +1,115 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using JNPF.Common.Contracts;
using JNPF.Common.Security;
using SqlSugar;
namespace Tnb.WarehouseMgr.Entities
{
/// <summary>
/// 库内转移
/// </summary>
[SugarTable("wms_allot")]
public partial class WmsAllot : BaseEntity<string>
{
public WmsAllot()
{
id = SnowflakeIdHelper.NextId();
}
/// <summary>
/// 租户ID
/// </summary>
public string? tenant_id { get; set; }
/// <summary>
/// 所属组织ID
/// </summary>
public string? org_id { get; set; }
/// <summary>
/// 起始库位ID
/// </summary>
public string startlocation_id { get; set; } = string.Empty;
/// <summary>
/// 目标库位ID
/// </summary>
public string endlocation_id { get; set; } = string.Empty;
/// <summary>
/// 单号
/// </summary>
public string bill_code { 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 carry_id { get; set; } = string.Empty;
/// <summary>
/// 载具编号
/// </summary>
public string carry_code { get; set; } = string.Empty;
/// <summary>
/// 所属仓库
/// </summary>
public string warehouse_id { get; set; } = string.Empty;
/// <summary>
/// 创建用户
/// </summary>
public string create_id { get; set; } = string.Empty;
/// <summary>
/// 创建时间
/// </summary>
public DateTime create_time { get; set; } = DateTime.Now;
/// <summary>
/// 最后修改人员ID
/// </summary>
public string? modify_id { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
public DateTime? modify_time { get; set; }
/// <summary>
/// 扩展字段
/// </summary>
public string? extras { get; set; }
/// <summary>
/// 时间戳(用于并发控制)
/// </summary>
public DateTime? timestamp { get; set; }
/// <summary>
/// 流程任务Id
/// </summary>
public string? f_flowtaskid { get; set; }
/// <summary>
/// 流程引擎Id
/// </summary>
public string? f_flowid { get; set; }
}
}

View File

@@ -0,0 +1,212 @@
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.Systems.Interfaces.System;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Dto.ErpInputs;
namespace Tnb.WarehouseMgr
{
/// <summary>
/// erp接口模块
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 800)]
public class ErpToWmsService : IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository<WmsPurchaseH> _repository;
private readonly IBillRullService _billRuleService;
public ErpToWmsService(ISqlSugarRepository<WmsPurchaseH> repository, IBillRullService billRuleService)
{
_repository = repository;
_billRuleService = billRuleService;
}
/// <summary>
/// 采购到货单
/// </summary>
public async Task PurchaseArrive(PurchaseArriveInput input)
{
//主表 create_time 采购收货单号 bill_code 单据类型 bill_type 单据状态 status 业务类型 biz_type 入库仓库ID warehouse_id 供应商ID supplier_id 供应商名称supplier_name 生成类型 generate_type
//子表 主表id bill_id 执行状态line_status 单位id unit_id 物料id material_id
var db = _repository.AsSugarClient();
WmsPurchaseH wmsPurchaseH = new WmsPurchaseH();
string Code = await _billRuleService.GetBillNumber("WmsPurchase");
wmsPurchaseH.bill_code = Code;
wmsPurchaseH.bill_type = "25103333373205";//收料通知单(到货单)
wmsPurchaseH.biz_type = "26191496816421";//一般入库
wmsPurchaseH.status = "25065138925589";//新增
wmsPurchaseH.generate_type = "1";//0人工 1自动
wmsPurchaseH.create_time = DateTime.Now;
wmsPurchaseH.source_id = input.source_id;
wmsPurchaseH.source_code = input.source_code;
wmsPurchaseH.delivery_date = input.delivery_date;
wmsPurchaseH.shipping_method = input.shipping_method;
var warehouse = await db.Queryable<BasWarehouse>().Where(p => p.whcode == input.warehouse).FirstAsync();
if (warehouse != null)
wmsPurchaseH.warehouse_id = warehouse.id;
wmsPurchaseH.supplier_code = input.supplier_code;
var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
if (supplier != null)
{
wmsPurchaseH.supplier_id = supplier.id;
wmsPurchaseH.supplier_name = supplier.supplier_name;
}
List<WmsPurchaseD> WmsPurchaseDs = new List<WmsPurchaseD>();
foreach (var detail in input.details)
{
WmsPurchaseD wmsPurchased = new WmsPurchaseD();
wmsPurchased.bill_id = wmsPurchaseH.id;
wmsPurchased.line_status = "25065138925589";//新增
wmsPurchased.purchase_qty = detail.purchase_qty;
wmsPurchased.purchase_prqty = detail.purchase_prqty;
wmsPurchased.code_batch = detail.code_batch;
wmsPurchased.purchase_arriveqty = detail.purchase_arriveqty;
wmsPurchased.container_no = detail.container_no;
wmsPurchased.material_code = detail.material_code;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPurchased.material_id = material.id;
// wmsPurchased.material_name = material.name;
wmsPurchased.unit_id = material.unit_id;
}
WmsPurchaseDs.Add(wmsPurchased);
}
await db.Insertable(wmsPurchaseH).ExecuteCommandAsync();
await db.Insertable(WmsPurchaseDs).ExecuteCommandAsync();
}
/// <summary>
/// 采购退货单
/// </summary>
public async Task PurchaseReturn(PurchaseReturnInput input)
{
//主表 create_time 采购收货单号 bill_code 单据类型 bill_type 单据状态 status 业务类型 biz_type 入库仓库ID warehouse_id 供应商ID supplier_id 供应商名称supplier_name 生成类型 generate_type
//子表 主表id bill_id 执行状态line_status 单位id unit_id 物料id material_id
var db = _repository.AsSugarClient();
WmsPurchaseH wmsPurchaseH = new WmsPurchaseH();
string Code = await _billRuleService.GetBillNumber("WmsPurchase");
wmsPurchaseH.bill_code = Code;
wmsPurchaseH.bill_type = "25103345478421";//采购退料单
wmsPurchaseH.biz_type = "26191522660645";//一般出库
wmsPurchaseH.status = "25065138925589";//新增
wmsPurchaseH.generate_type = "1";//0人工 1自动
wmsPurchaseH.create_time = DateTime.Now;
wmsPurchaseH.source_id = input.source_id;
wmsPurchaseH.source_code = input.source_code;
wmsPurchaseH.delivery_date = input.delivery_date;
wmsPurchaseH.shipping_method = input.shipping_method;
var warehouse = await db.Queryable<BasWarehouse>().Where(p => p.whcode == input.warehouse).FirstAsync();
if (warehouse != null)
wmsPurchaseH.warehouse_id = warehouse.id;
wmsPurchaseH.supplier_code = input.supplier_code;
var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
if (supplier != null)
{
wmsPurchaseH.supplier_id = supplier.id;
wmsPurchaseH.supplier_name = supplier.supplier_name;
}
List<WmsPurchaseD> WmsPurchaseDs = new List<WmsPurchaseD>();
foreach (var detail in input.details)
{
WmsPurchaseD wmsPurchased = new WmsPurchaseD();
wmsPurchased.bill_id = wmsPurchaseH.id;
wmsPurchased.line_status = "25065138925589";//新增
wmsPurchased.purchase_qty = detail.purchase_qty;
wmsPurchased.purchase_prqty = detail.purchase_prqty;
wmsPurchased.code_batch = detail.code_batch;
wmsPurchased.purchase_arriveqty = detail.purchase_arriveqty;
wmsPurchased.container_no = detail.container_no;
wmsPurchased.material_code = detail.material_code;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPurchased.material_id = material.id;
// wmsPurchased.material_name = material.name;
wmsPurchased.unit_id = material.unit_id;
}
WmsPurchaseDs.Add(wmsPurchased);
}
await db.Insertable(wmsPurchaseH).ExecuteCommandAsync();
await db.Insertable(WmsPurchaseDs).ExecuteCommandAsync();
}
/// <summary>
/// 仓库调拨
/// </summary>
public async Task Allot(AllotInput input)
{
var db = _repository.AsSugarClient();
WmsAllot wmsAllot = new WmsAllot();
string Code = await _billRuleService.GetBillNumber("WmsTransfer");
wmsAllot.bill_code = Code;
wmsAllot.biz_type = "25044010525205";//仓库调拨
wmsAllot.status = "25065138925589";//新增
var warehouse = await db.Queryable<BasWarehouse>().Where(p => p.whcode == input.warehouse).FirstAsync();
if (warehouse != null)
wmsAllot.warehouse_id = warehouse.id;
var startloc = await db.Queryable<BasLocation>().Where(p => p.location_code == input.startlocation).FirstAsync();
if (startloc != null)
wmsAllot.startlocation_id = startloc.id;
var endloc = await db.Queryable<BasLocation>().Where(p => p.location_code == input.endlocation).FirstAsync();
if (endloc != null)
wmsAllot.endlocation_id = endloc.id;
wmsAllot.create_time = DateTime.Now;
await db.Insertable(wmsAllot).ExecuteCommandAsync();
}
/// <summary>
/// 销售出库单
/// </summary>
public async Task SaleOut(SaleOutInput input)
{
var db = _repository.AsSugarClient();
WmsSaleH WmsSaleH = new WmsSaleH();
string Code = await _billRuleService.GetBillNumber("WmsSale");
WmsSaleH.bill_code = Code;
WmsSaleH.bill_type = "25103439022357";//销售出库单
WmsSaleH.biz_type = "26191522660645";//一般出库
WmsSaleH.status = "25065138925589";//新增
WmsSaleH.generate_type = "1";//0人工 1自动
WmsSaleH.create_time = DateTime.Now;
WmsSaleH.source_id = input.source_id;
WmsSaleH.source_code = input.source_code;
WmsSaleH.ship_date = input.ship_date;
WmsSaleH.shipping_method = input.shipping_method;
var warehouse = await db.Queryable<BasWarehouse>().Where(p => p.whcode == input.warehouse).FirstAsync();
if (warehouse != null)
WmsSaleH.warehouse_id = warehouse.id;
WmsSaleH.customer_code = input.customer_code;
var customer = await db.Queryable<BasCustomer>().Where(p => p.customer_code == input.customer_code).FirstAsync();
if (customer != null)
{
WmsSaleH.customer_id = customer.id;
WmsSaleH.customer_name = customer.customer_name;
}
List<WmsSaleD> WmsSaleDs = new List<WmsSaleD>();
foreach (var detail in input.details)
{
WmsSaleD WmsSaleD = new WmsSaleD();
WmsSaleD.bill_id = WmsSaleH.id;
WmsSaleD.line_status = "25065138925589";//新增
WmsSaleD.purchase_qty = detail.purchase_qty;
WmsSaleD.purchase_prqty = detail.purchase_prqty;
WmsSaleD.code_batch = detail.code_batch;
WmsSaleD.purchase_arriveqty = detail.purchase_arriveqty;
WmsSaleD.container_no = detail.container_no;
WmsSaleD.material_code = detail.material_code;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
WmsSaleD.material_id = material.id;
// WmsSaleD.material_name = material.name;
WmsSaleD.unit_id = material.unit_id;
}
WmsSaleDs.Add(WmsSaleD);
}
await db.Insertable(WmsSaleH).ExecuteCommandAsync();
await db.Insertable(WmsSaleDs).ExecuteCommandAsync();
}
}
}