erp转库单的同步,签收逻辑修改
This commit is contained in:
@@ -1,12 +1,19 @@
|
||||
using JNPF.DependencyInjection;
|
||||
using System.Text;
|
||||
using JNPF.Common.Enums;
|
||||
using JNPF.DependencyInjection;
|
||||
using JNPF.DynamicApiController;
|
||||
using JNPF.FriendlyException;
|
||||
using JNPF.Systems.Interfaces.System;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
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;
|
||||
|
||||
@@ -285,73 +292,193 @@ namespace Tnb.WarehouseMgr
|
||||
/// <summary>
|
||||
/// 转库单
|
||||
/// </summary>
|
||||
public async Task MaterialTransfer(MaterialTransferInput input)
|
||||
[HttpPost, NonUnify, AllowAnonymous]
|
||||
public async Task<Result> MaterialTransfer(MaterialTransferInput input)
|
||||
{
|
||||
LoggerErp2Mes.LogInformation($"【MaterialTransfer】ERP传入数据:{JsonConvert.SerializeObject(input)}");
|
||||
var db = _repository.AsSugarClient();
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
BasWarehouse warehouse_outstock = await db.Queryable<BasWarehouse>().Where(r => r.whcode == input.warehouse_outstock).FirstAsync();
|
||||
BasWarehouse warehouse_instock = await db.Queryable<BasWarehouse>().Where(r => r.whcode == input.warehouse_instock).FirstAsync();
|
||||
if (warehouse_outstock == null)
|
||||
{
|
||||
|
||||
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到出库仓库{input.warehouse_outstock}的档案记录!");
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到出库仓库{input.warehouse_outstock}的档案记录!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
WmsMaterialTransfer wmsMaterialTransfer = new WmsMaterialTransfer();
|
||||
string Code = await _billRuleService.GetBillNumber("MaterialTransfer");
|
||||
wmsMaterialTransfer.bill_code = Code;
|
||||
wmsMaterialTransfer.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
wmsMaterialTransfer.bill_date = input.bill_date;
|
||||
wmsMaterialTransfer.warehouse_outstock = input.warehouse_outstock;
|
||||
wmsMaterialTransfer.warehouse_instock = input.warehouse_instock;
|
||||
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;
|
||||
|
||||
await db.Insertable(wmsMaterialTransfer).ExecuteCommandAsync();
|
||||
|
||||
List<WmsMaterialTransferD> wmsMaterialTransferDs = new List<WmsMaterialTransferD>();
|
||||
foreach (var detail in input.details)
|
||||
if (warehouse_instock == null)
|
||||
{
|
||||
WmsMaterialTransferD wmsMaterialTransferD = new WmsMaterialTransferD();
|
||||
wmsMaterialTransferD.lineno = detail.lineno;
|
||||
wmsMaterialTransferD.material_code = detail.material_code;
|
||||
wmsMaterialTransferD.unit_code = detail.unit_code;
|
||||
wmsMaterialTransferD.code_batch = detail.code_batch;
|
||||
wmsMaterialTransferD.station_code = detail.station_code;
|
||||
wmsMaterialTransferD.qty = detail.qty;
|
||||
wmsMaterialTransferD.bill_id = "";
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
//wmsPurchased.material_id = material.id;
|
||||
//// wmsPurchased.material_name = material.name;
|
||||
//wmsPurchased.unit_id = material.unit_id;
|
||||
}
|
||||
wmsMaterialTransferDs.Add(wmsMaterialTransferD);
|
||||
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到入库仓库{input.warehouse_instock}的档案记录!");
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到入库仓库{input.warehouse_instock}的档案记录!");
|
||||
}
|
||||
|
||||
await db.Insertable(wmsMaterialTransferDs).ExecuteCommandAsync();
|
||||
if (string.IsNullOrEmpty(input.erp_pk))
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($"【MaterialTransfer】主表主键不能为空!");
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
|
||||
}
|
||||
|
||||
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
|
||||
if (count_erp_line_pk > 0)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】子表主键不能为空!");
|
||||
throw new AppFriendlyException($@"子表主键不能为空!", 500);
|
||||
}
|
||||
|
||||
string transfer_type = "";
|
||||
// 中储仓到暂存仓
|
||||
if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZCC_ID)
|
||||
{
|
||||
int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count();
|
||||
if (count > 0)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"表体存在未填写工位的明细!");
|
||||
throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500);
|
||||
}
|
||||
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CGCK_CODE;
|
||||
}
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_CP_ID)
|
||||
{
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBRK_CODE;
|
||||
}
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_JZGL_ID)
|
||||
{
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_JZGLRK_CODE;
|
||||
}
|
||||
// 暂时其他情况都算齐套出入库类型(未定)
|
||||
else
|
||||
{
|
||||
int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count();
|
||||
if (count > 0)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"表体存在未填写工位的明细!");
|
||||
throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500);
|
||||
}
|
||||
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_QTCRK_CODE;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await db.Ado.BeginTranAsync();
|
||||
WmsMaterialTransfer wmsMaterialTransfer = new WmsMaterialTransfer();
|
||||
string Code = await _billRuleService.GetBillNumber("MaterialTransfer");
|
||||
wmsMaterialTransfer.bill_code = Code;
|
||||
wmsMaterialTransfer.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
wmsMaterialTransfer.bill_date = input.bill_date;
|
||||
wmsMaterialTransfer.warehouse_outstock = warehouse_outstock.id;
|
||||
wmsMaterialTransfer.warehouse_instock = warehouse_instock.id;
|
||||
wmsMaterialTransfer.biller_out = input.biller_out;
|
||||
wmsMaterialTransfer.depart_out = input.depart_out;
|
||||
wmsMaterialTransfer.biller_in = input.biller_in;
|
||||
wmsMaterialTransfer.depart_in = input.depart_in;
|
||||
wmsMaterialTransfer.deliver_date = input.deliver_date;
|
||||
wmsMaterialTransfer.arrival_date = input.arrival_date;
|
||||
wmsMaterialTransfer.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsMaterialTransfer.create_time = DateTime.Now;
|
||||
wmsMaterialTransfer.org_id = WmsWareHouseConst.AdministratorOrgId;
|
||||
wmsMaterialTransfer.erp_bill_code = input.bill_code;
|
||||
wmsMaterialTransfer.transfer_type = transfer_type;
|
||||
wmsMaterialTransfer.erp_pk = input.erp_pk;
|
||||
|
||||
await db.Insertable(wmsMaterialTransfer).ExecuteCommandAsync();
|
||||
|
||||
List<WmsMaterialTransferD> wmsMaterialTransferDs = new List<WmsMaterialTransferD>();
|
||||
foreach (var detail in input.details)
|
||||
{
|
||||
WmsMaterialTransferD wmsMaterialTransferD = new WmsMaterialTransferD();
|
||||
wmsMaterialTransferD.lineno = detail.lineno;
|
||||
wmsMaterialTransferD.material_code = detail.material_code;
|
||||
wmsMaterialTransferD.unit_code = detail.unit_code;
|
||||
wmsMaterialTransferD.code_batch = detail.code_batch;
|
||||
wmsMaterialTransferD.station_code = detail.station_code;
|
||||
wmsMaterialTransferD.qty = detail.qty;
|
||||
wmsMaterialTransferD.bill_id = wmsMaterialTransfer.id;
|
||||
|
||||
wmsMaterialTransferD.yxfqty = 0;
|
||||
wmsMaterialTransferD.yzqty = 0;
|
||||
wmsMaterialTransferD.erp_line_pk = detail.erp_line_pk;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsMaterialTransferD.material_id = material.id;
|
||||
wmsMaterialTransferD.material_specification = material.material_specification;
|
||||
wmsMaterialTransferD.unit_id = detail.unit_code;
|
||||
}
|
||||
wmsMaterialTransferDs.Add(wmsMaterialTransferD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsMaterialTransferDs).ExecuteCommandAsync();
|
||||
|
||||
await db.Ado.CommitTranAsync();
|
||||
|
||||
LoggerErp2Mes.LogInformation($"【MaterialTransfer】成功生成单据:{Code}");
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LoggerErp2Mes.LogError($"【MaterialTransfer】{ex.Message}");
|
||||
LoggerErp2Mes.LogError($"【MaterialTransfer】{ex.StackTrace}");
|
||||
await db.Ado.RollbackTranAsync();
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected Task<Result> ToApiResult(HttpStatusCode statusCode, string msg)
|
||||
{
|
||||
Result result = new()
|
||||
{
|
||||
code = statusCode,
|
||||
msg = msg
|
||||
};
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
private static readonly Dictionary<LogLevel, string> s_logLevelMap = new()
|
||||
{
|
||||
[LogLevel.Debug] = "DBG",
|
||||
[LogLevel.Information] = "INF",
|
||||
[LogLevel.Warning] = "WRN",
|
||||
[LogLevel.Error] = "ERR",
|
||||
};
|
||||
|
||||
protected string _LoggerErp2MesFileName = "";
|
||||
protected ILogger _LoggerErp2Mes;
|
||||
protected ILogger LoggerErp2Mes
|
||||
{
|
||||
get
|
||||
{
|
||||
string newFileName = $"{AppContext.BaseDirectory}/logs/Erp2Mes{DateTime.Now:yyyyMMdd}.log";
|
||||
if (_LoggerErp2MesFileName != newFileName)
|
||||
{
|
||||
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
|
||||
{
|
||||
|
||||
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
|
||||
cfgOpts.MessageFormat = (logMsg) =>
|
||||
{
|
||||
var logLevel = s_logLevelMap[logMsg.LogLevel];
|
||||
var sb = new StringBuilder();
|
||||
_ = sb.Append($"[{logLevel}] ");
|
||||
_ = sb.Append($"{logMsg.LogName} ");
|
||||
_ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
|
||||
_ = sb.Append($"#{logMsg.EventId.Id} ");
|
||||
_ = sb.Append(logMsg.Message + " ");
|
||||
_ = sb.Append(logMsg.Exception?.ToString());
|
||||
return sb.ToString();
|
||||
};
|
||||
|
||||
}));
|
||||
_LoggerErp2Mes = loggerFactory.CreateLogger(this.GetType());
|
||||
_LoggerErp2MesFileName = newFileName;
|
||||
}
|
||||
return _LoggerErp2Mes;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user