二楼空托到码垛线,库存报表变更
This commit is contained in:
@@ -472,8 +472,20 @@
|
||||
/// <summary>
|
||||
/// 一楼中储仓入库工位
|
||||
/// </summary>
|
||||
public const string ZZCSSX021007 = "32609215284757";
|
||||
/// <summary>
|
||||
/// 一楼中储仓入库工位
|
||||
/// </summary>
|
||||
public const string ZZCSSX011008 = "32609223625237";
|
||||
/// <summary>
|
||||
/// 一楼中储仓入库工位
|
||||
/// </summary>
|
||||
public const string ZZCSSX121009 = "32609229889045";
|
||||
/// <summary>
|
||||
/// 一楼中储仓入库工位
|
||||
/// </summary>
|
||||
public const string ZZCSSX121010 = "32609238573589";
|
||||
/// <summary>
|
||||
/// 料箱id
|
||||
/// </summary>
|
||||
public const string LIAOXIANGID = "26037262680357";
|
||||
|
||||
@@ -49,6 +49,10 @@
|
||||
///
|
||||
/// </summary>
|
||||
public string? material_code { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string[] endlocations { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -586,7 +586,7 @@ namespace Tnb.WarehouseMgr
|
||||
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = new List<Tuple<WmsCarryH, decimal, BasLocation>>();
|
||||
|
||||
// 6个下发一条任务链
|
||||
int move_num = 6;
|
||||
int move_num = 6;
|
||||
int endlocation_index = 0;
|
||||
BasLocation endlocation_ssx = null;
|
||||
|
||||
@@ -602,7 +602,7 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
// 每6个重新获取一次终点
|
||||
if (i % move_num == 0)
|
||||
if (i % move_num == 0)
|
||||
{
|
||||
endlocation_ssx = await _db.Queryable<BasLocation>().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||
}
|
||||
|
||||
|
||||
@@ -38,13 +38,13 @@ namespace Tnb.WarehouseMgr
|
||||
public async Task<dynamic> CarryStock(CarryStockInput input)
|
||||
{
|
||||
var warehouse_id = "";
|
||||
var carry_id = "";
|
||||
var material_id = "";
|
||||
var carry_code = "";
|
||||
var material_code = "";
|
||||
if (!input.queryJson.IsNullOrWhiteSpace())
|
||||
{
|
||||
warehouse_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.warehouse_id));
|
||||
carry_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.carry_id));
|
||||
material_id = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.material_id));
|
||||
carry_code = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.carry_code));
|
||||
material_code = JObject.Parse(input.queryJson).Value<string>(nameof(WmsCarryCode.material_code));
|
||||
}
|
||||
|
||||
|
||||
@@ -58,8 +58,8 @@ namespace Tnb.WarehouseMgr
|
||||
.Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && a.is_use == "1"
|
||||
&& ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code)))
|
||||
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
|
||||
.WhereIF(!string.IsNullOrEmpty(carry_id), (a, b, c, d) => b.id == carry_id)
|
||||
.WhereIF(!string.IsNullOrEmpty(material_id), (a, b, c, d, e, f) => f.id == material_id)
|
||||
.WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d) => b.carry_code.Contains(carry_code))
|
||||
.WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => f.code.Contains(material_code))
|
||||
.OrderByDescending((a, b, c, d, e, f) => b.carry_code)
|
||||
.Select((a, b, c, d, e, f) => new WmsCarryStockReport
|
||||
{
|
||||
@@ -97,8 +97,8 @@ namespace Tnb.WarehouseMgr
|
||||
.InnerJoin<WmsCarryH>((a, b, c, d, e, f, g, h) => h.id == e.membercarry_id)
|
||||
.Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && a.is_use == "1" && b.carry_status != "0" && b.carry_status != "6")
|
||||
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
|
||||
.WhereIF(!string.IsNullOrEmpty(carry_id), (a, b, c, d, e) => b.id == carry_id || e.membercarry_id == carry_id)
|
||||
.WhereIF(!string.IsNullOrEmpty(material_id), (a, b, c, d, e, f, g) => g.id == material_id)
|
||||
.WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d, e, f, g, h) => b.carry_code.Contains(carry_code)|| h.carry_code.Contains(carry_code))
|
||||
.WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f, g) => g.code.Contains(material_code))
|
||||
.Select((a, b, c, d, e, f, g, h) => new WmsCarryStockReport
|
||||
{
|
||||
warehouse_name = c.whname,
|
||||
|
||||
@@ -67,6 +67,8 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
public static SemaphoreSlim s_taskDistributeToZCC = new(1);
|
||||
public static SemaphoreSlim s_taskDistributeYCL2ZCC = new(1);
|
||||
public static SemaphoreSlim s_taskDistributeZCCToYCL = new(1);
|
||||
|
||||
|
||||
public WmsMaterialTransferService(
|
||||
ISqlSugarRepository<WmsCarryH> repository,
|
||||
@@ -291,7 +293,6 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 按托下发(到集中供料或外协)
|
||||
/// </summary>
|
||||
@@ -439,7 +440,7 @@ namespace Tnb.WarehouseMgr
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost, NonUnify, AllowAnonymous]
|
||||
public async Task<Entities.Dto.Outputs.Result> DistributeYCL2ZCC(MaterialTransferDistributeYCL2ZCCInput input)
|
||||
public async Task<Entities.Dto.Outputs.Result> DistributeYCLToZCC(MaterialTransferDistributeYCL2ZCCInput input)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -936,6 +937,8 @@ namespace Tnb.WarehouseMgr
|
||||
throw Oops.Oh(ErrorCode.COM1001);
|
||||
}
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
|
||||
if (input.area_code == "E")
|
||||
await sign(input);
|
||||
|
||||
@@ -945,6 +948,7 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
}
|
||||
// 其它出库
|
||||
else
|
||||
{
|
||||
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().SingleAsync(x => x.id == wmsMaterialTransferd.bill_id);
|
||||
List<WmsMaterialTransferD> dList = await _db.Queryable<WmsMaterialTransferD>().Where(x => x.bill_id == wmsMaterialTransferd.bill_id).OrderBy(x => x.id).ToListAsync();
|
||||
@@ -1027,16 +1031,12 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Logger.LogError("【WmsMaterialTransferService ModifyAsync】" + ex.Message);
|
||||
Logger.LogError("【WmsMaterialTransferService ModifyAsync】" + ex.StackTrace);
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
//await _db.Ado.RollbackTranAsync();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1100,11 +1100,11 @@ namespace Tnb.WarehouseMgr
|
||||
material_id = wmsMaterialTransferD.material_id,
|
||||
code_batch = wmsMaterialTransferD.code_batch,
|
||||
needOut = needOut,
|
||||
material_code = wmsMaterialTransferD.material_code
|
||||
|
||||
material_code = wmsMaterialTransferD.material_code,
|
||||
endlocations = new string[2] { WmsWareHouseConst.ZZCSSX121009, WmsWareHouseConst.ZZCSSX121010 }
|
||||
};
|
||||
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput);
|
||||
|
||||
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput);
|
||||
|
||||
foreach (var item in carrys)
|
||||
{
|
||||
@@ -1183,6 +1183,144 @@ namespace Tnb.WarehouseMgr
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 中储仓退料到原材料仓
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="AppFriendlyException"></exception>
|
||||
[HttpPost, NonUnify, AllowAnonymous]
|
||||
public async Task<Entities.Dto.Outputs.Result> DistributeZCCToYCL(MaterialTransferDistributeToZCCInput input)
|
||||
{
|
||||
s_taskDistributeZCCToYCL.Wait();
|
||||
|
||||
try
|
||||
{
|
||||
WmsMaterialTransfer wmsMaterialTransfer = _db.Queryable<WmsMaterialTransfer>().Where(r => r.id == input.source_id).First();
|
||||
if (wmsMaterialTransfer == null)
|
||||
{
|
||||
Logger.LogWarning($"不存在id为{input.source_id}的转库单!");
|
||||
throw new AppFriendlyException($"不存在id为{input.source_id}的转库单!", 500);
|
||||
}
|
||||
if (wmsMaterialTransfer.status != WmsWareHouseConst.BILLSTATUS_ADD_ID)
|
||||
{
|
||||
Logger.LogWarning($@"当前转库单状态为{wmsMaterialTransfer.status},不能下发中储仓退料到原材料仓任务!");
|
||||
throw new AppFriendlyException($@"当前转库单状态为{wmsMaterialTransfer.status},不能下发中储仓退料到原材料仓任务!", 500);
|
||||
}
|
||||
|
||||
List<WmsMaterialTransferD> wmsMaterialTransferds = _db.Queryable<WmsMaterialTransferD>().Where(r => r.bill_id == input.source_id).ToList();
|
||||
|
||||
var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new
|
||||
{
|
||||
material_id = r.material_id,
|
||||
code_batch = r.code_batch,
|
||||
}).Distinct();
|
||||
if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count)
|
||||
{
|
||||
Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!");
|
||||
throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500);
|
||||
}
|
||||
|
||||
// 转库单载具子表
|
||||
List<WmsMaterialTransferCarry> wmsMaterialTransferCarrys = new List<WmsMaterialTransferCarry>();
|
||||
|
||||
foreach (WmsMaterialTransferD wmsMaterialTransferD in wmsMaterialTransferds)
|
||||
{
|
||||
// 需要转库数量
|
||||
decimal? needOut = wmsMaterialTransferD.qty;
|
||||
|
||||
//出库取起点,获取所有符合输入的载具规格的载具
|
||||
OutStockStrategyZCC2Floor2Query OutStockStrategyInput = new()
|
||||
{
|
||||
warehouse_id = "2",
|
||||
material_id = wmsMaterialTransferD.material_id,
|
||||
code_batch = wmsMaterialTransferD.code_batch,
|
||||
needOut = needOut,
|
||||
material_code = wmsMaterialTransferD.material_code,
|
||||
endlocations = new string[] {WmsWareHouseConst.ZZCSSX021007 }
|
||||
};
|
||||
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput);
|
||||
|
||||
|
||||
foreach (var item in carrys)
|
||||
{
|
||||
WmsCarryH wmsCarryH = item.Item1;
|
||||
decimal codeqty = item.Item2;
|
||||
BasLocation endlocation_ssx = item.Item3;
|
||||
|
||||
// 转库单载具子表
|
||||
WmsMaterialTransferCarry wmsMaterialTransferCarry = new WmsMaterialTransferCarry();
|
||||
wmsMaterialTransferCarry.bill_id = input.source_id;
|
||||
wmsMaterialTransferCarry.carry_id = wmsCarryH.id;
|
||||
wmsMaterialTransferCarry.carry_code = wmsCarryH.carry_code;
|
||||
wmsMaterialTransferCarry.create_id = input.create_id;
|
||||
wmsMaterialTransferCarry.create_time = DateTime.Now;
|
||||
wmsMaterialTransferCarry.endlocation_id = endlocation_ssx.id;
|
||||
wmsMaterialTransferCarry.endlocation_code = endlocation_ssx.location_code;
|
||||
wmsMaterialTransferCarry.startlocation_id = wmsCarryH.location_id;
|
||||
wmsMaterialTransferCarry.startlocation_code = wmsCarryH.location_code;
|
||||
wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id;
|
||||
wmsMaterialTransferCarry.qty = codeqty;
|
||||
wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry);
|
||||
}
|
||||
}
|
||||
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
await _db.Updateable<WmsMaterialTransfer>().SetColumns(r => new WmsMaterialTransfer
|
||||
{
|
||||
status = WmsWareHouseConst.BILLSTATUS_ON_ID,
|
||||
carry_count = wmsMaterialTransferCarrys.Count,
|
||||
remainbindracknum = wmsMaterialTransferCarrys.Count
|
||||
}).Where(r => r.id == input.source_id).ExecuteCommandAsync();
|
||||
Logger.LogInformation($"【DistributeZCCToYCL】更新转库单{wmsMaterialTransfer.bill_code}主表的数据");
|
||||
|
||||
await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
|
||||
Logger.LogInformation($"【DistributeZCCToYCL】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
|
||||
|
||||
foreach (WmsMaterialTransferCarry wmsMaterialTransferCarry in wmsMaterialTransferCarrys)
|
||||
{
|
||||
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
||||
commonCreatePretaskInput.startlocation_id = wmsMaterialTransferCarry.startlocation_id;
|
||||
commonCreatePretaskInput.endlocation_id = wmsMaterialTransferCarry.endlocation_id;
|
||||
commonCreatePretaskInput.carry_id = wmsMaterialTransferCarry.carry_id;
|
||||
commonCreatePretaskInput.carry_code = wmsMaterialTransferCarry.carry_code;
|
||||
commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID;
|
||||
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
|
||||
commonCreatePretaskInput.source_id = wmsMaterialTransferCarry.mat_bill_id;
|
||||
commonCreatePretaskInput.isExcuteMission = false;
|
||||
|
||||
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
||||
if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
|
||||
{
|
||||
Logger.LogInformation($"【DistributeZCCToYCL生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}");
|
||||
throw new AppFriendlyException($"生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}", 500);
|
||||
}
|
||||
|
||||
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
|
||||
}
|
||||
Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功");
|
||||
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
Logger.LogError("【DistributeZCCToYCL】" + ex.Message);
|
||||
Logger.LogError("【DistributeZCCToYCL】" + ex.StackTrace);
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
s_taskDistributeZCCToYCL.Release();
|
||||
InvokeGenPretaskExcute();
|
||||
}
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 从暂存仓呼叫料架到产线
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user