using System.Text;
using Aop.Api.Domain;
using JNPF.Common.Enums;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.Systems.Entitys.Permission;
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
{
///
/// erp接口模块
///
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 800)]
public class ErpToWmsService : IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository _repository;
private readonly IBillRullService _billRuleService;
public ErpToWmsService(ISqlSugarRepository repository, IBillRullService billRuleService)
{
_repository = repository;
_billRuleService = billRuleService;
}
///
/// 采购到货单
///
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().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().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
if (supplier != null)
{
wmsPurchaseH.supplier_id = supplier.id;
wmsPurchaseH.supplier_name = supplier.supplier_name;
}
List WmsPurchaseDs = new List();
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().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();
}
///
/// 采购退货单
///
public async Task PurchaseReturn(ErpPurchaseReturnInput 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().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().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
if (supplier != null)
{
wmsPurchaseH.supplier_id = supplier.id;
wmsPurchaseH.supplier_name = supplier.supplier_name;
}
List WmsPurchaseDs = new List();
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().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();
}
///
/// 仓库调拨
///
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().Where(p => p.whcode == input.warehouse).FirstAsync();
if (warehouse != null)
wmsAllot.warehouse_id = warehouse.id;
var startloc = await db.Queryable().Where(p => p.location_code == input.startlocation).FirstAsync();
if (startloc != null)
wmsAllot.startlocation_id = startloc.id;
var endloc = await db.Queryable().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();
}
///
/// 销售出库单
///
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().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().Where(p => p.customer_code == input.customer_code).FirstAsync();
if (customer != null)
{
WmsSaleH.customer_id = customer.id;
WmsSaleH.customer_name = customer.customer_name;
}
List WmsSaleDs = new List();
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().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();
}
///
/// 销售退货单
///
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().Where(p => p.location_code == input.location).FirstAsync();
if (location != null)
WmsInstockH.location_id = location.id;
var warehouse = await db.Queryable().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().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
if (supplier != null)
{
WmsInstockH.supplier_id = supplier.id;
WmsInstockH.supplier_name = supplier.supplier_name;
}
List WmsInstockDs = new List();
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().Where(p => p.whcode == input.warehouse).FirstAsync();
if (detailwarehouse != null)
WmsInstockD.warehouse_id = detailwarehouse.id;
var material = await db.Queryable().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();
}
///
/// 采购订单
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task PurchaseOrder(PurchaseOrderInput input)
{
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
try
{
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【PurchaseOrderInput】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
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);
//}
List details = input.details.Where(r => r.purchase_quantity > 0).ToList();
List details_return = input.details.Where(r => r.purchase_quantity < 0).ToList();
// purchase_quantity 是负数作为采购退料
await db.Ado.BeginTranAsync();
// 判断是否为重复传输的采购订单
WmsPurchaseOrderH wmsPurchaseOrderRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
if (wmsPurchaseOrderRep != null)
{
// 判断收货单是否已经生成
WmsPurchaseH wmsPurchaseH = await db.Queryable().Where(r => r.source_id == wmsPurchaseOrderRep.id).FirstAsync();
if (wmsPurchaseH != null)
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderInput】wms已创建收货单{wmsPurchaseH.bill_code}!");
throw new AppFriendlyException($@"wms已创建收货单{wmsPurchaseH.bill_code}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsPurchaseOrderRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.fk_wms_purchase_order_id == wmsPurchaseOrderRep.id).ExecuteCommandAsync();
}
}
// 判断是否为重复传输的采购退料订单
WmsPurchaseReturnH wmsPurchaseReturnRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
if (wmsPurchaseReturnRep != null)
{
// 判断采购退货是否已经下发
List wmsPurchaseReturnDReps = await db.Queryable().Where(r => r.bill_id == wmsPurchaseReturnRep.id).ToListAsync();
if (wmsPurchaseReturnDReps.Where(r => r.actual_qty > 0).Count() > 0)
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderInput】wms采购退货单{wmsPurchaseReturnRep.bill_code}已下发,不能退回!");
throw new AppFriendlyException($@"wms采购退货单{wmsPurchaseReturnRep.bill_code}已下发,不能退回!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsPurchaseReturnRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsPurchaseReturnRep.id).ExecuteCommandAsync();
}
}
if (details.Count > 0)
{
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;
var supplier = await db.Queryable().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 wmsPurchaseOrderDs = new List();
foreach (var detail in 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().InnerJoin((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_id = erpExtendField.Id;
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;
wmsPurchaseOrderD.gift = detail.gift;
wmsPurchaseOrderD.production_unit = detail.production_unit;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPurchaseOrderD.matcode_id = material.id;
wmsPurchaseOrderD.material_specification = material.material_specification;
wmsPurchaseOrderD.material_standard = material.material_standard;
}
var gys_erpExtendField = await db.Queryable().Where(a => a.supplier_id == detail.auxprop_gys).FirstAsync();
if (gys_erpExtendField != null)
{
wmsPurchaseOrderD.auxprop_gys = gys_erpExtendField.table_id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrder】表体明细中组织{detail.auxprop_gys}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中组织{detail.auxprop_gys}在wms系统中未找到!", 500);
}
wmsPurchaseOrderDs.Add(wmsPurchaseOrderD);
}
await db.Insertable(wmsPurchaseOrderDs).ExecuteCommandAsync();
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】成功生成单据:{Code}");
}
if (details_return.Count > 0)
{
WmsPurchaseReturnH wmsPurchaseReturnH = new WmsPurchaseReturnH();
string Code = await _billRuleService.GetBillNumber("WmsPurchaseReturn");
wmsPurchaseReturnH.purchase_order = Code;
wmsPurchaseReturnH.erp_bill_code = input.purchase_order;
wmsPurchaseReturnH.contact_person = input.contact_person;
wmsPurchaseReturnH.tel = input.tel;
//wmsPurchaseReturnH.supplier_code = input.supplier_code;
//wmsPurchaseReturnH.certificate_date = input.certificate_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
//wmsPurchaseReturnH.ship_date = input.ship_date;
wmsPurchaseReturnH.erp_pk = input.erp_pk;
wmsPurchaseReturnH.create_id = WmsWareHouseConst.ErpUserId;
wmsPurchaseReturnH.create_time = DateTime.Now;
//var supplier = await db.Queryable().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
//if (supplier != null)
//{
// wmsPurchaseReturnH.supplier_id = supplier.id;
// wmsPurchaseReturnH.supplier_name = supplier.supplier_name;
//}
await db.Insertable(wmsPurchaseReturnH).ExecuteCommandAsync();
List wmsPurchaseReturnDs = new List();
foreach (var detail in details_return)
{
WmsPurchaseReturnD wmsPurchaseReturnD = new WmsPurchaseReturnD();
wmsPurchaseReturnD.bill_id = wmsPurchaseReturnH.id;
wmsPurchaseReturnD.matcode = detail.material_code;
wmsPurchaseReturnD.unit = detail.unit_code;
var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsPurchaseReturnD.unit = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
}
wmsPurchaseReturnD.qty = -detail.purchase_quantity;
wmsPurchaseReturnD.code_batch = detail.code_batch;
wmsPurchaseReturnD.erp_line_pk = detail.erp_line_pk;
wmsPurchaseReturnD.create_id = WmsWareHouseConst.ErpUserId;
wmsPurchaseReturnD.create_time = DateTime.Now;
wmsPurchaseReturnD.actual_qty = 0;
wmsPurchaseReturnD.lineno = detail.lineno;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPurchaseReturnD.matcode_id = material.id;
wmsPurchaseReturnD.matspecification = material.material_specification;
}
wmsPurchaseReturnDs.Add(wmsPurchaseReturnD);
}
await db.Insertable(wmsPurchaseReturnDs).ExecuteCommandAsync();
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】成功生成单据:{Code}");
}
await db.Ado.CommitTranAsync();
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
{
}
}
///
/// 删除采购订单
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task DelPurchaseOrder(PurchaseOrderDeleteInput input)
{
LoggerErp2Mes.LogInformation($"【PurchaseOrderDeleteInput】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
try
{
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【PurchaseOrderDeleteInput】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
await db.Ado.BeginTranAsync();
// 判断采购订单是否存在
WmsPurchaseOrderH wmsPurchaseOrderRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
if (wmsPurchaseOrderRep != null)
{
// 判断收货单是否已经生成
WmsPurchaseH wmsPurchaseH = await db.Queryable().Where(r => r.source_id == wmsPurchaseOrderRep.id).FirstAsync();
if (wmsPurchaseH != null)
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderDeleteInput】wms已创建收货单{wmsPurchaseH.bill_code}!");
throw new AppFriendlyException($@"wms已创建收货单{wmsPurchaseH.bill_code}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsPurchaseOrderRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.fk_wms_purchase_order_id == wmsPurchaseOrderRep.id).ExecuteCommandAsync();
}
}
await db.Ado.CommitTranAsync();
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【PurchaseOrderDeleteInput】{ex.Message}");
LoggerErp2Mes.LogError($"【PurchaseOrderDeleteInput】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
///
/// 修改采购订单
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task ModifyPurchaseOrder(PurchaseOrderUpdateInput input)
{
LoggerErp2Mes.LogInformation($"【PurchaseOrderUpdateInput】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
try
{
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【PurchaseOrderUpdateInput】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
await db.Ado.BeginTranAsync();
// 判断采购订单是否存在
WmsPurchaseOrderH wmsPurchaseOrderH = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
if(wmsPurchaseOrderH == null)
{
_LoggerErp2Mes.LogWarning($"【PurchaseOrderUpdateInput】未找到采购订单,erp_pk:{input.erp_pk}");
throw new AppFriendlyException($@"未找到采购订单,erp_pk:{input.erp_pk}!", 500);
}
//先删除所有的子表数据
await db.Deleteable().Where(r => r.fk_wms_purchase_order_id == wmsPurchaseOrderH.id).ExecuteCommandAsync();
if(input.details!=null && input.details.Count > 0)
{
List wmsPurchaseOrderDs = new List();
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().InnerJoin((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_id = erpExtendField.Id;
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;
wmsPurchaseOrderD.gift = detail.gift;
wmsPurchaseOrderD.production_unit = detail.production_unit;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPurchaseOrderD.matcode_id = material.id;
wmsPurchaseOrderD.material_specification = material.material_specification;
wmsPurchaseOrderD.material_standard = material.material_standard;
}
var gys_erpExtendField = await db.Queryable().Where(a => a.supplier_id == detail.auxprop_gys).FirstAsync();
if (gys_erpExtendField != null)
{
wmsPurchaseOrderD.auxprop_gys = gys_erpExtendField.table_id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrder】表体明细中组织{detail.auxprop_gys}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中组织{detail.auxprop_gys}在wms系统中未找到!", 500);
}
wmsPurchaseOrderDs.Add(wmsPurchaseOrderD);
}
await db.Insertable(wmsPurchaseOrderDs).ExecuteCommandAsync();
}
////查出现有的所有子表数据
//var nowWmsPurchaseOrderDs = await db.Queryable().Where(r => r.fk_wms_purchase_order_id == wmsPurchaseOrderH.id).ToListAsync();
//if(input.details!=null && input.details.Count > 0)
//{
// foreach(var item in input.details)
// {
// WmsPurchaseOrderD wmsPurchaseOrderD = await db.Queryable().Where(r => r.fk_wms_purchase_order_id == wmsPurchaseOrderH.id && r.erp_line_pk == item.erp_line_pk).FirstAsync();
// if(wmsPurchaseOrderD==null)
// {
// _LoggerErp2Mes.LogWarning($"【PurchaseOrderUpdateInput】未找到采购订单明细数据,erp_pk:{input.erp_pk},erp_line_pk:{item.erp_line_pk}");
// throw new AppFriendlyException($@"未找到采购订单明细数据,erp_pk:{input.erp_pk},erp_line_pk{item.erp_line_pk}!", 500);
// }
// else
// {
// await db.Updateable()
// .SetColumns(r => r.net_price == item.net_price)
// .SetColumns(r => r.purchase_quantity == item.purchase_quantity)
// .SetColumns(r => r.actual_quantity == item.actual_quantity)
// .Where(r => r.id == wmsPurchaseOrderD.id).ExecuteCommandAsync();
// }
// }
//}
await db.Ado.CommitTranAsync();
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【PurchaseOrderUpdateInput】{ex.Message}");
LoggerErp2Mes.LogError($"【PurchaseOrderUpdateInput】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
///
/// 委外订单
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task OutsourceOrder(OutsourceOrderInput input)
{
LoggerErp2Mes.LogInformation($"【OutsourceOrderInput】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
try
{
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【OutsourceOrderInput】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
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);
//}
await db.Ado.BeginTranAsync();
// 判断是否为重复传输
WmsOutsourceOrderH wmsOutsourceOrderHRep = await db.Queryable().Where(r => r.erp_bill_code == input.outsource_order).FirstAsync();
if (wmsOutsourceOrderHRep != null)
{
// 判断是否已经下发
WmsOutsourceH wmsOutsourceH = await db.Queryable().Where(r => r.outsource_order == wmsOutsourceOrderHRep.outsource_order).FirstAsync();
if (wmsOutsourceH != null)
{
_LoggerErp2Mes.LogWarning($@"【OutsourceOrder】wms已创建收货单{wmsOutsourceH.outsource_order}!");
throw new AppFriendlyException($@"wms已创建收货单{wmsOutsourceH.outsource_order}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsOutsourceOrderHRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.fk_wms_outsource_order_id == wmsOutsourceOrderHRep.id).ExecuteCommandAsync();
}
}
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().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 wmsOutsourceOrderDs = new List();
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().InnerJoin((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_id = erpExtendField.Id;
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().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsOutsourceOrderD.matcode_id = material.id;
wmsOutsourceOrderD.matspecification = material.material_specification;
}
var gys_erpExtendField = await db.Queryable().Where(a => a.supplier_id == detail.auxprop_gys).FirstAsync();
if (gys_erpExtendField != null)
{
wmsOutsourceOrderD.auxprop_gys = gys_erpExtendField.table_id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【OutsourceOrder】表体明细中组织{detail.auxprop_gys}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中组织{detail.auxprop_gys}在wms系统中未找到!", 500);
}
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
{
}
}
///
/// 转库单
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task MaterialTransfer(MaterialTransferInput input)
{
LoggerErp2Mes.LogInformation($"【MaterialTransfer】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
try
{
WmsErpWarehouserelaH wmsErpWarehouserelaHout = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_outstock).FirstAsync();
if (wmsErpWarehouserelaHout == null)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!");
throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!", 500);
}
WmsErpWarehouserelaH wmsErpWarehouserelaHin = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_instock).FirstAsync();
if (wmsErpWarehouserelaHin == null)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!");
throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!", 500);
}
string warehouse_outstock_code = wmsErpWarehouserelaHout.wms_warehousecode;
string warehouse_instock_code = wmsErpWarehouserelaHin.wms_warehousecode;
BasWarehouse warehouse_outstock = await db.Queryable().Where(r => r.whcode == warehouse_outstock_code).FirstAsync();
BasWarehouse warehouse_instock = await db.Queryable().Where(r => r.whcode == warehouse_instock_code).FirstAsync();
if (warehouse_outstock == null)
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到出库仓库{input.warehouse_outstock}的档案记录!");
throw new AppFriendlyException($"无法查询到出库仓库{input.warehouse_outstock}的档案记录!", 500);
}
if (warehouse_instock == null)
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到入库仓库{input.warehouse_instock}的档案记录!");
throw new AppFriendlyException($"无法查询到入库仓库{input.warehouse_instock}的档案记录!", 500);
}
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
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 = "";
#region 转库类型
// 齐套出入库
if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID
&& (warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZCC_ID || warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_HCC_ID || warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_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_QTCRK_CODE;
}
// 外协调拨入库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZC_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 if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CROSSLAYER_CODE;
// 包材出库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_BCK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_F2BCQ_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_PACKING_CODE;
// 长管出库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_HCC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CGCK_CODE;
// 外协调拨出库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBOUTWAREHOUSE_CODE;
// 灭菌入库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_MJC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_CP_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_SterilizationInstock_CODE;
#endregion
//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);
//}
await db.Ado.BeginTranAsync();
// 判断是否重复传输
WmsMaterialTransfer wmsMaterialTransferRep = await db.Queryable().Where(r => r.erp_bill_code == input.bill_code).FirstAsync();
if (wmsMaterialTransferRep != null)
{
// 判断单据是否已经下发
List _wmsMaterialTransferDs = await db.Queryable().Where(r => r.bill_id == wmsMaterialTransferRep.id).ToListAsync();
bool isxf = _wmsMaterialTransferDs.Where(r => r.yxfqty > 0).Any();
if (isxf)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用转库单{input.bill_code}!");
throw new AppFriendlyException($@"wms已下发使用转库单{input.bill_code}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsMaterialTransferRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsMaterialTransferRep.id).ExecuteCommandAsync();
}
}
List details = input.details.Where(r => r.qty > 0).ToList();
List details_return = input.details.Where(r => r.qty < 0).ToList();
if (details.Count > 0)
{
WmsMaterialTransfer wmsMaterialTransfer = new WmsMaterialTransfer();
string Code = await _billRuleService.GetBillNumber("MaterialTransfer");
wmsMaterialTransfer.bill_code = Code;
wmsMaterialTransfer.status = input.transfer_type == "0001H11000000000D32H" ? WmsWareHouseConst.BILLSTATUS_COMPLETE_ID : 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.type = transfer_type;
wmsMaterialTransfer.erp_pk = input.erp_pk;
await db.Insertable(wmsMaterialTransfer).ExecuteCommandAsync();
List wmsMaterialTransferDs = new List();
foreach (var detail in 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.yxfqty_rk = 0;
wmsMaterialTransferD.yzqty_rk = 0;
wmsMaterialTransferD.erp_line_pk = detail.erp_line_pk;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsMaterialTransferD.material_id = material.id;
wmsMaterialTransferD.material_ex = material.name;
wmsMaterialTransferD.material_specification = material.material_specification;
}
var erpExtendField = await db.Queryable().InnerJoin((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();
LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}");
}
if (details_return.Count > 0)
{
WmsPrdReturnH wmsPrdReturnH = new WmsPrdReturnH();
string Code = await _billRuleService.GetBillNumber("WMSPRDRETURN");
wmsPrdReturnH.bill_code = Code;
wmsPrdReturnH.status = input.transfer_type == "0001H11000000000D32H" ? WmsWareHouseConst.BILLSTATUS_COMPLETE_ID : WmsWareHouseConst.BILLSTATUS_ADD_ID;//转库单类型是人工线的,直接是完成状态
wmsPrdReturnH.warehouse_id = warehouse_instock.id;
wmsPrdReturnH.create_id = WmsWareHouseConst.ErpUserId;
wmsPrdReturnH.create_time = DateTime.Now;
wmsPrdReturnH.erp_bill_code = input.bill_code;
wmsPrdReturnH.transfer_type = transfer_type;
wmsPrdReturnH.erp_pk = input.erp_pk;
await db.Insertable(wmsPrdReturnH).ExecuteCommandAsync();
List wmsPrdReturnDs = new List();
foreach (var detail in details_return)
{
WmsPrdReturnD wmsPrdReturnD = new WmsPrdReturnD();
wmsPrdReturnD.lineno = detail.lineno;
wmsPrdReturnD.material_code = detail.material_code;
wmsPrdReturnD.code_batch = detail.code_batch;
wmsPrdReturnD.qty = -detail.qty;
wmsPrdReturnD.bill_id = wmsPrdReturnH.id;
wmsPrdReturnD.ytqty = 0;
wmsPrdReturnD.erp_line_pk = detail.erp_line_pk;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPrdReturnD.material_id = material.id;
wmsPrdReturnD.material_code = material.code;
wmsPrdReturnD.material_name = material.name;
}
var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsPrdReturnD.unit_id = erpExtendField.Id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体明细中单位{detail.unit_code}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
}
wmsPrdReturnDs.Add(wmsPrdReturnD);
}
await db.Insertable(wmsPrdReturnDs).ExecuteCommandAsync();
LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}");
}
await db.Ado.CommitTranAsync();
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
{
}
}
///
/// 转库单
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task MaterialTransferBatch(List inputs)
{
LoggerErp2Mes.LogInformation($"【MaterialTransfer】ERP传入数据:{JsonConvert.SerializeObject(inputs)}");
var db = _repository.AsSugarClient();
List error_erpbillcodes = new List();
foreach (MaterialTransferInput input in inputs)
{
try
{
WmsErpWarehouserelaH wmsErpWarehouserelaHout = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_outstock).FirstAsync();
if (wmsErpWarehouserelaHout == null)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!");
throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!", 500);
}
WmsErpWarehouserelaH wmsErpWarehouserelaHin = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_instock).FirstAsync();
if (wmsErpWarehouserelaHin == null)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!");
throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!", 500);
}
string warehouse_outstock_code = wmsErpWarehouserelaHout.wms_warehousecode;
string warehouse_instock_code = wmsErpWarehouserelaHin.wms_warehousecode;
BasWarehouse warehouse_outstock = await db.Queryable().Where(r => r.whcode == warehouse_outstock_code).FirstAsync();
BasWarehouse warehouse_instock = await db.Queryable().Where(r => r.whcode == warehouse_instock_code).FirstAsync();
if (warehouse_outstock == null)
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到出库仓库{input.warehouse_outstock}的档案记录!");
throw new AppFriendlyException($"无法查询到出库仓库{input.warehouse_outstock}的档案记录!", 500);
}
if (warehouse_instock == null)
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到入库仓库{input.warehouse_instock}的档案记录!");
throw new AppFriendlyException($"无法查询到入库仓库{input.warehouse_instock}的档案记录!", 500);
}
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
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 = "";
#region 转库类型
// 齐套出入库
if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID
&& (warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZCC_ID || warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_HCC_ID || warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_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_QTCRK_CODE;
}
// 外协调拨入库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZC_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 if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CROSSLAYER_CODE;
// 包材出库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_BCK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_F2BCQ_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_PACKING_CODE;
// 长管出库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_HCC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CGCK_CODE;
// 外协调拨出库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBOUTWAREHOUSE_CODE;
// 灭菌入库
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_MJC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_CP_ID)
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_SterilizationInstock_CODE;
#endregion
//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);
//}
await db.Ado.BeginTranAsync();
// 判断是否重复传输
WmsMaterialTransfer wmsMaterialTransferRep = await db.Queryable().Where(r => r.erp_bill_code == input.bill_code).FirstAsync();
if (wmsMaterialTransferRep != null)
{
// 判断单据是否已经下发
List _wmsMaterialTransferDs = await db.Queryable().Where(r => r.bill_id == wmsMaterialTransferRep.id).ToListAsync();
bool isxf = _wmsMaterialTransferDs.Where(r => r.yxfqty > 0).Any();
if (isxf)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用转库单{input.bill_code}!");
throw new AppFriendlyException($@"wms已下发使用转库单{input.bill_code}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsMaterialTransferRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsMaterialTransferRep.id).ExecuteCommandAsync();
}
}
List details = input.details.Where(r => r.qty > 0).ToList();
List details_return = input.details.Where(r => r.qty < 0).ToList();
if (details.Count > 0)
{
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.type = transfer_type;
wmsMaterialTransfer.erp_pk = input.erp_pk;
wmsMaterialTransfer.erp_warehouse_instock = input.warehouse_instock;
wmsMaterialTransfer.erp_warehouse_outstock = input.warehouse_outstock;
await db.Insertable(wmsMaterialTransfer).ExecuteCommandAsync();
List wmsMaterialTransferDs = new List();
foreach (var detail in 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.yxfqty_rk = 0;
wmsMaterialTransferD.yzqty_rk = 0;
wmsMaterialTransferD.erp_line_pk = detail.erp_line_pk;
var material = await db.Queryable().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().InnerJoin((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();
LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}");
}
if (details_return.Count > 0)
{
WmsPrdReturnH wmsPrdReturnH = new WmsPrdReturnH();
string Code = await _billRuleService.GetBillNumber("WMSPRDRETURN");
wmsPrdReturnH.bill_code = Code;
wmsPrdReturnH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
wmsPrdReturnH.warehouse_id = warehouse_instock.id;
wmsPrdReturnH.create_id = WmsWareHouseConst.ErpUserId;
wmsPrdReturnH.create_time = DateTime.Now;
wmsPrdReturnH.erp_bill_code = input.bill_code;
wmsPrdReturnH.transfer_type = transfer_type;
wmsPrdReturnH.erp_pk = input.erp_pk;
await db.Insertable(wmsPrdReturnH).ExecuteCommandAsync();
List wmsPrdReturnDs = new List();
foreach (var detail in details_return)
{
WmsPrdReturnD wmsPrdReturnD = new WmsPrdReturnD();
wmsPrdReturnD.lineno = detail.lineno;
wmsPrdReturnD.material_code = detail.material_code;
wmsPrdReturnD.code_batch = detail.code_batch;
wmsPrdReturnD.qty = -detail.qty;
wmsPrdReturnD.bill_id = wmsPrdReturnH.id;
wmsPrdReturnD.ytqty = 0;
wmsPrdReturnD.erp_line_pk = detail.erp_line_pk;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPrdReturnD.material_id = material.id;
wmsPrdReturnD.material_code = material.code;
wmsPrdReturnD.material_name = material.name;
}
var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsPrdReturnD.unit_id = erpExtendField.Id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体明细中单位{detail.unit_code}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
}
wmsPrdReturnDs.Add(wmsPrdReturnD);
}
await db.Insertable(wmsPrdReturnDs).ExecuteCommandAsync();
LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}");
}
await db.Ado.CommitTranAsync();
}
catch (Exception ex)
{
error_erpbillcodes.Add($"bip单据号{input.bill_code}: {ex.Message}");
LoggerErp2Mes.LogWarning($"【MaterialTransfer】{ex.Message}");
LoggerErp2Mes.LogWarning($"【MaterialTransfer】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
}
finally
{
}
}
if (error_erpbillcodes.Count > 0)
{
LoggerErp2Mes.LogWarning($"同步失败信息:{string.Join(',', error_erpbillcodes)}");
return await ToApiResult(HttpStatusCode.InternalServerError, $"同步失败信息:{string.Join(',', error_erpbillcodes)}");
}
return await ToApiResult(HttpStatusCode.OK, "成功");
}
///
/// 销售发货单
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task SaleShipping(SaleShippingInput input)
{
LoggerErp2Mes.LogInformation($"【SaleShipping】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
try
{
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【SaleShipping】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
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);
//}
WmsErpWarehouserelaH wmsErpWarehouserelaH = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_code).FirstAsync();
if (wmsErpWarehouserelaH == null)
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_code}对应wms系统的映射关系!");
throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_code}对应wms系统的映射关系!", 500);
}
string warehouse_outstock_code = wmsErpWarehouserelaH.wms_warehousecode;
BasWarehouse warehouse_outstock = await db.Queryable().Where(r => r.whcode == warehouse_outstock_code).FirstAsync();
if (warehouse_outstock == null)
{
_LoggerErp2Mes.LogWarning($"【TransferOrder】无法查询到出库仓库{warehouse_outstock_code}的档案记录!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到出库仓库{warehouse_outstock_code}的档案记录!");
}
await db.Ado.BeginTranAsync();
// 判断是否重复传输
WmsSaleH wmsSaleHRep = await db.Queryable().Where(r => r.erp_bill_code == input.bill_code).FirstAsync();
if (wmsSaleHRep != null)
{
// 判断单据是否已经下发
List _wmsSaleDs = await db.Queryable().Where(r => r.bill_id == wmsSaleHRep.id).ToListAsync();
bool isxf = _wmsSaleDs.Where(r => r.purchase_arriveqty > 0).Any();
if (isxf)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用销售出库单{input.bill_code}!");
throw new AppFriendlyException($@"wms已下发使用销售出库单{input.bill_code}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsSaleHRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsSaleHRep.id).ExecuteCommandAsync();
}
}
WmsSaleH wmsSaleH = new WmsSaleH();
string Code = await _billRuleService.GetBillNumber("WmsSale");
wmsSaleH.bill_code = Code;
wmsSaleH.org_id = WmsWareHouseConst.AdministratorOrgId;
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;
wmsSaleH.erp_wh_type = input.warehouse_code;
var customer = await db.Queryable().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 wmsSaleDs = new List();
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().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == 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().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;
wmsSaleD.container_no = material.material_standard;
}
wmsSaleD.auxprop = detail.auxprop;
var gys_erpExtendField = await db.Queryable().Where(a => a.supplier_id == detail.auxprop_gys).FirstAsync();
if (gys_erpExtendField != null)
{
wmsSaleD.auxprop_gys = gys_erpExtendField.table_id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体明细中组织{detail.auxprop_gys}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中组织{detail.auxprop_gys}在wms系统中未找到!", 500);
}
wmsSaleD.auxprop_xph = detail.auxprop_xph;
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
{
}
}
///
/// 调拨出库单同步
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task TransferOutstock(TransferOutstockInput input)
{
LoggerErp2Mes.LogInformation($"【TransferOutstock】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
try
{
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【TransferOutstock】主表主键不能为空!");
throw new AppFriendlyException($"主表主键不能为空", 500);
}
WmsErpWarehouserelaH wmsErpWarehouserelaH = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_instock).FirstAsync();
if (wmsErpWarehouserelaH == null)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!");
throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_instock}对应wms系统的映射关系!", 500);
}
string warehouse_instock_code = wmsErpWarehouserelaH.wms_warehousecode;
BasWarehouse warehouse_instock = await db.Queryable().Where(r => r.whcode == warehouse_instock_code).FirstAsync();
if (warehouse_instock == null)
{
_LoggerErp2Mes.LogWarning($"【TransferOutstock】无法查询到入库仓库{warehouse_instock_code}的档案记录!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到入库仓库{warehouse_instock_code}的档案记录!");
}
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);
//}
await db.Ado.BeginTranAsync();
// 判断是否重复传输
WmsRawmatTransferinstockH wmsRawmatTransferinstockHRep = await db.Queryable().Where(r => r.erp_bill_code == input.transfer_order).FirstAsync();
if (wmsRawmatTransferinstockHRep != null)
{
// 判断单据是否已经下发
List wmsRawmatTransferinstockHs = await db.Queryable().Where(r => r.bill_id == wmsRawmatTransferinstockHRep.id).ToListAsync();
bool isxf = wmsRawmatTransferinstockHs.Where(r => r.bind_qty > 0).Any();
if (isxf)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用调拨出库单{input.transfer_order}!");
throw new AppFriendlyException($@"wms已下发使用调拨出库单{input.transfer_order}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsRawmatTransferinstockHRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsRawmatTransferinstockHRep.id).ExecuteCommandAsync();
}
}
// 判断是否重复传输
WmsTransferInstockH wmsTransferInstockHRep = await db.Queryable().Where(r => r.erp_bill_code == input.transfer_order).FirstAsync();
if (wmsTransferInstockHRep != null)
{
// 判断单据是否已经下发
List _wmsTransferInstockDs = await db.Queryable().Where(r => r.bill_id == wmsTransferInstockHRep.id).ToListAsync();
bool isxf = _wmsTransferInstockDs.Where(r => r.xf_qty > 0).Any();
if (isxf)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用调拨出库单{input.transfer_order}!");
throw new AppFriendlyException($@"wms已下发使用调拨出库单{input.transfer_order}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsTransferInstockHRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsTransferInstockHRep.id).ExecuteCommandAsync();
}
}
// 判断是否重复传输
WmsPackInstockH wmsPackInstockHRep = await db.Queryable().Where(r => r.erp_bill_code == input.transfer_order).FirstAsync();
if (wmsPackInstockHRep != null)
{
// 判断单据是否已经下发
List _wmsPackInstocDs = await db.Queryable().Where(r => r.bill_id == wmsPackInstockHRep.id).ToListAsync();
bool isxf = _wmsPackInstocDs.Where(r => r.xf_qty > 0).Any();
if (isxf)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用调拨出库单{input.transfer_order}!");
throw new AppFriendlyException($@"wms已下发使用调拨出库单{input.transfer_order}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsPackInstockHRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsPackInstockHRep.id).ExecuteCommandAsync();
}
}
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;
var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_id).FirstAsync();
if (org_erpExtendField != null)
{
wmsRawmatTransferinstockH.outstockorg_id = org_erpExtendField.pk_org_v;
wmsRawmatTransferinstockH.outstockorg_code = org_erpExtendField.pk_org;
var OrganizeEntity = await db.Queryable().Where(a => a.Id == org_erpExtendField.table_id).FirstAsync();
if (OrganizeEntity != null)
{
wmsRawmatTransferinstockH.outstockorg_name = OrganizeEntity.FullName;
}
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!");
throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500);
}
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.warehouse_instock;
wmsRawmatTransferinstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
await db.Insertable(wmsRawmatTransferinstockH).ExecuteCommandAsync();
List wmsRawmatTransferinstockDs = new List();
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().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
msRawmatTransferinstockD.unit_id = erpExtendField.Id;
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().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
msRawmatTransferinstockD.matcode_id = material.id;
msRawmatTransferinstockD.matname = material.name;
msRawmatTransferinstockD.matspecification = material.material_specification;
}
msRawmatTransferinstockD.auxprop = detail.auxprop;
var gys_erpExtendField = await db.Queryable().Where(a => a.supplier_id == detail.auxprop_gys).FirstAsync();
if (gys_erpExtendField != null)
{
msRawmatTransferinstockD.auxprop_gys = gys_erpExtendField.table_id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中组织{detail.auxprop_gys}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中组织{detail.auxprop_gys}在wms系统中未找到!", 500);
}
msRawmatTransferinstockD.auxprop_xph = detail.auxprop_xph;
wmsRawmatTransferinstockDs.Add(msRawmatTransferinstockD);
}
await db.Insertable(wmsRawmatTransferinstockDs).ExecuteCommandAsync();
break;
}
case WmsWareHouseConst.WAREHOUSE_CP_ID:
{
WmsTransferInstockH wmsTransferInstockH = new WmsTransferInstockH();
Code = await _billRuleService.GetBillNumber("transferInstock");
wmsTransferInstockH.bill_code = Code;
wmsTransferInstockH.erp_bill_code = input.transfer_order;
var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_id).FirstAsync();
if (org_erpExtendField != null)
{
wmsTransferInstockH.outstockorg_id = org_erpExtendField.pk_org_v;
wmsTransferInstockH.outstockorg_code = org_erpExtendField.pk_org;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!");
throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500);
}
wmsTransferInstockH.incoming_ware = warehouse_instock.id;
wmsTransferInstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsTransferInstockH.erp_pk = input.erp_pk;
wmsTransferInstockH.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferInstockH.create_time = DateTime.Now;
wmsTransferInstockH.dept_code = input.dept_code;
wmsTransferInstockH.biller = input.biller;
wmsTransferInstockH.erp_wh_type = input.warehouse_instock;
await db.Insertable(wmsTransferInstockH).ExecuteCommandAsync();
List wmsTransferInstockDs = new List();
foreach (var detail in input.details)
{
WmsTransferInstockD wmsTransferInstockD = new WmsTransferInstockD();
wmsTransferInstockD.bill_id = wmsTransferInstockH.id;
wmsTransferInstockD.material_code = detail.material_code;
var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsTransferInstockD.unit_id = erpExtendField.Id;
wmsTransferInstockD.unit_code = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中单位{detail.unit_code}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
}
wmsTransferInstockD.qty = 0;
wmsTransferInstockD.stock_location = detail.stock_location;
wmsTransferInstockD.pi_code = detail.code_batch;
wmsTransferInstockD.erp_line_pk = detail.erp_line_pk;
wmsTransferInstockD.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferInstockD.create_time = DateTime.Now;
wmsTransferInstockD.xf_qty = 0;
wmsTransferInstockD.pr_qty = detail.qty;
wmsTransferInstockD.lineno = detail.lineno;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsTransferInstockD.material_id = material.id;
wmsTransferInstockD.material_code = material.code;
wmsTransferInstockD.material_desc = material.material_specification;
}
wmsTransferInstockD.auxprop = detail.auxprop;
var gys_erpExtendField = await db.Queryable().Where(a => a.supplier_id == detail.auxprop_gys).FirstAsync();
if (gys_erpExtendField != null)
{
wmsTransferInstockD.auxprop_gys = gys_erpExtendField.table_id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中组织{detail.auxprop_gys}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中组织{detail.auxprop_gys}在wms系统中未找到!", 500);
}
wmsTransferInstockD.auxprop_xph = detail.auxprop_xph;
wmsTransferInstockD.udi_code = detail.udi_code;
wmsTransferInstockDs.Add(wmsTransferInstockD);
}
await db.Insertable(wmsTransferInstockDs).ExecuteCommandAsync();
break;
}
case WmsWareHouseConst.WAREHOUSE_JXK_ID:
{
WmsTransferInstockH wmsTransferInstockH = new WmsTransferInstockH();
Code = await _billRuleService.GetBillNumber("transferInstock");
wmsTransferInstockH.bill_code = Code;
wmsTransferInstockH.erp_bill_code = input.transfer_order;
var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_id).FirstAsync();
if (org_erpExtendField != null)
{
wmsTransferInstockH.outstockorg_id = org_erpExtendField.pk_org_v;
wmsTransferInstockH.outstockorg_code = org_erpExtendField.pk_org;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!");
throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500);
}
wmsTransferInstockH.incoming_ware = warehouse_instock.id;
wmsTransferInstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsTransferInstockH.erp_pk = input.erp_pk;
wmsTransferInstockH.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferInstockH.create_time = DateTime.Now;
wmsTransferInstockH.dept_code = input.dept_code;
wmsTransferInstockH.biller = input.biller;
wmsTransferInstockH.erp_wh_type = input.warehouse_instock;
await db.Insertable(wmsTransferInstockH).ExecuteCommandAsync();
List wmsTransferInstockDs = new List();
foreach (var detail in input.details)
{
WmsTransferInstockD wmsTransferInstockD = new WmsTransferInstockD();
wmsTransferInstockD.bill_id = wmsTransferInstockH.id;
wmsTransferInstockD.material_code = detail.material_code;
var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsTransferInstockD.unit_id = erpExtendField.Id;
wmsTransferInstockD.unit_code = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中单位{detail.unit_code}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
}
wmsTransferInstockD.qty = 0;
wmsTransferInstockD.stock_location = detail.stock_location;
wmsTransferInstockD.pi_code = detail.code_batch;
wmsTransferInstockD.erp_line_pk = detail.erp_line_pk;
wmsTransferInstockD.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferInstockD.create_time = DateTime.Now;
wmsTransferInstockD.xf_qty = 0;
wmsTransferInstockD.pr_qty = detail.qty;
wmsTransferInstockD.lineno = detail.lineno;
wmsTransferInstockD.udi_code = detail.udi_code;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsTransferInstockD.material_id = material.id;
wmsTransferInstockD.material_code = material.code;
wmsTransferInstockD.material_desc = material.material_specification;
}
wmsTransferInstockDs.Add(wmsTransferInstockD);
}
await db.Insertable(wmsTransferInstockDs).ExecuteCommandAsync();
break;
//WmsPackInstockH wmsPackInstockH = new WmsPackInstockH();
//Code = await _billRuleService.GetBillNumber("WMSPACKINSTOCK");
//wmsPackInstockH.bill_code = Code;
//wmsPackInstockH.erp_bill_code = input.transfer_order;
//var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_id).FirstAsync();
//if (org_erpExtendField != null)
//{
// wmsPackInstockH.outstockorg_id = org_erpExtendField.pk_org_v;
// wmsPackInstockH.outstockorg_code = org_erpExtendField.pk_org;
//}
//else
//{
// _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!");
// throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500);
//}
//wmsPackInstockH.incoming_ware = warehouse_instock.id;
//wmsPackInstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
//wmsPackInstockH.erp_pk = input.erp_pk;
//wmsPackInstockH.create_id = WmsWareHouseConst.ErpUserId;
//wmsPackInstockH.bill_date = DateTime.Now;
//wmsPackInstockH.create_time = DateTime.Now;
//wmsPackInstockH.erp_wh_type = input.warehouse_instock;
//await db.Insertable(wmsPackInstockH).ExecuteCommandAsync();
//List wmsPackInstockDs = new List();
//foreach (var detail in input.details)
//{
// WmsPackInstockD wmsPackInstockD = new WmsPackInstockD();
// wmsPackInstockD.bill_id = wmsPackInstockH.id;
// wmsPackInstockD.material_code = detail.material_code;
// var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
// if (erpExtendField != null)
// {
// wmsPackInstockD.unit_id = erpExtendField.Id;
// wmsPackInstockD.unit_code = erpExtendField.EnCode;
// }
// else
// {
// _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中单位{detail.unit_code}在wms系统中未找到!");
// throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
// }
// wmsPackInstockD.pr_qty = detail.qty;
// wmsPackInstockD.pi_code = detail.code_batch;
// wmsPackInstockD.erp_line_pk = detail.erp_line_pk;
// wmsPackInstockD.create_id = WmsWareHouseConst.ErpUserId;
// wmsPackInstockD.create_time = DateTime.Now;
// wmsPackInstockD.xf_qty = 0;
// wmsPackInstockD.qty = 0;
// wmsPackInstockD.lineno = detail.lineno;
// var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
// if (material != null)
// {
// wmsPackInstockD.material_id = material.id;
// wmsPackInstockD.material_code = material.code;
// wmsPackInstockD.material_desc = material.material_specification;
// }
// wmsPackInstockDs.Add(wmsPackInstockD);
//}
//await db.Insertable(wmsPackInstockDs).ExecuteCommandAsync();
//break;
}
case WmsWareHouseConst.WAREHOUSE_BCK_ID:
{
WmsPackInstockH wmsPackInstockH = new WmsPackInstockH();
Code = await _billRuleService.GetBillNumber("WMSPACKINSTOCK");
wmsPackInstockH.bill_code = Code;
wmsPackInstockH.erp_bill_code = input.transfer_order;
var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_id).FirstAsync();
if (org_erpExtendField != null)
{
wmsPackInstockH.outstockorg_id = org_erpExtendField.pk_org_v;
wmsPackInstockH.outstockorg_code = org_erpExtendField.pk_org;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!");
throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500);
}
wmsPackInstockH.incoming_ware = warehouse_instock.id;
wmsPackInstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsPackInstockH.erp_pk = input.erp_pk;
wmsPackInstockH.create_id = WmsWareHouseConst.ErpUserId;
wmsPackInstockH.bill_date = DateTime.Now;
wmsPackInstockH.create_time = DateTime.Now;
wmsPackInstockH.erp_wh_type = input.warehouse_instock;
await db.Insertable(wmsPackInstockH).ExecuteCommandAsync();
List wmsPackInstockDs = new List();
foreach (var detail in input.details)
{
WmsPackInstockD wmsPackInstockD = new WmsPackInstockD();
wmsPackInstockD.bill_id = wmsPackInstockH.id;
wmsPackInstockD.material_code = detail.material_code;
var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsPackInstockD.unit_id = erpExtendField.Id;
wmsPackInstockD.unit_code = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中单位{detail.unit_code}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
}
wmsPackInstockD.pr_qty = detail.qty;
wmsPackInstockD.pi_code = detail.code_batch;
wmsPackInstockD.erp_line_pk = detail.erp_line_pk;
wmsPackInstockD.create_id = WmsWareHouseConst.ErpUserId;
wmsPackInstockD.create_time = DateTime.Now;
wmsPackInstockD.xf_qty = 0;
wmsPackInstockD.qty = 0;
wmsPackInstockD.lineno = detail.lineno;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPackInstockD.material_id = material.id;
wmsPackInstockD.material_code = material.code;
wmsPackInstockD.material_desc = material.material_specification;
}
var gys_erpExtendField = await db.Queryable().Where(a => a.supplier_id == detail.auxprop_gys).FirstAsync();
if (gys_erpExtendField != null)
{
wmsPackInstockD.auxprop_gys = gys_erpExtendField.table_id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中组织{detail.auxprop_gys}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中组织{detail.auxprop_gys}在wms系统中未找到!", 500);
}
wmsPackInstockD.auxprop_xph = detail.auxprop_xph;
wmsPackInstockDs.Add(wmsPackInstockD);
}
await db.Insertable(wmsPackInstockDs).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
{
}
}
///
/// 调拨订单
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task TransferOrder(TransferOrderInput input)
{
LoggerErp2Mes.LogInformation($"【TransferOrder】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
try
{
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【TransferOrder】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
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);
//}
await db.Ado.BeginTranAsync();
// 判断是否重复传输
WmsTransferOrderH wmsTransferOrderHRep = await db.Queryable().Where(r => r.erp_bill_code == input.transfer_order).FirstAsync();
if (wmsTransferOrderHRep != null)
{
await db.Deleteable().Where(r => r.id == wmsTransferOrderHRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsTransferOrderHRep.id).ExecuteCommandAsync();
}
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;
var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.instockorg_id).FirstAsync();
if (org_erpExtendField != null)
{
wmsTransferOrderH.instockorg_id = org_erpExtendField.pk_org_v;
wmsTransferOrderH.instockorg_code = org_erpExtendField.pk_org;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.instockorg_id}在wms系统中未找到!");
throw new AppFriendlyException($@"表头明细中组织{input.instockorg_id}在wms系统中未找到!", 500);
}
var _erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id)
.Where((a, b) => b.EnCode == 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();
Dictionary dic_WmsErpWarehouseidrelaH = await db.Queryable()
.LeftJoin((a, b) => a.wms_warehousecode == b.whcode)
.Select((a, b) => new
{
a.erp_warehousecode,
b.id,
b.whcode
})
.ToDictionaryAsync(k => k.erp_warehousecode, v => v.id);
foreach (var detail in input.details)
{
if (!dic_WmsErpWarehouseidrelaH.ContainsKey(detail.warehouse_outstock))
{
_LoggerErp2Mes.LogWarning($"【TransferOrder】无法查询到出库仓库{detail.warehouse_outstock}的档案记录!");
throw new AppFriendlyException($"无法查询到出库仓库{detail.warehouse_outstock}的档案记录!", 500);
}
}
Dictionary dic_WmsErpWarehousecoderelaH = await db.Queryable()
.LeftJoin((a, b) => a.wms_warehousecode == b.whcode)
.Select((a, b) => new
{
a.erp_warehousecode,
b.id,
b.whcode
})
.ToDictionaryAsync(k => k.erp_warehousecode, v => v.whcode);
List details_WAREHOUSE_YCL_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_YCL_ID).ToList();
List details_WAREHOUSE_CP_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_CP_ID).ToList();
List wmsTransferOrderDs = new List();
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().InnerJoin((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_id = erpExtendField.Id;
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;
wmsTransferOrderD.erp_wh_type = detail.warehouse_outstock;
wmsTransferOrderD.warehouse_code = dic_WmsErpWarehousecoderelaH[detail.warehouse_outstock].ToString();
wmsTransferOrderD.warehouse_instock_code = detail.warehouse_instock_id;
var material = await db.Queryable().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();
// 判断是否重复传输
WmsRawmatTransferoutstockH wmsRawmatTransferoutstockHRep = await db.Queryable().Where(r => r.erp_bill_code == input.transfer_order).FirstAsync();
if (wmsRawmatTransferoutstockHRep != null)
{
// 判断单据是否已经下发
List _wmsRawmatTransferoutstockDs = await db.Queryable().Where(r => r.bill_id == wmsRawmatTransferoutstockHRep.id).ToListAsync();
bool isxf = _wmsRawmatTransferoutstockDs.Where(r => r.actual_qty > 0).Any();
if (isxf)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用调拨订单{input.transfer_order}!");
throw new AppFriendlyException($@"wms已下发使用调拨订单{input.transfer_order}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsRawmatTransferoutstockHRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsRawmatTransferoutstockHRep.id).ExecuteCommandAsync();
}
}
// 判断是否重复传输
WmsTransferOutstockH wmsTransferOutstockHRep = await db.Queryable().Where(r => r.erp_bill_code == input.transfer_order).FirstAsync();
if (wmsTransferOutstockHRep != null)
{
// 判断单据是否已经下发
List _wmsTransferOutstockDs = await db.Queryable().Where(r => r.bill_id == wmsTransferOutstockHRep.id).ToListAsync();
bool isxf = _wmsTransferOutstockDs.Where(r => r.xf_qty > 0).Any();
if (isxf)
{
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】wms已下发使用调拨订单{input.transfer_order}!");
throw new AppFriendlyException($@"wms已下发使用调拨订单{input.transfer_order}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsTransferOutstockHRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsTransferOutstockHRep.id).ExecuteCommandAsync();
}
}
if (details_WAREHOUSE_YCL_ID.Count > 0)
{
WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = new WmsRawmatTransferoutstockH();
string code = await _billRuleService.GetBillNumber("RawmatTransferoutstock");
wmsRawmatTransferoutstockH.erp_bill_code = input.transfer_order;
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.erp_pk = input.erp_pk;
wmsRawmatTransferoutstockH.transfer_order_id = wmsTransferOrderH.id;
wmsRawmatTransferoutstockH.issuance_status = "0";
wmsRawmatTransferoutstockH.transaction_type = _erpExtendField.EnCode;
wmsRawmatTransferoutstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsRawmatTransferoutstockH.instockorg_id = org_erpExtendField.pk_org_v;
wmsRawmatTransferoutstockH.instockorg_code = org_erpExtendField.pk_org;
wmsRawmatTransferoutstockH.warehouse_code = WmsWareHouseConst.WAREHOUSE_YCL_CODE;
List wmsRawmatTransferoutstockDs = new List ();
foreach (var detail in details_WAREHOUSE_YCL_ID)
{
WmsRawmatTransferoutstockD wmsRawmatTransferoutstockD = new WmsRawmatTransferoutstockD();
wmsRawmatTransferoutstockD.bill_id = wmsRawmatTransferoutstockH.id;
wmsRawmatTransferoutstockD.unit = detail.unit_code;
var erpExtendField = await db.Queryable().InnerJoin((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_id = erpExtendField.Id;
wmsRawmatTransferoutstockD.unit = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
}
wmsRawmatTransferoutstockD.erp_wh_type = detail.warehouse_outstock;
wmsRawmatTransferoutstockD.warehouse_code = dic_WmsErpWarehousecoderelaH[detail.warehouse_outstock].ToString();
wmsRawmatTransferoutstockD.warehouse_instock_code = detail.warehouse_instock_id;
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().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();
}
if(details_WAREHOUSE_CP_ID.Count > 0)
{
WmsTransferOutstockH wmsTransferOutstockH = new WmsTransferOutstockH();
string code = await _billRuleService.GetBillNumber("WmsTransferOutstock");
wmsTransferOutstockH.erp_bill_code = input.transfer_order;
wmsTransferOutstockH.bill_code = code;
wmsTransferOutstockH.create_id = WmsWareHouseConst.ErpUserId;
wmsTransferOutstockH.create_time = DateTime.Now;
wmsTransferOutstockH.erp_pk = input.erp_pk;
wmsTransferOutstockH.transfer_order_id = wmsTransferOrderH.id;
wmsTransferOutstockH.issuance_status = "0";
wmsTransferOutstockH.transaction_type = _erpExtendField.EnCode;
wmsTransferOutstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
wmsTransferOutstockH.instockorg_id = org_erpExtendField.pk_org_v;
wmsTransferOutstockH.instockorg_code = org_erpExtendField.pk_org;
List wmsTransferOutstockDs = new List();
foreach (var detail in details_WAREHOUSE_CP_ID)
{
WmsTransferOutstockD wmsTransferOutstockD = new WmsTransferOutstockD();
wmsTransferOutstockD.bill_id = wmsTransferOutstockH.id;
var erpExtendField = await db.Queryable().InnerJoin((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.warehouse_code = dic_WmsErpWarehousecoderelaH[detail.warehouse_outstock].ToString();
wmsTransferOutstockD.warehouse_instock_code = detail.warehouse_instock_id;
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;
wmsTransferOutstockD.erp_wh_type = detail.warehouse_outstock;
var material = await db.Queryable().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
{
}
}
///
/// 材料出库单
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task RawmatOutstock(ErpRawmatOutstockInput input)
{
LoggerErp2Mes.LogInformation($"【RawmatOutstock】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
try
{
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【RawmatOutstock】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【RawmatOutstock】子表主键不能为空!");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
//var wmsRawmatOutstocksDistinct = input.details.Select(r => new
//{
// material_id = r.material_code,
// code_batch = r.code_batch,
//}).Distinct();
//if (wmsRawmatOutstocksDistinct.Count() < input.details.Count)
//{
// _LoggerErp2Mes.LogWarning($@"【RawmatOutstock】表体存在物料和批号重复的明细!");
// throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
//}
await db.Ado.BeginTranAsync();
// 判断是否重复传输
WmsRawmatOutstockH wmsRawmatOutstockHRep = await db.Queryable().Where(r => r.erp_bill_code == input.outstock_order).FirstAsync();
if (wmsRawmatOutstockHRep != null)
{
// 判断单据是否已经下发
List _wmsRawmatOutstockDs = await db.Queryable().Where(r => r.bill_id == wmsRawmatOutstockHRep.id).ToListAsync();
bool isxf = _wmsRawmatOutstockDs.Where(r => r.actual_outstock_qty > 0).Any();
if (isxf)
{
_LoggerErp2Mes.LogWarning($@"【RawmatOutstock】wms已下发使用材料出库单{input.outstock_order}!");
throw new AppFriendlyException($@"wms已下发使用材料出库单{input.outstock_order}!", 500);
}
else // 删除数据重新插入
{
await db.Deleteable().Where(r => r.id == wmsRawmatOutstockHRep.id).ExecuteCommandAsync();
await db.Deleteable().Where(r => r.bill_id == wmsRawmatOutstockHRep.id).ExecuteCommandAsync();
}
}
OrganizeEntity dept = await db.Queryable().Where(x=>x.EnCode==input.dept_code).FirstAsync();
WmsRawmatOutstockH wmsRawmatOutstockH = new WmsRawmatOutstockH();
string code = await _billRuleService.GetBillNumber("rawmatoutstock");
wmsRawmatOutstockH.bill_code = code;
wmsRawmatOutstockH.create_id = WmsWareHouseConst.ErpUserId;
wmsRawmatOutstockH.create_time = DateTime.Now;
wmsRawmatOutstockH.erp_bill_code = input.outstock_order;
wmsRawmatOutstockH.warehouse_id = WmsWareHouseConst.WAREHOUSE_YCL_ID;
//wmsRawmatOutstockH.biller = input.biller;
wmsRawmatOutstockH.department = dept?.Id ?? input.dept_code;
wmsRawmatOutstockH.erp_pk = input.erp_pk;
wmsRawmatOutstockH.issuance_status = "0";
List wmsRawmatOutstockDs = new List();
foreach (var detail in input.details)
{
WmsRawmatOutstockD wmsRawmatOutstockD = new WmsRawmatOutstockD();
wmsRawmatOutstockD.bill_id = wmsRawmatOutstockH.id;
wmsRawmatOutstockD.unit = detail.unit_code;
var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
if (erpExtendField != null)
{
wmsRawmatOutstockD.unit = erpExtendField.EnCode;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
}
wmsRawmatOutstockD.qty = detail.qty;
wmsRawmatOutstockD.batchno = detail.code_batch;
wmsRawmatOutstockD.erp_line_pk = detail.erp_line_pk;
wmsRawmatOutstockD.create_id = WmsWareHouseConst.ErpUserId;
wmsRawmatOutstockD.create_time = DateTime.Now;
wmsRawmatOutstockD.lineno = detail.lineno;
wmsRawmatOutstockD.actual_outstock_qty = 0;
var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsRawmatOutstockD.material_id = material.id;
wmsRawmatOutstockD.material_code = material.code;
wmsRawmatOutstockD.material_name = material.name;
wmsRawmatOutstockD.material_specification = material.material_specification;
}
wmsRawmatOutstockD.auxprop = detail.auxprop;
var gys_erpExtendField = await db.Queryable().Where(a => a.supplier_id == detail.auxprop_gys).FirstAsync();
if (gys_erpExtendField != null)
{
wmsRawmatOutstockD.auxprop_gys = gys_erpExtendField.table_id;
}
else
{
_LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中组织{detail.auxprop_gys}在wms系统中未找到!");
throw new AppFriendlyException($@"表体明细中组织{detail.auxprop_gys}在wms系统中未找到!", 500);
}
wmsRawmatOutstockD.auxprop_xph = detail.auxprop_xph;
wmsRawmatOutstockDs.Add(wmsRawmatOutstockD);
}
await db.Insertable(wmsRawmatOutstockH).ExecuteCommandAsync();
await db.Insertable(wmsRawmatOutstockDs).ExecuteCommandAsync();
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【RawmatOutstock】成功生成单据:{code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【RawmatOutstock】{ex.Message}");
LoggerErp2Mes.LogError($"【RawmatOutstock】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
///
/// 材料出库单(批量)
///
[HttpPost, NonUnify, AllowAnonymous]
public async Task RawmatOutstockBatch(List inputs)
{
LoggerErp2Mes.LogInformation($"【RawmatOutstock】ERP传入数据:{JsonConvert.SerializeObject(inputs)}");
var db = _repository.AsSugarClient();
List error_erpbillcodes = new List();
foreach (ErpRawmatOutstockInput input in inputs)
{
try
{
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【RawmatOutstock】主表主键不能为空!");
throw new AppFriendlyException($@"主表主键不能为空!", 500);
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【RawmatOutstock】子表主键不能为空!");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
//var wmsRawmatOutstocksDistinct = input.details.Select(r => new
//{
// material_id = r.material_code,
// code_batch = r.code_batch,
//}).Distinct();
//if (wmsRawmatOutstocksDistinct.Count() < input.details.Count)
//{
// _LoggerErp2Mes.LogWarning($@"【RawmatOutstock】表体存在物料和批号重复的明细!");
// throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
//}
await db.Ado.BeginTranAsync();
// 判断是否重复传输
WmsRawmatOutstockH wmsRawmatOutstockHRep = await db.Queryable().Where(r => r.erp_bill_code == input.outstock_order).FirstAsync();
if (wmsRawmatOutstockHRep != null)
{
// 判断单据是否已经下发
List _wmsRawmatOutstockDs = await db.Queryable