待灭菌仓流程,erp采购订单接口,日志完善

This commit is contained in:
2024-07-15 18:06:26 +08:00
parent 71b3cfba94
commit 56f8531044
10 changed files with 809 additions and 27 deletions

View File

@@ -1,4 +1,5 @@
using System.Text;
using Aop.Api.Domain;
using JNPF.Common.Enums;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
@@ -9,6 +10,7 @@ using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using NPOI.SS.Formula.Functions;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.WarehouseMgr.Entities;
@@ -290,11 +292,118 @@ namespace Tnb.WarehouseMgr
await db.Insertable(WmsInstockDs).ExecuteCommandAsync();
}
/// <summary>
/// 采购订单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> PurchaseOrder(PurchaseOrderInput input)
{
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【PurchaseOrderInput】主表主键不能为空");
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderInput】子表主键不能为空");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
var wmsPurchaseOrdersDistinct = input.details.Select(r => new
{
material_id = r.material_code,
code_batch = r.code_batch,
}).Distinct();
if (wmsPurchaseOrdersDistinct.Count() < input.details.Count)
{
_LoggerErp2Mes.LogWarning($@"【PurchaseOrderInput】表体存在物料和批号重复的明细");
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
}
try
{
await db.Ado.BeginTranAsync();
WmsPurchaseOrderH wmsPurchaseOrderH = new WmsPurchaseOrderH();
string Code = await _billRuleService.GetBillNumber("Purchase");
wmsPurchaseOrderH.purchase_order = Code;
wmsPurchaseOrderH.erp_bill_code = input.purchase_order;
wmsPurchaseOrderH.contact_person = input.contact_person;
wmsPurchaseOrderH.tel = input.tel;
wmsPurchaseOrderH.supplier_code = input.supplier_code;
wmsPurchaseOrderH.certificate_date = input.certificate_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
wmsPurchaseOrderH.ship_date = input.ship_date;
wmsPurchaseOrderH.erp_pk = input.erp_pk;
wmsPurchaseOrderH.create_id = WmsWareHouseConst.ErpUserId;
wmsPurchaseOrderH.create_time = DateTime.Now;
var supplier = await db.Queryable<BasSupplier>().Where(p => p.supplier_code == input.supplier_code).FirstAsync();
if (supplier != null)
{
wmsPurchaseOrderH.supplier_id = supplier.id;
wmsPurchaseOrderH.supplier_name = supplier.supplier_name;
}
await db.Insertable(wmsPurchaseOrderH).ExecuteCommandAsync();
List<WmsPurchaseOrderD> wmsPurchaseOrderDs = new List<WmsPurchaseOrderD>();
foreach (var detail in input.details)
{
WmsPurchaseOrderD wmsPurchaseOrderD = new WmsPurchaseOrderD();
wmsPurchaseOrderD.fk_wms_purchase_order_id = wmsPurchaseOrderH.id;
wmsPurchaseOrderD.matcode = detail.material_code;
wmsPurchaseOrderD.unit = detail.unit_code;
wmsPurchaseOrderD.purchase_quantity = detail.purchase_quantity.ToString();
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";
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
wmsPurchaseOrderD.matcode_id = material.id;
wmsPurchaseOrderD.matspecification = material.material_specification;
}
wmsPurchaseOrderDs.Add(wmsPurchaseOrderD);
}
await db.Insertable(wmsPurchaseOrderDs).ExecuteCommandAsync();
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【PurchaseOrderInput】成功生成单据:{Code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【PurchaseOrderInput】{ex.Message}");
LoggerErp2Mes.LogError($"【PurchaseOrderInput】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
/// <summary>
/// 转库单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Result> MaterialTransfer(MaterialTransferInput input)
public async Task<Entities.Dto.Outputs.Result> MaterialTransfer(MaterialTransferInput input)
{
LoggerErp2Mes.LogInformation($"【MaterialTransfer】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
@@ -442,9 +551,9 @@ namespace Tnb.WarehouseMgr
}
}
protected Task<Result> ToApiResult(HttpStatusCode statusCode, string msg)
protected Task<Entities.Dto.Outputs.Result> ToApiResult(HttpStatusCode statusCode, string msg)
{
Result result = new()
Entities.Dto.Outputs.Result result = new()
{
code = statusCode,
msg = msg