静置仓逻辑编写,返回提示修改 bug,包材出库逻辑变更

This commit is contained in:
2024-07-17 11:23:23 +08:00
parent bf39c08837
commit 03775c8a12
18 changed files with 467 additions and 107 deletions

View File

@@ -298,7 +298,7 @@ namespace Tnb.WarehouseMgr
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> Distribute(MaterialTransferDistributeInput input)
public async Task<dynamic> Distribute(MaterialTransferDistributeInput input)
{
try
{
@@ -421,7 +421,7 @@ namespace Tnb.WarehouseMgr
await _db.Ado.RollbackTranAsync();
Logger.LogError("【Distribute】" + ex.Message);
Logger.LogError("【Distribute】" + ex.StackTrace);
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
throw Oops.Bah(ex.Message);
}
finally
{
@@ -429,7 +429,7 @@ namespace Tnb.WarehouseMgr
InvokeGenPretaskExcute();
}
return await ToApiResult(HttpStatusCode.OK, "成功");
return await Task.FromResult(true);
}
/// <summary>
@@ -439,7 +439,7 @@ namespace Tnb.WarehouseMgr
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> DistributeHCC(MaterialTransferDistributeInput input)
public async Task<dynamic> DistributeHCC(MaterialTransferDistributeInput input)
{
try
{
@@ -571,7 +571,7 @@ namespace Tnb.WarehouseMgr
await _db.Ado.RollbackTranAsync();
Logger.LogError("【Distribute】" + ex.Message);
Logger.LogError("【Distribute】" + ex.StackTrace);
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
throw Oops.Bah(ex.Message);
}
finally
{
@@ -579,7 +579,195 @@ namespace Tnb.WarehouseMgr
InvokeGenPretaskExcute();
}
return await ToApiResult(HttpStatusCode.OK, "成功");
return await Task.FromResult(true);
}
/// <summary>
/// 获取物料库存(通用)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> MaterialInventoryCommon(MaterialTransferGetMaterialInventoryInput input)
{
try
{
if (input.palletCount <= 0)
{
throw new AppFriendlyException("托盘数必须大于0", 500);
}
if (string.IsNullOrEmpty(input.material_id))
{
throw new AppFriendlyException("物料id不可为空", 500);
}
//if (string.IsNullOrEmpty(input.code_batch))
//{
// throw new AppFriendlyException("批号不可为空", 500);
//}
if (string.IsNullOrEmpty(input.warehouse_id))
{
throw new AppFriendlyException("仓库不可为空", 500);
}
//入库取终点 //出库起点
OutStockStrategyQuery inStockStrategyInput = new()
{
warehouse_id = input.warehouse_id,
material_id = input.material_id,
code_batch = input.code_batch,
Size = input.palletCount
};
List<WmsCarryH> items = await _wareHouseService.OutStockStrategy(inStockStrategyInput);
if (string.IsNullOrEmpty(input.code_batch))
input.code_batch = null;
decimal qty = _db.Queryable<WmsCarryCode>().Where(r => items.Select(a => a.id).Contains(r.carry_id) && r.material_id == input.material_id && r.code_batch == input.code_batch).Sum(r => r.codeqty);
JObject keyValuePairs = new JObject();
keyValuePairs["realPalletCount"] = items.Count;
keyValuePairs["realInvQty"] = qty;
return await ToApiResult(HttpStatusCode.OK, "成功", keyValuePairs);
}
catch (Exception ex)
{
await _db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
}
/// <summary>
/// 按料架下发(包材库)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<dynamic> DistributeBCK(MaterialTransferDistributeInput input)
{
try
{
if (string.IsNullOrEmpty(input.source_id))
{
throw new AppFriendlyException("来源单据id不可为空", 500);
}
if (input.palletCount <= 0)
{
throw new AppFriendlyException("料架数必须大于0", 500);
}
if (input.qty <= 0)
{
throw new AppFriendlyException("数量必须大于0", 500);
}
//if (string.IsNullOrEmpty(input.code_batch))
//{
// throw new AppFriendlyException("批号不可为空", 500);
//}
if (string.IsNullOrEmpty(input.code_batch))
input.code_batch = null;
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable<WmsMaterialTransferD>().FirstAsync(it => it.id == input.source_id);
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
if (wmsMaterialTransferD.yxfqty == wmsMaterialTransferD.qty)
{
throw new AppFriendlyException("已下发数量已达到转库数量", 500);
}
if (wmsMaterialTransfer.warehouse_outstock != WmsWareHouseConst.WAREHOUSE_BCK_ID)
{
throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}入库仓库不是四楼包材库,请检查!", HttpStatusCode.InternalServerError);
}
if (wmsMaterialTransfer.warehouse_instock != WmsWareHouseConst.WAREHOUSE_F2BCQ_ID)
{
throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}入库仓库不是二楼包材库,请检查!", HttpStatusCode.InternalServerError);
}
await s_taskExecuteSemaphore.WaitAsync();
await _db.Ado.BeginTranAsync();
//入库取终点 //出库起点
OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_BCK_ID, material_id = wmsMaterialTransferD.material_id, code_batch = input.code_batch, Size = input.palletCount };
List<WmsCarryH> items = await _wareHouseService.OutStockStrategy(outStockStrategyInput);
if (items.Count == 0)
{
throw new AppFriendlyException($@"没有可以出库的载具", 500);
}
decimal qty = _db.Queryable<WmsCarryCode>().Where(r => items.Select(a => a.id).Contains(r.carry_id) && r.material_id == wmsMaterialTransferD.material_id && r.code_batch == input.code_batch).Sum(r => r.codeqty);
// 暂定PDA上查询到的物料批次和库存数量与提交时获取的不一致时需要前台重新获取库存接口
if (input.palletCount != items.Count || input.qty != qty)
{
throw new AppFriendlyException($@"当前实际料架数量为{input.palletCount} 实际库存数量为{qty},与前台数据不一致,请重新获取库存", HttpStatusCode.InternalServerError);
}
InStockStrategyQuery inStockStrategyInput = new()
{
warehouse_id = WmsWareHouseConst.WAREHOUSE_F2BCQ_ID,
Size = input.palletCount
};
List<BasLocation> endlocations = await _wareHouseService.InStockStrategyBCK(inStockStrategyInput);
if (endlocations.Count < 1)
{
throw new AppFriendlyException($@"没有可以入库的库位", 500);
}
if (items.Count == 0)
{
throw new AppFriendlyException($@"没有可以出库的载具", 500);
}
int index = 0;
foreach (var wmsCarryH in items)
{
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == wmsCarryH.id).FirstAsync();
BasLocation startLocation = await _db.Queryable<BasLocation>().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
commonCreatePretaskInput.startlocation_id = startLocation.id;
commonCreatePretaskInput.endlocation_id = endlocations[index].id;
commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_TRANSFER_TYPE_ID;
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
// 转库单id
commonCreatePretaskInput.source_id = input.source_id;
commonCreatePretaskInput.carry_id = wmsCarryH.id;
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
commonCreatePretaskInput.isExcuteMission = false;
Entities.Dto.Outputs.Result res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
if (res.code != HttpStatusCode.OK)
{
Logger.LogInformation($@"生成预任务失败");
throw new AppFriendlyException($@"生成预任务失败", 500);
}
index++;
}
// 更新子表已下发数量
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + input.qty).Where(r => r.id == input.source_id).ExecuteCommandAsync();
await _db.Ado.CommitTranAsync();
}
catch (Exception ex)
{
await _db.Ado.RollbackTranAsync();
Logger.LogError("【Distribute】" + ex.Message);
Logger.LogError("【Distribute】" + ex.StackTrace);
throw Oops.Bah(ex.Message);
}
finally
{
_ = s_taskExecuteSemaphore.Release();
InvokeGenPretaskExcute();
}
return await Task.FromResult(true);
}
@@ -723,7 +911,7 @@ namespace Tnb.WarehouseMgr
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> DistributeToZCC(MaterialTransferDistributeToZCCInput input)
public async Task<dynamic> DistributeToZCC(MaterialTransferDistributeToZCCInput input)
{
s_taskDistributeToZCC.Wait();
@@ -849,14 +1037,14 @@ namespace Tnb.WarehouseMgr
await _db.Ado.RollbackTranAsync();
Logger.LogError("【DistributeToZCC】" + ex.Message);
Logger.LogError("【DistributeToZCC】" + ex.StackTrace);
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
throw Oops.Bah(ex.Message);
}
finally
{
s_taskDistributeToZCC.Release();
InvokeGenPretaskExcute();
}
return await ToApiResult(HttpStatusCode.OK, "成功");
return await Task.FromResult(true);
}
/// <summary>
@@ -866,7 +1054,7 @@ namespace Tnb.WarehouseMgr
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> CallRackToProductionLine(MaterialTransferCallRackToProductionLineInput input)
public async Task<dynamic> CallRackToProductionLine(MaterialTransferCallRackToProductionLineInput input)
{
try
{
@@ -968,10 +1156,10 @@ namespace Tnb.WarehouseMgr
{
Logger.LogError("【CallRackToProductionLine】" + ex.Message);
Logger.LogError("【CallRackToProductionLine】" + ex.StackTrace);
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
throw Oops.Bah(ex.Message);
}
return await ToApiResult(HttpStatusCode.OK, "成功");
return await Task.FromResult(true);
}
/// <summary>
@@ -981,7 +1169,7 @@ namespace Tnb.WarehouseMgr
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> RackAndMatByWorkstation(MaterialTransferGetRackAndMatByWorkStationInput input)
public async Task<dynamic> RackAndMatByWorkstation(MaterialTransferGetRackAndMatByWorkStationInput input)
{
try
{
@@ -1035,13 +1223,13 @@ namespace Tnb.WarehouseMgr
pairs["details"] = JArray.Parse(JsonConvert.SerializeObject(matCodes));
jArray.Add(pairs);
}
return await ToApiResult(HttpStatusCode.OK, "成功", jArray);
return Task.FromResult(true);
}
catch (Exception ex)
{
Logger.LogError("【RackAndMatByWorkstation】" + ex.Message);
Logger.LogError("【RackAndMatByWorkstation】" + ex.StackTrace);
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
return Oops.Bah(ex.Message);
}
}
@@ -1051,7 +1239,7 @@ namespace Tnb.WarehouseMgr
/// <param name="input"></param>
/// <returns></returns>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> RackInstock(MaterialTransferRackInstockInput input)
public async Task<dynamic> RackInstock(MaterialTransferRackInstockInput input)
{
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.carry_code == input.carry_code).FirstAsync();
@@ -1068,11 +1256,11 @@ namespace Tnb.WarehouseMgr
else
{
Logger.LogError($"【RackInstock】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"【RackInstock】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!");
return Oops.Bah($"【RackInstock】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!");
}
}
async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> RackInstock_到暂存仓(MaterialTransferRackInstockInput input, WmsCarryH wmsCarryH)
async Task<dynamic> RackInstock_到暂存仓(MaterialTransferRackInstockInput input, WmsCarryH wmsCarryH)
{
try
{
@@ -1175,12 +1363,12 @@ namespace Tnb.WarehouseMgr
Logger.LogError("【RackInstock】" + ex.Message);
Logger.LogError("【RackInstock】" + ex.StackTrace);
await _db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
throw Oops.Bah(ex.Message);
}
return await ToApiResult(HttpStatusCode.OK, "成功");
return await Task.FromResult(true);
}
async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> RackInstock_到缓存仓(MaterialTransferRackInstockInput input, WmsCarryH wmsCarryH)
async Task<dynamic> RackInstock_到缓存仓(MaterialTransferRackInstockInput input, WmsCarryH wmsCarryH)
{
try
{
@@ -1234,9 +1422,9 @@ namespace Tnb.WarehouseMgr
Logger.LogError("【RackInstock】" + ex.Message);
Logger.LogError("【RackInstock】" + ex.StackTrace);
await _db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
throw Oops.Bah(ex.Message);
}
return await ToApiResult(HttpStatusCode.OK, "成功");
return await Task.FromResult(true);
}
/// <summary>