Files
tnb.server/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs

1249 lines
65 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections.Generic;
using System.Text;
using Aop.Api.Domain;
using JNPF.Common.Enums;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using NPOI.OpenXmlFormats;
using NPOI.SS.Formula.Functions;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.ProductionMgr.Entities.Entity;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto.ErpInputs;
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
using Tnb.WarehouseMgr.Entities.Entity;
using Top.Api;
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();
}
/// <summary>
/// 销售退货单
/// </summary>
public async Task SaleReturn(SaleReturnInput input)
{
var db = _repository.AsSugarClient();
WmsInstockH WmsInstockH = new WmsInstockH();
string Code = await _billRuleService.GetBillNumber("WmsInStock");
WmsInstockH.bill_code = Code;
WmsInstockH.bill_date = DateTime.Now;
WmsInstockH.bill_type = "25103434001429";//销售退货单
WmsInstockH.biz_type = "26191496816421";//一般入库
WmsInstockH.status = "25065138925589";//新增
WmsInstockH.generate_type = "1";//0人工 1自动
WmsInstockH.create_time = DateTime.Now;
WmsInstockH.source_id = input.source_id;
WmsInstockH.source_code = input.source_code;
WmsInstockH.source_line = input.source_line;
WmsInstockH.source_detail_id = input.source_detail_id;
WmsInstockH.is_check = 1;
WmsInstockH.purchase_code = input.purchase_code;
WmsInstockH.sync_status = "26191359047461";//无需同步
WmsInstockH.print_status = "26191366982437";//未打印
WmsInstockH.create_id = "";
WmsInstockH.create_time = DateTime.Now;
var location = await db.Queryable<BasLocation>().Where(p => p.location_code == input.location).FirstAsync();
if (location != null)
WmsInstockH.location_id = location.id;
var warehouse = await db.Queryable<BasWarehouse>().Where(p => p.whcode == input.warehouse).FirstAsync();
if (warehouse != null)
WmsInstockH.warehouse_id = warehouse.id;
WmsInstockH.supplier_code = input.supplier_code;
var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
if (supplier != null)
{
WmsInstockH.supplier_id = supplier.id;
WmsInstockH.supplier_name = supplier.supplier_name;
}
List<WmsInstockD> WmsInstockDs = new List<WmsInstockD>();
foreach (var detail in input.details)
{
WmsInstockD WmsInstockD = new WmsInstockD();
WmsInstockD.bill_id = WmsInstockH.id;
WmsInstockD.line_status = "25065138925589";//新增
WmsInstockD.pr_qty = detail.pr_qty;
WmsInstockD.qty = detail.qty;
WmsInstockD.reason = detail.reason;
WmsInstockD.price = detail.price;
WmsInstockD.tax_price = detail.tax_price;
WmsInstockD.amount = detail.amount;
WmsInstockD.all_amount = detail.all_amount;
WmsInstockD.print_qty = 0;
WmsInstockD.scan_qty = 0;
WmsInstockD.code_batch = detail.code_batch;
WmsInstockD.container_no = detail.container_no;
var detailwarehouse = await db.Queryable<BasWarehouse>().Where(p => p.whcode == input.warehouse).FirstAsync();
if (detailwarehouse != null)
WmsInstockD.warehouse_id = detailwarehouse.id;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
WmsInstockD.material_id = material.id;
WmsInstockD.unit_id = material.unit_id;
}
WmsInstockDs.Add(WmsInstockD);
}
await db.Insertable(WmsInstockH).ExecuteCommandAsync();
await db.Insertable(WmsInstockDs).ExecuteCommandAsync();
}
/// <summary>
/// 采购订单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> PurchaseOrder(PurchaseOrderInput input)
{
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【PurchaseOrderInput】主表主键不能为空");
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderInput】子表主键不能为空");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
var wmsPurchaseOrdersDistinct = input.details.Select(r => new
{
material_id = r.material_code,
code_batch = r.code_batch,
}).Distinct();
if (wmsPurchaseOrdersDistinct.Count() < input.details.Count)
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderInput】表体存在物料和批号重复的明细");
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
}
try
{
await db.Ado.BeginTranAsync();
WmsPurchaseOrderH wmsPurchaseOrderH = new WmsPurchaseOrderH();
string Code = await _billRuleService.GetBillNumber("Purchase");
wmsPurchaseOrderH.purchase_order = Code;
wmsPurchaseOrderH.erp_bill_code = input.purchase_order;
wmsPurchaseOrderH.contact_person = input.contact_person;
wmsPurchaseOrderH.tel = input.tel;
wmsPurchaseOrderH.supplier_code = input.supplier_code;
wmsPurchaseOrderH.certificate_date = input.certificate_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
wmsPurchaseOrderH.ship_date = input.ship_date;
wmsPurchaseOrderH.erp_pk = input.erp_pk;
wmsPurchaseOrderH.create_id = WmsWareHouseConst.ErpUserId;
wmsPurchaseOrderH.create_time = DateTime.Now;
wmsPurchaseOrderH.erp_wh_type = input.erp_wh_type;
var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
if (supplier != null)
{
wmsPurchaseOrderH.supplier_id = supplier.id;
wmsPurchaseOrderH.supplier_name = supplier.supplier_name;
}
await db.Insertable(wmsPurchaseOrderH).ExecuteCommandAsync();
List<WmsPurchaseOrderD> wmsPurchaseOrderDs = new List<WmsPurchaseOrderD>();
foreach (var detail in input.details)
{
WmsPurchaseOrderD wmsPurchaseOrderD = new WmsPurchaseOrderD();
wmsPurchaseOrderD.fk_wms_purchase_order_id = wmsPurchaseOrderH.id;
wmsPurchaseOrderD.matcode = detail.material_code;
wmsPurchaseOrderD.unit = detail.unit_code;
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsPurchaseOrderD.unit = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrder】表体明细中单位{detail.unit_code}在wms系统中未找到");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到", 500);
}
wmsPurchaseOrderD.purchase_quantity = detail.purchase_quantity;
wmsPurchaseOrderD.stock_location = detail.stock_location;
wmsPurchaseOrderD.code_batch = detail.code_batch;
wmsPurchaseOrderD.delivery_date = detail.delivery_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
wmsPurchaseOrderD.erp_line_pk = detail.erp_line_pk;
wmsPurchaseOrderD.create_id = WmsWareHouseConst.ErpUserId;
wmsPurchaseOrderD.create_time = DateTime.Now;
wmsPurchaseOrderD.actual_quantity = 0;
wmsPurchaseOrderD.lineno = detail.lineno;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPurchaseOrderD.matcode_id = material.id;
wmsPurchaseOrderD.matspecification = material.material_specification;
}
wmsPurchaseOrderDs.Add(wmsPurchaseOrderD);
}
await db.Insertable(wmsPurchaseOrderDs).ExecuteCommandAsync();
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】成功生成单据:{Code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【PurchaseOrderInput】{ex.Message}");
LoggerErp2Mes.LogError($"【PurchaseOrderInput】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
/// <summary>
/// 委外订单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> OutsourceOrder(OutsourceOrderInput input)
{
LoggerErp2Mes.LogInformation($"【OutsourceOrderInput】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【OutsourceOrderInput】主表主键不能为空");
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【OutsourceOrderInput】子表主键不能为空");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
var wmsPurchaseOrdersDistinct = input.details.Select(r => new
{
material_id = r.material_code,
code_batch = r.code_batch,
}).Distinct();
if (wmsPurchaseOrdersDistinct.Count() < input.details.Count)
{
_LoggerErp2Mes.LogWarning($@"【OutsourceOrderInput】表体存在物料和批号重复的明细");
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
}
try
{
await db.Ado.BeginTranAsync();
WmsOutsourceOrderH wmsOutsourceOrderH = new WmsOutsourceOrderH();
string Code = await _billRuleService.GetBillNumber("WmsOutsourceOrder");
wmsOutsourceOrderH.outsource_order = Code;
wmsOutsourceOrderH.erp_bill_code = input.outsource_order;
wmsOutsourceOrderH.contact_person = input.contact_person;
wmsOutsourceOrderH.tel = input.tel;
wmsOutsourceOrderH.supplier_code = input.supplier_code;
wmsOutsourceOrderH.certificate_date = input.certificate_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
wmsOutsourceOrderH.ship_date = input.ship_date;
wmsOutsourceOrderH.erp_pk = input.erp_pk;
wmsOutsourceOrderH.create_id = WmsWareHouseConst.ErpUserId;
wmsOutsourceOrderH.create_time = DateTime.Now;
var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
if (supplier != null)
{
wmsOutsourceOrderH.supplier_id = supplier.id;
wmsOutsourceOrderH.supplier_name = supplier.supplier_name;
}
await db.Insertable(wmsOutsourceOrderH).ExecuteCommandAsync();
List<WmsOutsourceOrderD> wmsOutsourceOrderDs = new List<WmsOutsourceOrderD>();
foreach (var detail in input.details)
{
WmsOutsourceOrderD wmsOutsourceOrderD = new WmsOutsourceOrderD();
wmsOutsourceOrderD.fk_wms_outsource_order_id = wmsOutsourceOrderH.id;
wmsOutsourceOrderD.matcode = detail.material_code;
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsOutsourceOrderD.unit = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【OutsourceOrder】表体明细中单位{detail.unit_code}在wms系统中未找到");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到", 500);
}
wmsOutsourceOrderD.outsource_quantity = detail.outsource_quantity;
wmsOutsourceOrderD.stock_location = detail.stock_location;
wmsOutsourceOrderD.code_batch = detail.code_batch;
wmsOutsourceOrderD.delivery_date = detail.delivery_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
wmsOutsourceOrderD.erp_line_pk = detail.erp_line_pk;
wmsOutsourceOrderD.create_id = WmsWareHouseConst.ErpUserId;
wmsOutsourceOrderD.create_time = DateTime.Now;
wmsOutsourceOrderD.actual_quantity = 0;
wmsOutsourceOrderD.lineno = detail.lineno;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsOutsourceOrderD.matcode_id = material.id;
wmsOutsourceOrderD.matspecification = material.material_specification;
}
wmsOutsourceOrderDs.Add(wmsOutsourceOrderD);
}
await db.Insertable(wmsOutsourceOrderDs).ExecuteCommandAsync();
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【OutsourceOrderInput】成功生成单据:{Code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【OutsourceOrderInput】{ex.Message}");
LoggerErp2Mes.LogError($"【OutsourceOrderInput】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
/// <summary>
/// 转库单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> MaterialTransfer(MaterialTransferInput input)
{
LoggerErp2Mes.LogInformation($"【MaterialTransfer】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
BasWarehouse warehouse_outstock = await db.Queryable<BasWarehouse>().Where(r => r.whcode == input.warehouse_outstock).FirstAsync();
BasWarehouse warehouse_instock = await db.Queryable<BasWarehouse>().Where(r => r.whcode == input.warehouse_instock).FirstAsync();
if (warehouse_outstock == null)
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到出库仓库{input.warehouse_outstock}的档案记录!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到出库仓库{input.warehouse_outstock}的档案记录!");
}
if (warehouse_instock == null)
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到入库仓库{input.warehouse_instock}的档案记录!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到入库仓库{input.warehouse_instock}的档案记录!");
}
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】主表主键不能为空");
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】子表主键不能为空");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
string transfer_type = "";
// 中储仓到暂存仓
if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZCC_ID)
{
int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count();
if (count > 0)
{
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在未填写工位的明细");
throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500);
}
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CGCK_CODE;
}
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_CP_ID)
{
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBRK_CODE;
}
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_JZGL_ID)
{
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_JZGLRK_CODE;
}
// 暂时其他情况都算齐套出入库类型(未定)
else
{
int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count();
if (count > 0)
{
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在未填写工位的明细");
throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500);
}
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_QTCRK_CODE;
}
var wmsMaterialTransferdsDistinct = input.details.Select(r => new
{
material_id = r.material_code,
code_batch = r.code_batch,
}).Distinct();
if (wmsMaterialTransferdsDistinct.Count() < input.details.Count)
{
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在物料和批号重复的明细");
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
}
try
{
await db.Ado.BeginTranAsync();
WmsMaterialTransfer wmsMaterialTransfer = new WmsMaterialTransfer();
string Code = await _billRuleService.GetBillNumber("MaterialTransfer");
wmsMaterialTransfer.bill_code = Code;
wmsMaterialTransfer.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
wmsMaterialTransfer.bill_date = DateTime.Now;
wmsMaterialTransfer.warehouse_outstock = warehouse_outstock.id;
wmsMaterialTransfer.warehouse_instock = warehouse_instock.id;
wmsMaterialTransfer.biller_out = input.biller_out;
wmsMaterialTransfer.depart_out = input.depart_out;
wmsMaterialTransfer.biller_in = input.biller_in;
wmsMaterialTransfer.depart_in = input.depart_in;
wmsMaterialTransfer.deliver_date = input.deliver_date;
wmsMaterialTransfer.arrival_date = input.arrival_date;
wmsMaterialTransfer.create_id = WmsWareHouseConst.ErpUserId;
wmsMaterialTransfer.create_time = DateTime.Now;
wmsMaterialTransfer.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsMaterialTransfer.erp_bill_code = input.bill_code;
wmsMaterialTransfer.transfer_type = transfer_type;
wmsMaterialTransfer.erp_pk = input.erp_pk;
await db.Insertable(wmsMaterialTransfer).ExecuteCommandAsync();
List<WmsMaterialTransferD> wmsMaterialTransferDs = new List<WmsMaterialTransferD>();
foreach (var detail in input.details)
{
WmsMaterialTransferD wmsMaterialTransferD = new WmsMaterialTransferD();
wmsMaterialTransferD.lineno = detail.lineno;
wmsMaterialTransferD.material_code = detail.material_code;
wmsMaterialTransferD.code_batch = detail.code_batch;
wmsMaterialTransferD.station_code = detail.station_code;
wmsMaterialTransferD.qty = detail.qty;
wmsMaterialTransferD.bill_id = wmsMaterialTransfer.id;
wmsMaterialTransferD.yxfqty = 0;
wmsMaterialTransferD.yzqty = 0;
wmsMaterialTransferD.erp_line_pk = detail.erp_line_pk;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsMaterialTransferD.material_id = material.id;
wmsMaterialTransferD.material_specification = material.material_specification;
}
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsMaterialTransferD.unit_id = erpExtendField.Id;
wmsMaterialTransferD.unit_code = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体明细中单位{detail.unit_code}在wms系统中未找到");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到", 500);
}
wmsMaterialTransferDs.Add(wmsMaterialTransferD);
}
await db.Insertable(wmsMaterialTransferDs).ExecuteCommandAsync();
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【MaterialTransfer】{ex.Message}");
LoggerErp2Mes.LogError($"【MaterialTransfer】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
/// <summary>
/// 销售发货单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> SaleShipping(SaleShippingInput input)
{
LoggerErp2Mes.LogInformation($"【SaleShipping】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【SaleShipping】主表主键不能为空");
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【SaleShipping】子表主键不能为空");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
var wmsSaleShippingsDistinct = input.details.Select(r => new
{
material_id = r.material_code,
code_batch = r.code_batch,
}).Distinct();
if (wmsSaleShippingsDistinct.Count() < input.details.Count)
{
_LoggerErp2Mes.LogWarning($@"【SaleShipping】表体存在物料和批号重复的明细");
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
}
BasWarehouse warehouse_outstock = await db.Queryable<BasWarehouse>().Where(r => r.whcode == input.warehouse_code).FirstAsync();
if (warehouse_outstock == null)
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到出库仓库{input.warehouse_code}的档案记录!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到出库仓库{input.warehouse_code}的档案记录!");
}
try
{
await db.Ado.BeginTranAsync();
WmsSaleH wmsSaleH = new WmsSaleH();
string Code = await _billRuleService.GetBillNumber("WmsSale");
wmsSaleH.bill_code = Code;
wmsSaleH.erp_bill_code = input.bill_code;
wmsSaleH.bill_type = "25103439022357";//销售出库单
wmsSaleH.audit_status = 0;
wmsSaleH.generate_type = "1";
wmsSaleH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
wmsSaleH.warehouse_id = warehouse_outstock.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;
}
wmsSaleH.ship_date = input.ship_date.Value;
wmsSaleH.erp_pk = input.erp_pk;
wmsSaleH.create_id = WmsWareHouseConst.ErpUserId;
wmsSaleH.create_time = DateTime.Now;
await db.Insertable(wmsSaleH).ExecuteCommandAsync();
List<WmsSaleD> wmsSaleDs = new List<WmsSaleD>();
foreach (var detail in input.details)
{
WmsSaleD wmsSaleD = new WmsSaleD();
wmsSaleD.bill_id = wmsSaleH.id;
wmsSaleD.material_code = detail.material_code;
wmsSaleD.purchase_qty = detail.sale_qty.Value;
wmsSaleD.code_batch = detail.code_batch;
wmsSaleD.erp_line_pk = detail.erp_line_pk;
wmsSaleD.create_id = WmsWareHouseConst.ErpUserId;
wmsSaleD.create_time = DateTime.Now;
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsSaleD.unit_id = erpExtendField.Id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体明细中单位{detail.unit_code}在wms系统中未找到");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到", 500);
}
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.material_specification = material.material_specification;
}
wmsSaleDs.Add(wmsSaleD);
}
await db.Insertable(wmsSaleDs).ExecuteCommandAsync();
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【SaleShipping】成功生成单据:{Code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【SaleShipping】{ex.Message}");
LoggerErp2Mes.LogError($"【SaleShipping】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
/// <summary>
/// 调拨出库单同步
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> TransferOutstock(TransferOutstockInput input)
{
LoggerErp2Mes.LogInformation($"【TransferOutstock】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【TransferOutstock】主表主键不能为空");
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
}
BasWarehouse warehouse_instock = await db.Queryable<BasWarehouse>().Where(r => r.whcode == input.warehouse_instock).FirstAsync();
if (warehouse_instock == null)
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到入库仓库{input.warehouse_instock}的档案记录!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到入库仓库{input.warehouse_instock}的档案记录!");
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】子表主键不能为空");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
var wmsPurchaseOrdersDistinct = input.details.Select(r => new
{
material_id = r.material_code,
code_batch = r.code_batch,
}).Distinct();
if (wmsPurchaseOrdersDistinct.Count() < input.details.Count)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体存在物料和批号重复的明细");
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
}
try
{
await db.Ado.BeginTranAsync();
string Code = "";
switch (warehouse_instock.id)
{
case WmsWareHouseConst.WAREHOUSE_YCL_ID:
{
WmsRawmatTransferinstockH wmsRawmatTransferinstockH = new WmsRawmatTransferinstockH();
Code = await _billRuleService.GetBillNumber("WmsRawMatTransferInstock");
wmsRawmatTransferinstockH.bill_code = Code;
wmsRawmatTransferinstockH.erp_bill_code = input.transfer_order;
wmsRawmatTransferinstockH.contact_person = input.contact_person;
wmsRawmatTransferinstockH.tel = input.tel;
wmsRawmatTransferinstockH.outstockorg_code = input.outstockorg_code;
wmsRawmatTransferinstockH.erp_pk = input.erp_pk;
wmsRawmatTransferinstockH.create_id = WmsWareHouseConst.ErpUserId;
wmsRawmatTransferinstockH.create_time = DateTime.Now;
wmsRawmatTransferinstockH.dept_code = input.dept_code;
wmsRawmatTransferinstockH.biller = input.biller;
wmsRawmatTransferinstockH.erp_wh_type = input.erp_wh_type;
await db.Insertable(wmsRawmatTransferinstockH).ExecuteCommandAsync();
List<WmsRawmatTransferinstockD> wmsRawmatTransferinstockDs = new List<WmsRawmatTransferinstockD>();
foreach (var detail in input.details)
{
WmsRawmatTransferinstockD msRawmatTransferinstockD = new WmsRawmatTransferinstockD();
msRawmatTransferinstockD.bill_id = wmsRawmatTransferinstockH.id;
msRawmatTransferinstockD.matcode = detail.material_code;
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
msRawmatTransferinstockD.unit = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中单位{detail.unit_code}在wms系统中未找到");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到", 500);
}
msRawmatTransferinstockD.qty = detail.qty;
msRawmatTransferinstockD.stock_location = detail.stock_location;
msRawmatTransferinstockD.code_batch = detail.code_batch;
msRawmatTransferinstockD.delivery_date = detail.delivery_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
msRawmatTransferinstockD.erp_line_pk = detail.erp_line_pk;
msRawmatTransferinstockD.create_id = WmsWareHouseConst.ErpUserId;
msRawmatTransferinstockD.create_time = DateTime.Now;
msRawmatTransferinstockD.actual_qty = 0;
msRawmatTransferinstockD.lineno = detail.lineno;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
msRawmatTransferinstockD.matcode_id = material.id;
msRawmatTransferinstockD.matspecification = material.material_specification;
}
wmsRawmatTransferinstockDs.Add(msRawmatTransferinstockD);
}
await db.Insertable(wmsRawmatTransferinstockDs).ExecuteCommandAsync();
break;
}
}
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【TransferOutstock】成功生成单据:{Code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【TransferOutstock】{ex.Message}");
LoggerErp2Mes.LogError($"【TransferOutstock】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
/// <summary>
/// 调拨订单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> TransferOrder(TransferOrderInput input)
{
LoggerErp2Mes.LogInformation($"【TransferOrder】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【TransferOrder】主表主键不能为空");
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】子表主键不能为空");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
var wmsTransferOrdersDistinct = input.details.Select(r => new
{
material_id = r.material_code,
code_batch = r.code_batch,
}).Distinct();
if (wmsTransferOrdersDistinct.Count() < input.details.Count)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体存在物料和批号重复的明细");
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
}
WmsErpWarehouserelaH wmsErpWarehouserelaH = await db.Queryable<WmsErpWarehouserelaH>().Where(r => r.erp_warehousecode == input.erp_wh_type).FirstAsync();
if (wmsErpWarehouserelaH == null)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.erp_wh_type}对应wms系统的映射关系");
throw new AppFriendlyException($@"不存在erp仓库类型{input.erp_wh_type}对应wms系统的映射关系", 500);
}
string warehouse_outstock_code = wmsErpWarehouserelaH.wms_warehousecode;
BasWarehouse warehouse_outstock = await db.Queryable<BasWarehouse>().Where(r => r.whcode == warehouse_outstock_code).FirstAsync();
if (warehouse_outstock == null)
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到出库仓库{warehouse_outstock_code}的档案记录!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到出库仓库{warehouse_outstock_code}的档案记录!");
}
try
{
await db.Ado.BeginTranAsync();
WmsTransferOrderH wmsTransferOrderH = new WmsTransferOrderH();
string Code = await _billRuleService.GetBillNumber("WmsTransferOrder");
wmsTransferOrderH.bill_code = Code;
wmsTransferOrderH.erp_bill_code = input.transfer_order;
wmsTransferOrderH.biller = input.biller;
wmsTransferOrderH.dept_code = input.dept_code;
wmsTransferOrderH.erp_pk = input.erp_pk;
wmsTransferOrderH.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferOrderH.create_time = DateTime.Now;
wmsTransferOrderH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsTransferOrderH.erp_wh_type = input.erp_wh_type;
var _erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id)
.Where((a, b) => a.transaction_type_id == input.transaction_type).Select((a, b) => b).FirstAsync();
if (_erpExtendField != null)
{
wmsTransferOrderH.transaction_type = _erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表头交易类型{input.transaction_type}在wms系统中未找到");
throw new AppFriendlyException($@"表头交易类型{input.transaction_type}在wms系统中未找到", 500);
}
await db.Insertable(wmsTransferOrderH).ExecuteCommandAsync();
List<WmsTransferOrderD> wmsTransferOrderDs = new List<WmsTransferOrderD>();
foreach (var detail in input.details)
{
WmsTransferOrderD wmsTransferOrderD = new WmsTransferOrderD();
wmsTransferOrderD.bill_id = wmsTransferOrderD.id;
wmsTransferOrderD.unit = detail.unit_code;
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsTransferOrderD.unit = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到", 500);
}
wmsTransferOrderD.qty = detail.qty;
wmsTransferOrderD.batchno = detail.code_batch;
wmsTransferOrderD.erp_line_pk = detail.erp_line_pk;
wmsTransferOrderD.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferOrderD.create_time = DateTime.Now;
wmsTransferOrderD.lineno = detail.lineno;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsTransferOrderD.material_id = material.id;
wmsTransferOrderD.material_code = material.code;
wmsTransferOrderD.material_name = material.name;
wmsTransferOrderD.material_specification = material.material_specification;
}
wmsTransferOrderDs.Add(wmsTransferOrderD);
}
await db.Insertable(wmsTransferOrderDs).ExecuteCommandAsync();
if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID)
{
WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = new WmsRawmatTransferoutstockH();
string code = await _billRuleService.GetBillNumber("RawmatTransferoutstock");
wmsRawmatTransferoutstockH.bill_code = code;
wmsRawmatTransferoutstockH.create_id = WmsWareHouseConst.ErpUserId;
wmsRawmatTransferoutstockH.create_time = DateTime.Now;
wmsRawmatTransferoutstockH.biller = input.biller;
wmsRawmatTransferoutstockH.dept_code = input.dept_code;
wmsRawmatTransferoutstockH.warehouse_code = warehouse_outstock.whcode;
wmsRawmatTransferoutstockH.erp_pk = input.erp_pk;
wmsRawmatTransferoutstockH.transfer_order_id = wmsTransferOrderH.bill_code;
wmsRawmatTransferoutstockH.issuance_status = "0";
wmsRawmatTransferoutstockH.transaction_type = _erpExtendField.EnCode;
wmsRawmatTransferoutstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsRawmatTransferoutstockH.erp_wh_type = input.erp_wh_type;
List<WmsRawmatTransferoutstockD> wmsRawmatTransferoutstockDs = new List <WmsRawmatTransferoutstockD>();
foreach (var detail in input.details)
{
WmsRawmatTransferoutstockD wmsRawmatTransferoutstockD = new WmsRawmatTransferoutstockD();
wmsRawmatTransferoutstockD.bill_id = wmsRawmatTransferoutstockH.id;
wmsRawmatTransferoutstockD.unit = detail.unit_code;
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsRawmatTransferoutstockD.unit = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到", 500);
}
wmsRawmatTransferoutstockD.qty = detail.qty;
wmsRawmatTransferoutstockD.code_batch = detail.code_batch;
wmsRawmatTransferoutstockD.erp_line_pk = detail.erp_line_pk;
wmsRawmatTransferoutstockD.create_id = WmsWareHouseConst.ErpUserId;
wmsRawmatTransferoutstockD.create_time = DateTime.Now;
wmsRawmatTransferoutstockD.lineno = detail.lineno;
wmsRawmatTransferoutstockD.actual_qty = 0;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsRawmatTransferoutstockD.matcode_id = material.id;
wmsRawmatTransferoutstockD.matcode = material.code;
wmsRawmatTransferoutstockD.matspecification = material.material_specification;
}
wmsRawmatTransferoutstockDs.Add(wmsRawmatTransferoutstockD);
}
await db.Insertable(wmsRawmatTransferoutstockH).ExecuteCommandAsync();
await db.Insertable(wmsRawmatTransferoutstockDs).ExecuteCommandAsync();
}
else if(warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_CP_ID)
{
WmsTransferOutstockH wmsTransferOutstockH = new WmsTransferOutstockH();
string code = await _billRuleService.GetBillNumber("WmsTransferOutstock");
wmsTransferOutstockH.bill_code = code;
wmsTransferOutstockH.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferOutstockH.create_time = DateTime.Now;
wmsTransferOutstockH.warehouse_code = warehouse_outstock.whcode;
wmsTransferOutstockH.erp_pk = input.erp_pk;
wmsTransferOutstockH.transfer_order_id = wmsTransferOrderH.bill_code;
wmsTransferOutstockH.issuance_status = "0";
wmsTransferOutstockH.transaction_type = _erpExtendField.EnCode;
wmsTransferOutstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsTransferOutstockH.erp_wh_type = input.erp_wh_type;
List<WmsTransferOutstockD> wmsTransferOutstockDs = new List<WmsTransferOutstockD>();
foreach (var detail in input.details)
{
WmsTransferOutstockD wmsTransferOutstockD = new WmsTransferOutstockD();
wmsTransferOutstockD.bill_id = wmsTransferOutstockH.id;
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsTransferOutstockD.unit_id = erpExtendField.Id;
wmsTransferOutstockD.unit_code = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到", 500);
}
wmsTransferOutstockD.pr_qty = detail.qty;
wmsTransferOutstockD.xf_qty = 0;
wmsTransferOutstockD.qty = 0;
wmsTransferOutstockD.pi_code = detail.code_batch;
wmsTransferOutstockD.erp_line_pk = detail.erp_line_pk;
wmsTransferOutstockD.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferOutstockD.create_time = DateTime.Now;
wmsTransferOutstockD.lineno = detail.lineno;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsTransferOutstockD.material_id = material.id;
wmsTransferOutstockD.material_code = material.code;
wmsTransferOutstockD.material_desc = material.material_specification;
}
wmsTransferOutstockDs.Add(wmsTransferOutstockD);
}
await db.Insertable(wmsTransferOutstockH).ExecuteCommandAsync();
await db.Insertable(wmsTransferOutstockDs).ExecuteCommandAsync();
}
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【TransferOrder】成功生成单据:{Code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【TransferOrder】{ex.Message}");
LoggerErp2Mes.LogError($"【TransferOrder】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
protected Task<Entities.Dto.Outputs.Result> ToApiResult(HttpStatusCode statusCode, string msg)
{
Entities.Dto.Outputs.Result result = new()
{
code = statusCode,
msg = msg
};
return Task.FromResult(result);
}
private static readonly Dictionary<LogLevel, string> s_logLevelMap = new()
{
[LogLevel.Debug] = "DBG",
[LogLevel.Information] = "INF",
[LogLevel.Warning] = "WRN",
[LogLevel.Error] = "ERR",
};
protected string _LoggerErp2MesFileName = "";
protected ILogger _LoggerErp2Mes;
protected ILogger LoggerErp2Mes
{
get
{
string newFileName = $"{AppContext.BaseDirectory}/logs/Erp2Mes{DateTime.Now:yyyyMMdd}.log";
if (_LoggerErp2MesFileName != newFileName)
{
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
{
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
cfgOpts.MessageFormat = (logMsg) =>
{
var logLevel = s_logLevelMap[logMsg.LogLevel];
var sb = new StringBuilder();
_ = sb.Append($"[{logLevel}] ");
_ = sb.Append($"{logMsg.LogName} ");
_ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
_ = sb.Append($"#{logMsg.EventId.Id} ");
_ = sb.Append(logMsg.Message + " ");
_ = sb.Append(logMsg.Exception?.ToString());
return sb.ToString();
};
}));
_LoggerErp2Mes = loggerFactory.CreateLogger(this.GetType());
_LoggerErp2MesFileName = newFileName;
}
return _LoggerErp2Mes;
}
}
}
}