From a2f9014c0875e9b252b02626f8dd1b428977eb9e Mon Sep 17 00:00:00 2001
From: majian <780924089@qq.com>
Date: Tue, 3 Sep 2024 15:37:06 +0800
Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E6=A2=AF=E9=80=BB=E8=BE=91=E5=8F=98?=
=?UTF-8?q?=E6=9B=B4=20erp=E5=90=8C=E6=AD=A5=E8=B0=83=E6=95=B4=20=E7=94=9F?=
=?UTF-8?q?=E6=88=90=E6=9D=A1=E7=A0=81=E5=8F=98=E6=9B=B4=E7=AD=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Tnb.ProductionMgr/RedisBackGround.cs | 396 +++++++++++++----
.../Consts/WmsWareHouseConst.cs | 13 +
.../Entity/WmsCarryH.cs | 10 +
.../Entity/WmsElevatorcacheArea.cs | 52 +++
.../Entity/WmsOutsourceOrderD.cs | 5 +
.../Entity/WmsTempCode.cs | 8 +
.../IWareHouseService.cs | 5 +-
.../Tnb.WarehouseMgr/BaseWareHouseService.cs | 2 +
.../Tnb.WarehouseMgr/DeviceProviderService.cs | 13 +-
.../Tnb.WarehouseMgr/ErpToWmsService.cs | 416 +++++++++++-------
.../Tnb.WarehouseMgr/WareHouseService.cs | 182 +++++---
.../Tnb.WarehouseMgr/WmsOutsourceService.cs | 7 +-
.../Tnb.WarehouseMgr/WmsPurchaseService.cs | 7 +-
.../WmsRawmatOutstockService.cs | 3 +
.../WmsRawmatTransferinstockService.cs | 7 +-
.../Tnb.WarehouseMgr/WmsSaleReleaseService.cs | 317 ++++++++++++-
.../Configurations/ConnectionStrings.json | 2 +-
17 files changed, 1105 insertions(+), 340 deletions(-)
create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorcacheArea.cs
diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
index bddb2c83..702af71d 100644
--- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
@@ -11,6 +11,7 @@ using System.Text.RegularExpressions;
using System.Threading;
using Aop.Api.Domain;
using Aspose.Cells.Charts;
+using Aspose.Cells.Drawing;
using JNPF;
using JNPF.Common.Cache;
using JNPF.Common.Core.Manager;
@@ -28,6 +29,7 @@ using NetTaste;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Npgsql;
+using NPOI.HPSF;
using NPOI.OpenXmlFormats;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Asn1.X509.Qualified;
@@ -89,15 +91,15 @@ namespace Tnb.ProductionMgr
private static Timer? Floor4DMC2CPKtimer;
// 四楼包材自动到二楼包材库
private static Timer? PackOutstockServicetimer;
- // 检查到电梯任务异常断开后处理
- private Thread? ElevatorTaskExceptionHandleThread;
// 二楼空托盘自动补充到线边
private static Timer? F2KTPsupplementtimer;
// 原材料仓内转移
private static Timer? YCLInternalTransfertimer;
- // 原材料仓内转移
+ // 电梯
private static Timer? elevatorTimer;
+ // 生成AGV到电梯的任务
+ private static Timer? agvelevatorTimer;
public SemaphoreSlim s_taskCheckGet = new(1);
public SemaphoreSlim s_taskScan = new(1);
@@ -116,6 +118,10 @@ namespace Tnb.ProductionMgr
public SemaphoreSlim s_taskFloor4DMC2CPKService = new(1);
public SemaphoreSlim s_taskF2KTPsupplement = new(1);
public SemaphoreSlim s_taskYCLInternalTransfer = new(1);
+ ///
+ /// AGV到电梯任务
+ ///
+ public SemaphoreSlim s_agvElevatortaskDic = new(1);
private StackExRedisHelper _redisData;
@@ -139,6 +145,8 @@ namespace Tnb.ProductionMgr
private ISqlSugarClient db_Floor4DMC2CPK;
private ISqlSugarClient db_F2KTPsupplement;
private ISqlSugarClient db_YCLInternalTransfer;
+ private ISqlSugarClient db_agvElevatorTaskExceptionHandles;
+
private readonly IWmsPDAScanInStockService _wmsPDAScanInStock;
@@ -196,6 +204,7 @@ namespace Tnb.ProductionMgr
db_Floor4DMC2CPK = repository.CopyNew();
db_F2KTPsupplement = repository.CopyNew();
db_YCLInternalTransfer = repository.CopyNew();
+ db_agvElevatorTaskExceptionHandles = repository.CopyNew();
List elevatorAreas = repository.CopyNew().Queryable().Select(r => r.area_code).Distinct().ToList();
foreach (var s_elevatorArea in elevatorAreas)
@@ -317,69 +326,69 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
#region 弃用
- //获取redis数据
- private async void GetRedisData(object? state)
- {
- var _redisReadConfigs = _repository.AsQueryable().Where(p => p.enabled == 1).ToList();
- foreach (var config in _redisReadConfigs)
- {
- try
- {
- var json = await _redisData.GetHash(config.dev_name!, config.tag_name!);
- if (json == null)
- {
- continue;
- }
- JObject? res = JsonConvert.DeserializeObject(json);
- if (config.data_type == (int)DataType.INT)
- {
- if (config.check_type == (int)CheckType.相等)
- {
- if (res.Value("Value") == int.Parse(config.data!))
- {
- InstockInput instockInput = new()
- {
- equip_code = res["DevName"]!.ToString(),
- label_code = res["TagName"]!.ToString()
- };
- TriggerEvent((EventType)config.event_type, instockInput);
- }
- }
- else if (config.check_type == (int)CheckType.包含)
- {
- int[] ints = Array.ConvertAll(config.data!.Replace("[", "").Replace("]", "").Split(",", StringSplitOptions.RemoveEmptyEntries), int.Parse);
- if (ints.Contains(res.Value("Value")))
- {
- InstockInput instockInput = new()
- {
- equip_code = res["DevName"]!.ToString(),
- label_code = res["TagName"]!.ToString()
- };
- TriggerEvent((EventType)config.event_type, instockInput);
- }
- }
- }
- else if (config.data_type == (int)DataType.BOOL)
- {
- if (config.check_type == (int)CheckType.相等)
- {
- if (res.Value("Value") == bool.Parse(config.data!))
- {
- InstockInput instockInput = new()
- {
- equip_code = res["DevName"]!.ToString(),
- label_code = res["TagName"]!.ToString()
- };
- TriggerEvent((EventType)config.event_type, instockInput);
- }
- }
- }
- }
- catch (Exception)
- {
- }
- }
- }
+ ////获取redis数据
+ //private async void GetRedisData(object? state)
+ //{
+ // var _redisReadConfigs = _repository.AsQueryable().Where(p => p.enabled == 1).ToList();
+ // foreach (var config in _redisReadConfigs)
+ // {
+ // try
+ // {
+ // var json = await _redisData.GetHash(config.dev_name!, config.tag_name!);
+ // if (json == null)
+ // {
+ // continue;
+ // }
+ // JObject? res = JsonConvert.DeserializeObject(json);
+ // if (config.data_type == (int)DataType.INT)
+ // {
+ // if (config.check_type == (int)CheckType.相等)
+ // {
+ // if (res.Value("Value") == int.Parse(config.data!))
+ // {
+ // InstockInput instockInput = new()
+ // {
+ // equip_code = res["DevName"]!.ToString(),
+ // label_code = res["TagName"]!.ToString()
+ // };
+ // TriggerEvent((EventType)config.event_type, instockInput);
+ // }
+ // }
+ // else if (config.check_type == (int)CheckType.包含)
+ // {
+ // int[] ints = Array.ConvertAll(config.data!.Replace("[", "").Replace("]", "").Split(",", StringSplitOptions.RemoveEmptyEntries), int.Parse);
+ // if (ints.Contains(res.Value("Value")))
+ // {
+ // InstockInput instockInput = new()
+ // {
+ // equip_code = res["DevName"]!.ToString(),
+ // label_code = res["TagName"]!.ToString()
+ // };
+ // TriggerEvent((EventType)config.event_type, instockInput);
+ // }
+ // }
+ // }
+ // else if (config.data_type == (int)DataType.BOOL)
+ // {
+ // if (config.check_type == (int)CheckType.相等)
+ // {
+ // if (res.Value("Value") == bool.Parse(config.data!))
+ // {
+ // InstockInput instockInput = new()
+ // {
+ // equip_code = res["DevName"]!.ToString(),
+ // label_code = res["TagName"]!.ToString()
+ // };
+ // TriggerEvent((EventType)config.event_type, instockInput);
+ // }
+ // }
+ // }
+ // }
+ // catch (Exception)
+ // {
+ // }
+ // }
+ //}
private void TriggerEvent(EventType eventType, InstockInput instockInput)
{
switch (eventType)
@@ -1922,7 +1931,10 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
// }
//}
-
+ ///
+ /// 生成电梯任务
+ ///
+ ///
async void ElevatorTaskExceptionHandle(object args)
{
Task[] taskActions = new Task[_wareHouseService.s_elevatortaskDic.Count];
@@ -1966,15 +1978,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}");
var e = await _wareHouseService.FindElevatorFromPars(q);
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
-
- // 存在叉车已放货完成电梯任务还没生成的情况,这种情况等待完成
- WmsElevatorH wmsElevator = await db_ElevatorTaskExceptionHandle.Queryable().Where(r => r.elevator_id == e.device_id).FirstAsync();
- if (wmsElevator.carry_count != elevatorTasks.Count)
- {
- throw new Exception($"电梯{e.elevator_code}内放货托盘为{wmsElevator.carry_count}托,已生成的电梯任务为{elevatorTasks.Count},需要等待电梯任务生成");
- }
-
-
+
// 三、四号梯发货带两托货
string[] doubleCarryRunElevators =
{
@@ -1982,6 +1986,13 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
};
if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1)
{
+ // 存在叉车已放货完成电梯任务还没生成的情况,这种情况等待完成
+ WmsElevatorH wmsElevator = await db_ElevatorTaskExceptionHandle.Queryable().Where(r => r.elevator_id == e.device_id).FirstAsync();
+ if (wmsElevator.carry_count != elevatorTasks.Count)
+ {
+ throw new Exception($"电梯{e.elevator_code}内放货托盘为{wmsElevator.carry_count}托,已生成的电梯任务为{elevatorTasks.Count},需要等待电梯任务生成");
+ }
+
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】判断为三四号梯任务");
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】现在{e.elevator_code}有{group.Count()}托货");
// 电梯内放置两托货呼叫电梯下
@@ -2065,6 +2076,201 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
Task.WaitAll(taskActions);
}
+ ///
+ /// 电梯第三次改动 生成Agv到电梯任务
+ ///
+ ///
+ async void AgvelevatorTimerTaskExceptionHandle(object args)
+ {
+ if (s_agvElevatortaskDic.CurrentCount == 0)
+ return;
+ await s_agvElevatortaskDic.WaitAsync();
+
+ try
+ {
+ // 获取暂存区需要生成任务的库位
+ List agvElevatorStartLocs = await db_agvElevatorTaskExceptionHandles.Queryable()
+ .Where(r => r.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && r.is_use == "1" && r.is_lock == 0).ToListAsync();
+
+ if (agvElevatorStartLocs.Count > 0)
+ {
+ LoggerAgvElevatorTask.Information($"【AgvelevatorTimerTaskExceptionHandle】检查到需要下发到一楼任务的暂存区库位{agvElevatorStartLocs.Count}条 {string.Join(',', agvElevatorStartLocs.Select(x => x.location_code))}");
+
+ List> elevatorTaskGroup = agvElevatorStartLocs.GroupBy(r => r.region_id).ToList();
+ foreach (IGrouping group in elevatorTaskGroup)
+ {
+ // 选一楼出货库位
+ List outLocations = await db_agvElevatorTaskExceptionHandles.Queryable()
+ .Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0")
+ .OrderBy("task_nums, location_code").ToListAsync();
+
+ if (outLocations.Count == 0)
+ {
+ LoggerAgvElevatorTask.LogWarning($"一楼没有可用的出货库位");
+ continue;
+ }
+ BasLocation outLocation = outLocations.FirstOrDefault();
+ WmsPointH outPoint = await db_agvElevatorTaskExceptionHandles.Queryable().FirstAsync(it => it.location_id == outLocation.id);
+
+ List locs = group.ToList();
+ LoggerAgvElevatorTask.LogWarning($"即将下发{locs.Count}条任务");
+ for (int i = 0; i < locs.Count; i++)
+ {
+ // 交替选择缓存区库位
+ var YCLInnerTransfer = await db_agvElevatorTaskExceptionHandles.Queryable().Where(p => p.key == "floor3CurOutCacheLocation").FirstAsync();
+
+ if (YCLInnerTransfer.value == null || (YCLInnerTransfer.value != "3楼发货左" && YCLInnerTransfer.value != "3楼发货右"))
+ {
+ throw new AppFriendlyException($"工厂配置->三楼出库暂存区当前出库分区 项配置错误!需要配置值为【3楼发货左】或【3楼发货右】", 500);
+ }
+
+ BasLocation startloc = null;
+ if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
+ {
+ List locations = await db_agvElevatorTaskExceptionHandles.Queryable()
+ .InnerJoin((a, b) => a.id == b.location_id)
+ .Where((a, b) => b.name == YCLInnerTransfer.value).OrderBy("a.location_code,a.is_lock,a.is_use,task_nums").ToListAsync();
+ startloc = locations.FirstOrDefault();
+ }
+ List wmsCarryHs = await db_agvElevatorTaskExceptionHandles.Queryable().Where(r => r.location_id == startloc.id).ToListAsync();
+ if (wmsCarryHs.Count > 1)
+ {
+ LoggerAgvElevatorTask.LogWarning($"暂存区库位{startloc.location_code}上存在多个托盘{string.Join(',', wmsCarryHs.Select(x => x.carry_code))}");
+ continue;
+ }
+ if (wmsCarryHs.Count == 1)
+ {
+ LoggerAgvElevatorTask.LogWarning($"暂存区库位{startloc.location_code}上不存在托盘");
+ continue;
+ }
+ WmsCarryH wmsCarryH = wmsCarryHs.FirstOrDefault();
+
+ WmsElevatorH wmsElevatorH = null;
+ // 选电梯
+ if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
+ {
+ List wmsElevatorHs = await db_agvElevatorTaskExceptionHandles.Queryable().Where(r => r.elevator_group == "2" && r.enabled == 1).ToListAsync();
+
+ foreach (WmsElevatorH _wmsElevatorH in wmsElevatorHs)
+ {
+ // 加上暂存区到电梯的任务数
+ List wmsPretaskHs = await db_agvElevatorTaskExceptionHandles.Queryable()
+ .Where(r => r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID || r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.startlocation_id == startloc.id).ToListAsync();
+
+ _wmsElevatorH.carry_count += wmsPretaskHs.Count;
+ }
+
+ wmsElevatorH = wmsElevatorHs.OrderBy(r => r.carry_count).FirstOrDefault();
+ }
+
+ string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
+
+ List wmsPointHs = await db_agvElevatorTaskExceptionHandles.Queryable().Where(it => it.status == 1).ToListAsync();
+ List points = new List();
+
+ // 到电梯
+ WmsPointH cacheOut_point = wmsPointHs.Where(r => r.location_code == startloc.location_code).First().Copy();
+ WmsPointH DT_C_point = wmsPointHs.Where(r => r.point_code == $"DT-C-03-0{elevatorSno}").First().Copy();
+ cacheOut_point.area_code = "FC";
+ DT_C_point.area_code = "FC";
+
+ points.Add(cacheOut_point);
+ points.Add(DT_C_point);
+ // 到一楼
+ points.Add(wmsPointHs.Where(r => r.point_code == $"DT-3-{elevatorSno}").First());
+ points.Add(wmsPointHs.Where(r => r.point_code == $"DT-1-{elevatorSno}").First());
+ points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-01-0{elevatorSno}").First());
+ points.Add(outPoint);
+
+ //根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序)
+ if (points?.Count > 0)
+ {
+ List preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
+ {
+ WmsPointH? sPoint = it.FirstOrDefault();
+ WmsPointH? ePoint = it.LastOrDefault();
+
+ WmsPretaskH preTask = new()
+ {
+ org_id = _userManager!.User.OrganizeId,
+ startlocation_id = sPoint?.location_id!,
+ startlocation_code = sPoint?.location_code!,
+ endlocation_id = ePoint?.location_id!,
+ endlocation_code = ePoint?.location_code!,
+ start_floor = sPoint?.floor.ToString(),
+ end_floor = ePoint?.floor.ToString(),
+ startpoint_id = sPoint?.id!,
+ startpoint_code = sPoint?.point_code!,
+ endpoint_id = ePoint?.id!,
+ endpoint_code = ePoint?.point_code!,
+ bill_code = _billRullService!.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult(),
+ status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID,
+ biz_type = wmsCarryH.biz_type,
+ task_type = WmsWareHouseConst.WMS_PRETASK_TRANSFER_TYPE_ID
+ };
+ preTask.carry_id = wmsCarryH.id;
+ preTask.carry_code = wmsCarryH.carry_code;
+ preTask.area_id = sPoint?.area_id!;
+ preTask.area_code = it.Key;
+ // 载具记录 require_id todo
+ preTask.require_id = wmsCarryH.require_id;
+ preTask.require_code = "";
+ preTask.create_id = _userManager.UserId;
+ preTask.create_time = DateTime.Now;
+ return preTask;
+ }).ToList();
+ bool isOk = await _wareHouseService.GenPreTask(preTasks, null!, db_agvElevatorTaskExceptionHandles);
+ if (isOk)
+ {
+ //查询库位表
+ BasLocation location = await db_agvElevatorTaskExceptionHandles.Queryable().SingleAsync(it => it.id == startloc.id);
+ {
+ //载具加锁,增加库位信息
+ _ = await db_agvElevatorTaskExceptionHandles.Updateable().SetColumns(it => new WmsCarryH
+ {
+ carry_status = ((int)EnumCarryStatus.占用).ToString(),
+ is_lock = 1,
+ location_id = startloc.id,
+ location_code = location.location_code
+ }).Where(it => it.id == wmsCarryH.id).ExecuteCommandAsync();
+ }
+
+ await db_agvElevatorTaskExceptionHandles.Updateable().SetColumns(r => r.value == (YCLInnerTransfer.value == "3楼发货左" ? "3楼发货右" : "3楼发货左"))
+ .Where(r => r.key == "floor3CurOutCacheLocation").ExecuteCommandAsync();
+
+ //所有库位加锁
+ string?[] ids = new[] { startloc.id, preTasks[0].endlocation_id, outLocation.id };
+ _ = await db_agvElevatorTaskExceptionHandles.Updateable().SetColumns(it => new BasLocation { is_lock = 1 }).Where(it => ids.Contains(it.id)).ExecuteCommandAsync();
+ }
+ else
+ {
+ throw new Exception("预任务生成失败");
+ }
+ }
+ }
+ }
+ }
+ }
+ catch (ObjectDisposedException ex)
+ {
+ LoggerAgvElevatorTask.LogWarning($"【AgvelevatorTimerTaskExceptionHandle】 数据库连接异常:{ex.Message}");
+ LoggerAgvElevatorTask.LogWarning($"【AgvelevatorTimerTaskExceptionHandle】 数据库连接异常:{ex.StackTrace}");
+ if (ex.Source == "Npgsql")
+ db_agvElevatorTaskExceptionHandles = _repository.AsSugarClient().CopyNew();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("【AgvelevatorTimerTaskExceptionHandle】" + ex.Message);
+ LoggerAgvElevatorTask.LogError($"【AgvelevatorTimerTaskExceptionHandle】 {ex.Message}");
+ LoggerAgvElevatorTask.LogError($"【AgvelevatorTimerTaskExceptionHandle】 {ex.StackTrace}");
+ // 数据库连接断开时会报错
+ try { await db_agvElevatorTaskExceptionHandles.Ado.RollbackTranAsync(); } catch { };
+ }
+ finally
+ {
+ s_agvElevatortaskDic.Release();
+ }
+ }
#region 内存测试
@@ -2695,6 +2901,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(185));
elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20));
+ //agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20));
+
return Task.CompletedTask;
}
@@ -2724,10 +2932,11 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
Floor4DMJ2MJXtimer?.Dispose();
Floor4MJX2MJCtimer?.Dispose();
Floor4DMC2CPKtimer?.Dispose();
- ElevatorTaskExceptionHandleThread.Abort();
F2KTPsupplementtimer?.Dispose();
YCLInternalTransfertimer?.Dispose();
elevatorTimer?.Dispose();
+ agvelevatorTimer?.Dispose();
+
}
#region 日志
@@ -2775,6 +2984,39 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}
}
+ protected string _LoggerAgvElevatorTaskFileName = "";
+ protected ILogger _LoggerAgvElevatorTask;
+ protected ILogger LoggerAgvElevatorTask
+ {
+ get
+ {
+ string newFileName = $"{AppContext.BaseDirectory}/logs/{DateTime.Now:yyyyMMdd}/custom{DateTime.Now:yyyyMMdd}AgvElevatorTask.log";
+ if (_LoggerAgvElevatorTaskFileName != 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();
+ };
+
+ }));
+ _LoggerAgvElevatorTask = loggerFactory.CreateLogger(this.GetType());
+ _LoggerAgvElevatorTaskFileName = newFileName;
+ }
+ return _LoggerAgvElevatorTask;
+ }
+ }
protected string _LoggerSSXFileName = "";
protected ILogger _LoggerSSX;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
index d64cc9ad..74f11399 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
@@ -542,6 +542,19 @@
/// 一楼外协三工位库位
///
public const string Floor1WXSGWOutstockStation3 = "35704230368021";
+
+ ///
+ /// 原材料出库到月台库位
+ ///
+ public const string Floor1OutstockStation1 = "30773146852471";
+ ///
+ /// 原材料出库到月台库位
+ ///
+ public const string Floor1OutstockStation2 = "30773146852472";
+ ///
+ /// 原材料出库到月台库位
+ ///
+ public const string Floor1OutstockStation3 = "30773146852473";
///
/// 分拣任务生成Encode
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
index d31c6527..73236626 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
@@ -149,4 +149,14 @@ public partial class WmsCarryH : BaseEntity
/// 转库单ID
///
public string? material_tranfer_billid { get; set; }
+
+ ///
+ /// 业务类型(电梯)
+ ///
+ public string? biz_type { get; set; }
+
+ ///
+ /// 需求单据(电梯)
+ ///
+ public string? require_id { get; set; }
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorcacheArea.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorcacheArea.cs
new file mode 100644
index 00000000..f2c6ad18
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorcacheArea.cs
@@ -0,0 +1,52 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.WarehouseMgr.Entities.Entity;
+
+///
+/// 电梯缓存分区配置表
+///
+[SugarTable("wms_elevatorcache_area")]
+public partial class WmsElevatorcacheArea : BaseEntity
+{
+ public WmsElevatorcacheArea()
+ {
+ id = SnowflakeIdHelper.NextId();
+ }
+ ///
+ /// 创建用户
+ ///
+ public string? create_id { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? create_time { get; set; }
+
+ ///
+ /// 修改用户
+ ///
+ public string? modify_id { get; set; }
+
+ ///
+ /// 修改时间
+ ///
+ public DateTime? modify_time { get; set; }
+
+ ///
+ /// 区域
+ ///
+ public string? name { get; set; }
+
+ ///
+ /// 库位id
+ ///
+ public string? location_id { get; set; }
+
+ ///
+ /// 库位编码
+ ///
+ public string? location_code { get; set; }
+
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs
index bb20b1b3..97a27097 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs
@@ -39,6 +39,11 @@ public partial class WmsOutsourceOrderD : BaseEntity
///
public string? unit { get; set; }
+ ///
+ /// 单位id
+ ///
+ public string? unit_id { get; set; }
+
///
/// 委外数量
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTempCode.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTempCode.cs
index ee0fdd64..7161d90f 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTempCode.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTempCode.cs
@@ -115,5 +115,13 @@ public partial class WmsTempCode : BaseEntity
/// 需求单据类型
///
public string? required_type { get; set; }
+ ///
+ /// 物料名称
+ ///
+ public string? material_name { get; set; }
+ ///
+ /// 供应商
+ ///
+ public string? supplier_name { get; set; }
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs
index 65cf2718..07d7b3eb 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs
@@ -34,7 +34,7 @@ namespace Tnb.WarehouseMgr.Interfaces
SemaphoreSlim s_taskExecuteSemaphore_F2ZCCOutstock { get; }
SemaphoreSlim _s_GenTaskExecute { get; }
-
+ //电梯任务
Dictionary s_elevatortaskDic
{
get;
@@ -44,13 +44,12 @@ namespace Tnb.WarehouseMgr.Interfaces
get;
}
///
- /// WCS请求
+ /// 电梯任务WCS请求
///
public Dictionary s_elevatortaskWCSRequestDic
{
get;
}
-
///
/// 获取锁
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
index 5ec54823..f2d2d23a 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
@@ -107,6 +107,8 @@ namespace Tnb.WarehouseMgr
public static Dictionary _s_elevatortaskWCSRequestDic = new();
public static List _db_ElevatorTaskExceptionHandles = new();
+
+
public static SemaphoreSlim s_GenTaskExecute = new(1);
protected IEventPublisher? EventPublisher { set; get; }
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
index 551cc005..7d560705 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
@@ -415,10 +415,12 @@ namespace Tnb.WarehouseMgr
}
// 如果还未判定几托下,判断是否放了两托货
- elevatorTasks = _db.Queryable()
- .Where(r => r.startlocation_code == $"DT-3-{sno}" && r.endlocation_code == $"DT-1-{sno}" && r.act_start_date == null && r.act_end_date == null
- && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
- if (elevatorTasks.Count >= 2)
+ // elevatorTasks = _db.Queryable()
+ //.Where(r => r.startlocation_code == $"DT-3-{sno}" && r.endlocation_code == $"DT-1-{sno}" && r.act_start_date == null && r.act_end_date == null
+ //&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList();
+
+ // 电梯第三次改动
+ if (elevator.carry_count >= 2)
{
Logger.LogInformation($"电梯内{devName}已有两托货!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"电梯内{devName}已有两托货!");
@@ -946,7 +948,8 @@ namespace Tnb.WarehouseMgr
await _db.Updateable().SetColumns(r => new WmsElevatorH
{
is_use = (int)EnumElevatorUseStatus.空闲,
- use_tasks = ""
+ use_tasks = "",
+ carry_count = 0
})
.Where(it => it.elevator_id == wmsElevatorH.elevator_id).ExecuteCommandAsync();
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs
index 97f466c4..a5d49be8 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs
@@ -338,25 +338,44 @@ namespace Tnb.WarehouseMgr
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 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();
- }
- }
WmsPurchaseOrderH wmsPurchaseOrderH = new WmsPurchaseOrderH();
string Code = await _billRuleService.GetBillNumber("Purchase");
@@ -389,7 +408,7 @@ namespace Tnb.WarehouseMgr
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) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
+ 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;
@@ -428,23 +447,6 @@ namespace Tnb.WarehouseMgr
if (details_return.Count > 0)
{
- // 判断是否为重复传输的采购退料订单
- 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();
- }
- }
WmsPurchaseReturnH wmsPurchaseReturnH = new WmsPurchaseReturnH();
string Code = await _billRuleService.GetBillNumber("WmsPurchaseReturn");
@@ -478,7 +480,7 @@ namespace Tnb.WarehouseMgr
wmsPurchaseReturnD.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();
+ 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;
@@ -569,7 +571,7 @@ namespace Tnb.WarehouseMgr
await db.Ado.BeginTranAsync();
// 判断是否为重复传输
- WmsOutsourceOrderH wmsOutsourceOrderHRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
+ WmsOutsourceOrderH wmsOutsourceOrderHRep = await db.Queryable().Where(r => r.erp_bill_code == input.outsource_order).FirstAsync();
if (wmsOutsourceOrderHRep != null)
{
// 判断是否已经下发
@@ -620,6 +622,7 @@ namespace Tnb.WarehouseMgr
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)
{
+ wmsOutsourceOrderD.unit_id = erpExtendField.Id;
wmsOutsourceOrderD.unit = erpExtendField.EnCode;
}
else
@@ -776,7 +779,7 @@ namespace Tnb.WarehouseMgr
await db.Ado.BeginTranAsync();
// 判断是否重复传输
- WmsMaterialTransfer wmsMaterialTransferRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
+ WmsMaterialTransfer wmsMaterialTransferRep = await db.Queryable().Where(r => r.erp_bill_code == input.bill_code).FirstAsync();
if (wmsMaterialTransferRep != null)
{
// 判断单据是否已经下发
@@ -1142,30 +1145,66 @@ namespace Tnb.WarehouseMgr
// 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 wmsRawmatTransferinstockHRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).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();
- }
- }
-
WmsRawmatTransferinstockH wmsRawmatTransferinstockH = new WmsRawmatTransferinstockH();
Code = await _billRuleService.GetBillNumber("WmsRawMatTransferInstock");
@@ -1239,25 +1278,6 @@ namespace Tnb.WarehouseMgr
}
case WmsWareHouseConst.WAREHOUSE_CP_ID:
{
- // 判断是否重复传输
- WmsTransferInstockH wmsTransferInstockHRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).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();
- }
- }
-
WmsTransferInstockH wmsTransferInstockH = new WmsTransferInstockH();
Code = await _billRuleService.GetBillNumber("transferInstock");
@@ -1329,95 +1349,144 @@ namespace Tnb.WarehouseMgr
}
case WmsWareHouseConst.WAREHOUSE_JXK_ID:
{
- // 判断是否重复传输
- WmsPackInstockH wmsPackInstockHRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).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();
- }
- }
+ WmsTransferInstockH wmsTransferInstockH = new WmsTransferInstockH();
+ Code = await _billRuleService.GetBillNumber("transferInstock");
- WmsPackInstockH wmsPackInstockH = new WmsPackInstockH();
- Code = await _billRuleService.GetBillNumber("WMSPACKINSTOCK");
-
- wmsPackInstockH.bill_code = Code;
- wmsPackInstockH.erp_bill_code = input.transfer_order;
+ 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)
{
- wmsPackInstockH.outstockorg_id = org_erpExtendField.pk_org_v;
- wmsPackInstockH.outstockorg_code = org_erpExtendField.pk_org;
+ 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);
}
- 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();
+ 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 wmsPackInstockDs = new List();
+ List wmsTransferInstockDs = new List();
foreach (var detail in input.details)
{
- WmsPackInstockD wmsPackInstockD = new WmsPackInstockD();
+ WmsTransferInstockD wmsTransferInstockD = new WmsTransferInstockD();
- wmsPackInstockD.bill_id = wmsPackInstockH.id;
- wmsPackInstockD.material_code = detail.material_code;
+ 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)
{
- wmsPackInstockD.unit_id = erpExtendField.Id;
- wmsPackInstockD.unit_code = erpExtendField.EnCode;
+ 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);
}
- 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;
+ 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)
{
- wmsPackInstockD.material_id = material.id;
- wmsPackInstockD.material_code = material.code;
- wmsPackInstockD.material_desc = material.material_specification;
+ wmsTransferInstockD.material_id = material.id;
+ wmsTransferInstockD.material_code = material.code;
+ wmsTransferInstockD.material_desc = material.material_specification;
}
- wmsPackInstockDs.Add(wmsPackInstockD);
+ wmsTransferInstockDs.Add(wmsTransferInstockD);
}
- await db.Insertable(wmsPackInstockDs).ExecuteCommandAsync();
+ 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;
}
}
-
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【TransferOutstock】成功生成单据:{Code}");
@@ -1473,6 +1542,16 @@ namespace Tnb.WarehouseMgr
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");
@@ -1581,27 +1660,47 @@ namespace Tnb.WarehouseMgr
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 wmsRawmatTransferoutstockHRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).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();
- }
- }
WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = new WmsRawmatTransferoutstockH();
string code = await _billRuleService.GetBillNumber("RawmatTransferoutstock");
@@ -1663,25 +1762,6 @@ namespace Tnb.WarehouseMgr
}
if(details_WAREHOUSE_CP_ID.Count > 0)
{
- // 判断是否重复传输
- WmsTransferOutstockH wmsTransferOutstockHRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).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();
- }
- }
-
WmsTransferOutstockH wmsTransferOutstockH = new WmsTransferOutstockH();
string code = await _billRuleService.GetBillNumber("WmsTransferOutstock");
wmsTransferOutstockH.erp_bill_code = input.transfer_order;
@@ -1794,7 +1874,7 @@ namespace Tnb.WarehouseMgr
await db.Ado.BeginTranAsync();
// 判断是否重复传输
- WmsRawmatOutstockH wmsRawmatOutstockHRep = await db.Queryable().Where(r => r.erp_pk == input.erp_pk).FirstAsync();
+ WmsRawmatOutstockH wmsRawmatOutstockHRep = await db.Queryable().Where(r => r.erp_bill_code == input.outstock_order).FirstAsync();
if (wmsRawmatOutstockHRep != null)
{
// 判断单据是否已经下发
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index 9e503a7f..f7354a63 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -147,7 +147,6 @@ namespace Tnb.WarehouseMgr
}
-
public WareHouseService(ISqlSugarRepository repository, IDictionaryDataService dictionaryDataService, StackExRedisHelper redisData,
IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService,
IWmsCarryBindService wmsCarryBindService,
@@ -421,8 +420,8 @@ namespace Tnb.WarehouseMgr
///
public string[] GetFloor1YCLDBOutstockLocation()
{
- return new string[5] { WmsWareHouseConst.Floor1GLSGWOutstockStation1 , WmsWareHouseConst.Floor1GLSGWOutstockStation2
- , WmsWareHouseConst.Floor1GLSGWOutstockStation3, WmsWareHouseConst.Floor1GLSGWOutstockStation4, WmsWareHouseConst.Floor1GLSGWOutstockStation5 };
+ return new string[3] { WmsWareHouseConst.Floor1OutstockStation1 , WmsWareHouseConst.Floor1OutstockStation2
+ , WmsWareHouseConst.Floor1OutstockStation3 };
}
@@ -1462,6 +1461,21 @@ namespace Tnb.WarehouseMgr
.ToList();
#region 三楼三四号梯如果与判断一托下有冲突
+
+ #region 电梯第三次改动
+ // 到暂存区的未完成任务
+ List wmsdistasks_agvElevator = await _db.Queryable()
+ .InnerJoin((a, b) => a.endlocation_id == b.id)
+ .Where((a, b) => a.status != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID && a.status != WmsWareHouseConst.BILLSTATUS_CANCEL_ID
+ && b.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID)
+ .ToListAsync();
+ // 过滤同目标库位的正在执行的预任务
+ agvElevatorTasks = agvElevatorTasks.Where(r => !wmsdistasks_agvElevator.Select(a => a.endlocation_id).Contains(r.endlocation_id)).ToList();
+ // 过滤重复目标库位的预任务
+ agvElevatorTasks = agvElevatorTasks.OrderBy(r => r.endlocation_code).GroupBy(r => r.endlocation_code).Select(r => { return r.ToList()[0]; }).ToList();
+ #endregion
+
+
if (s_elevatortaskWCSRequestDic.Count > 0)
{
for (int index_agvElevatorTasks = 0; index_agvElevatorTasks < agvElevatorTasks.Count; index_agvElevatorTasks++)
@@ -1498,6 +1512,7 @@ namespace Tnb.WarehouseMgr
#endregion
+
var elePreTasks = preTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
var normalPreTasks = preTasks.Where(it => it.area_code != "B" && !agvElevatorTasks.Concat(elePreTasks).Select(x => x.endlocation_code).Contains(it.endlocation_code)).ToList();
@@ -2409,9 +2424,8 @@ namespace Tnb.WarehouseMgr
{
checkRunDoor++;
tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
- Logger.Information($"{devName.Match(@"\d+")}#梯 sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}");
+ Logger.Information($"第{checkRunDoor}次 {devName.Match(@"\d+")}#梯 sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层{floor}");
- Logger.Information($"第{checkCloseDoor}次 {devName.Match(@"\d+")}#梯 当前门状态:{doorStatus}");
// 180次后重试
if (checkRunDoor >= 180)
{
@@ -2420,7 +2434,7 @@ namespace Tnb.WarehouseMgr
await Task.Delay(1000);
} while (tuple.sysStatus != 3 || tuple.runStatus != 0 || floor != tuple.floorNo);
- Logger.Information($"结束判断 {devName.Match(@"\d+")}#梯 sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}");
+ Logger.Information($"第{checkRunDoor}次 结束判断 {devName.Match(@"\d+")}#梯 sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}");
if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯)
{
@@ -2557,6 +2571,18 @@ namespace Tnb.WarehouseMgr
{
try
{
+ List disTasks = await _db.Queryable().Where(a => input.disTaskIds.Contains(a.id)).ToListAsync();
+ foreach (WmsDistaskH wmsDistaskH in disTasks)
+ {
+ WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.location_id == wmsDistaskH.startlocation_id
+ && r.carry_code != wmsDistaskH.carry_code).FirstAsync();
+ BasLocation startlocation = await _db.Queryable().Where(r => r.location_code == wmsDistaskH.startlocation_code).FirstAsync();
+ if (wmsCarryH != null && startlocation.is_type == ((int)(EnumLocationType.存储库位)).ToString())
+ {
+ throw Oops.Bah($"任务单{wmsDistaskH.bill_code}的起点库位{wmsDistaskH.startlocation_code}是存储库位,且已被载具{wmsCarryH.carry_code}占用!");
+ }
+ }
+
await _db.Ado.BeginTranAsync();
//更任务执行
@@ -2642,11 +2668,28 @@ namespace Tnb.WarehouseMgr
}
}
+ [HttpPost]
+ public async Task TaskComplate(TaskCompleUpInput input)
+ {
+ List disTasks = await _db.Queryable().Where(a => input.disTaskIds.Contains(a.id)).ToListAsync();
+ foreach (WmsDistaskH wmsDistaskH in disTasks)
+ {
+ WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.location_id == wmsDistaskH.endlocation_id && r.carry_code != wmsDistaskH.carry_code).FirstAsync();
+ BasLocation endlocation = await _db.Queryable().Where(r => r.location_code == wmsDistaskH.endlocation_code).FirstAsync();
+ if (wmsCarryH != null && endlocation.is_type == ((int)(EnumLocationType.存储库位)).ToString())
+ {
+ throw Oops.Bah($"任务单{wmsDistaskH.bill_code}的终点库位{wmsDistaskH.endlocation_code}是存储库位,且已被载具{wmsCarryH.carry_code}占用!");
+ }
+ }
+
+ await TaskComplate(input, _db);
+ }
+
///
/// 任务完成
///
///
- [HttpPost]
+ [NonAction]
public async Task TaskComplate(TaskCompleUpInput input, ISqlSugarClient dbConn = null)
{
var db = dbConn;
@@ -3152,67 +3195,68 @@ namespace Tnb.WarehouseMgr
BasLocation endlocation = await _db.Queryable().InnerJoin((a, b) => a.id == b.location_id).Where((a, b) => b.id == pEndId).FirstAsync();
// 后续可整理成配置表
- // 3-1
- if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID)
- {
- WmsElevatorH wmsElevatorH = await _db.Queryable().Where(it => it.elevator_group == "2" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();
- string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
+ #region 第二次改动弃用
+ //if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID)
+ //{
+ // WmsElevatorH wmsElevatorH = await _db.Queryable().Where(it => it.elevator_group == "2" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();
+ // string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
- List locations = await _db.Queryable()
- .InnerJoin((a, b) => a.id == b.location_id)
- .InnerJoin((a, b, c) => b.id == c.point_id)
- .InnerJoin((a, b, c, d) => d.id == c.endpoint_id)
- .Where((a, b, c, d) => a.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID
- && a.is_lock == 0 && a.is_use == "0"
- && a.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && d.point_code == $"DT-3-{elevatorSno}")
- .Select((a, b, c, d) => new BasLocation
- {
- location_code = a.location_code,
- extras = d.point_code
- }).OrderBy("a.location_code, d.point_code").ToListAsync();
- // 如果没有空闲库位 再找一下另一个电梯的缓存区有没有空闲库位
- if (locations.Count == 0)
- {
- elevatorSno = elevatorSno == "3" ? "4" : "3";
- locations = await _db.Queryable()
- .InnerJoin((a, b) => a.id == b.location_id)
- .InnerJoin((a, b, c) => b.id == c.point_id)
- .InnerJoin((a, b, c, d) => d.id == c.endpoint_id)
- .Where((a, b, c, d) => a.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID
- && a.is_lock == 0 && a.is_use == "0"
- && a.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && d.point_code == $"DT-3-{elevatorSno}")
- .Select((a, b, c, d) => new BasLocation
- {
- location_code = a.location_code,
- extras = d.point_code
- }).OrderBy("a.location_code, d.point_code").ToListAsync();
- }
+ // List locations = await _db.Queryable()
+ // .InnerJoin((a, b) => a.id == b.location_id)
+ // .InnerJoin((a, b, c) => b.id == c.point_id)
+ // .InnerJoin((a, b, c, d) => d.id == c.endpoint_id)
+ // .Where((a, b, c, d) => a.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID
+ // && a.is_lock == 0 && a.is_use == "0"
+ // && a.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && d.point_code == $"DT-3-{elevatorSno}")
+ // .Select((a, b, c, d) => new BasLocation
+ // {
+ // location_code = a.location_code,
+ // extras = d.point_code
+ // }).OrderBy("a.location_code, d.point_code").ToListAsync();
+ // // 如果没有空闲库位 再找一下另一个电梯的缓存区有没有空闲库位
+ // if (locations.Count == 0)
+ // {
+ // elevatorSno = elevatorSno == "3" ? "4" : "3";
+ // locations = await _db.Queryable()
+ // .InnerJoin((a, b) => a.id == b.location_id)
+ // .InnerJoin((a, b, c) => b.id == c.point_id)
+ // .InnerJoin((a, b, c, d) => d.id == c.endpoint_id)
+ // .Where((a, b, c, d) => a.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID
+ // && a.is_lock == 0 && a.is_use == "0"
+ // && a.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && d.point_code == $"DT-3-{elevatorSno}")
+ // .Select((a, b, c, d) => new BasLocation
+ // {
+ // location_code = a.location_code,
+ // extras = d.point_code
+ // }).OrderBy("a.location_code, d.point_code").ToListAsync();
+ // }
- if (locations.Count == 0)
- {
- throw new AppFriendlyException($"三楼发货时,没有可用的暂存库位可以使用", 500);
- }
+ // if (locations.Count == 0)
+ // {
+ // throw new AppFriendlyException($"三楼发货时,没有可用的暂存库位可以使用", 500);
+ // }
- BasLocation cache_location = locations.First();
- // 到暂存区
- points.Add(wmsPointHs.Where(r => r.id == pStartId).First());
- points.Add(wmsPointHs.Where(r => r.location_code == cache_location.location_code).First());
- // 到电梯
- WmsPointH cacheOut_point = wmsPointHs.Where(r => r.location_code == cache_location.location_code).First().Copy();
- WmsPointH DT_C_point = wmsPointHs.Where(r => r.point_code == $"DT-C-03-0{elevatorSno}").First().Copy();
- cacheOut_point.area_code = "FC";
- DT_C_point.area_code = "FC";
+ // BasLocation cache_location = locations.First();
+ // // 到暂存区
+ // points.Add(wmsPointHs.Where(r => r.id == pStartId).First());
+ // points.Add(wmsPointHs.Where(r => r.location_code == cache_location.location_code).First());
+ // // 到电梯
+ // WmsPointH cacheOut_point = wmsPointHs.Where(r => r.location_code == cache_location.location_code).First().Copy();
+ // WmsPointH DT_C_point = wmsPointHs.Where(r => r.point_code == $"DT-C-03-0{elevatorSno}").First().Copy();
+ // cacheOut_point.area_code = "FC";
+ // DT_C_point.area_code = "FC";
- points.Add(cacheOut_point);
- points.Add(DT_C_point);
- // 到一楼
- points.Add(wmsPointHs.Where(r => r.point_code == $"DT-3-{elevatorSno}").First());
- points.Add(wmsPointHs.Where(r => r.point_code == $"DT-1-{elevatorSno}").First());
- points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-01-0{elevatorSno}").First());
- points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
- }
+ // points.Add(cacheOut_point);
+ // points.Add(DT_C_point);
+ // // 到一楼
+ // points.Add(wmsPointHs.Where(r => r.point_code == $"DT-3-{elevatorSno}").First());
+ // points.Add(wmsPointHs.Where(r => r.point_code == $"DT-1-{elevatorSno}").First());
+ // points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-01-0{elevatorSno}").First());
+ // points.Add(wmsPointHs.Where(r => r.id == pEndId).First());
+ //}
+ #endregion
//1-3
- else if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID)
+ if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID)
{
WmsElevatorH wmsElevatorH = await _db.Queryable().Where(it => it.elevator_group == "2" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
@@ -3270,11 +3314,11 @@ namespace Tnb.WarehouseMgr
}
- Logger.Information($"起点{startlocation.location_code} 终点{endlocation.location_code} 获取到路径 {JsonConvert.SerializeObject(points)}");
- if (points.Count < 6)
- {
- throw new AppFriendlyException($"路径错误,需要检查路径配置{JsonConvert.SerializeObject(points)}", 500);
- }
+ //Logger.Information($"起点{startlocation.location_code} 终点{endlocation.location_code} 获取到路径 {JsonConvert.SerializeObject(points)}");
+ //if (points.Count < 6)
+ //{
+ // throw new AppFriendlyException($"路径错误,需要检查路径配置{JsonConvert.SerializeObject(points)}", 500);
+ //}
//List wmsRoads = await _db.Queryable().Where(r => r.startpoint_id == pStartId).ToListAsync();
//if (wmsRoads?.FindAll(x => x.endpoint_code != null && x.location_code.Contains("dt", StringComparison.OrdinalIgnoreCase))?.Count > 0)
@@ -3286,7 +3330,7 @@ namespace Tnb.WarehouseMgr
-
+
//try
//{
// if (points?.FindAll(x => x.location_code != null && x.location_code.Contains("dt", StringComparison.OrdinalIgnoreCase))?.Count > 0)
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs
index 8f24b63b..ca523a68 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutsourceService.cs
@@ -114,6 +114,8 @@ namespace Tnb.WarehouseMgr
mod = minPacking.Value - extra;
}
+
+ BasMaterial basMaterial = await _db.Queryable().Where(r => r.id == WmsOutsourceD.matcode_id).FirstAsync();
for (int j = 0; j < codeNum; j++)
{
int index = j + 1;
@@ -133,7 +135,7 @@ namespace Tnb.WarehouseMgr
material_code = WmsOutsourceD.matcode,
barcode = code,
code_batch = WmsOutsourceD.code_batch,
- material_specification = WmsOutsourceD.matspecification,
+ material_specification = basMaterial.material_specification,
codeqty = minPacking,
unit_id = WmsOutsourceD.unit,
is_lock = 0,
@@ -142,7 +144,8 @@ namespace Tnb.WarehouseMgr
require_code = WmsOutsourceH.outsource_order,
create_id = _userManager.UserId,
create_time = DateTime.Now,
- required_type = WmsWareHouseConst.BILLTYPE_OUTSOURCE_ID
+ required_type = WmsWareHouseConst.BILLTYPE_OUTSOURCE_ID,
+ material_name = basMaterial.name
};
if (index == codeNum)
barCode.codeqty = mod == 0 ? minPacking : mod;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
index e3564360..1ac9f520 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
@@ -353,6 +353,7 @@ namespace Tnb.WarehouseMgr
mod = minPacking.Value - extra;
}
+ BasMaterial basMaterial = await _db.Queryable().Where(r => r.id == WmsPurchaseD.material_id).FirstAsync();
for (int j = 0; j < codeNum; j++)
{
int index = j + 1;
@@ -370,7 +371,7 @@ namespace Tnb.WarehouseMgr
material_code = WmsPurchaseD.material_code,
barcode = code,
code_batch = WmsPurchaseD.code_batch,
- material_specification = WmsPurchaseD.material_specification,
+ material_specification = basMaterial.material_specification,
container_no = WmsPurchaseD.container_no,
codeqty = minPacking,
unit_id = WmsPurchaseD.unit_id,
@@ -380,7 +381,9 @@ namespace Tnb.WarehouseMgr
require_code = WmsPurchaseH.bill_code,
create_id = _userManager.UserId,
create_time = DateTime.Now,
- required_type = WmsWareHouseConst.BILLTYPE_PURCHASE_ID
+ required_type = WmsWareHouseConst.BILLTYPE_PURCHASE_ID,
+ material_name = basMaterial.name,
+ supplier_name = WmsPurchaseH.supplier_name
};
if (index == codeNum)
barCode.codeqty = mod == 0 ? minPacking : mod;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatOutstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatOutstockService.cs
index 3784ea49..ca437876 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatOutstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatOutstockService.cs
@@ -21,6 +21,7 @@ using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.WarehouseMgr.Entities;
+using Tnb.WarehouseMgr.Entities.Attributes;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
@@ -33,8 +34,10 @@ namespace Tnb.WarehouseMgr
/// 材料出库单
///
[OverideVisualDev(ModuleConsts.MODULE_WmsRawmatOutstock_ID)]
+ [ServiceModule(BizTypeId)]
public class WmsRawmatOutstockService : BaseWareHouseService
{
+ private const string BizTypeId = WmsWareHouseConst.BIZTYPE_WmsRawmatOutstock_ID;
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;
private readonly IBillRullService _billRullService;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs
index 509f44a7..c5443fb0 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferinstockService.cs
@@ -240,6 +240,8 @@ namespace Tnb.WarehouseMgr
mod = minPacking.Value - extra;
}
+
+ BasMaterial basMaterial = await _db.Queryable().Where(r => r.id == WmsRawmatTransferinstockD.matcode_id).FirstAsync();
for (int j = 0; j < codeNum; j++)
{
int index = j + 1;
@@ -258,7 +260,7 @@ namespace Tnb.WarehouseMgr
material_code = WmsRawmatTransferinstockD.matcode,
barcode = code,
code_batch = WmsRawmatTransferinstockD.code_batch,
- material_specification = WmsRawmatTransferinstockD.matspecification,
+ material_specification = basMaterial.material_specification,
codeqty = minPacking,
unit_id = WmsRawmatTransferinstockD.unit,
is_lock = 0,
@@ -267,7 +269,8 @@ namespace Tnb.WarehouseMgr
require_code = WmsRawmatTransferinstockH.bill_code,
create_id = _userManager.UserId,
create_time = DateTime.Now,
- required_type = WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID
+ required_type = WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID,
+ material_name = basMaterial.name
};
if (index == codeNum)
barCode.codeqty = mod == 0 ? minPacking : mod;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
index 762be475..8ffc1545 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
@@ -139,7 +139,7 @@ namespace Tnb.WarehouseMgr
///
- /// 下发
+ /// 下发 电梯第三次改动
///
///
///
@@ -179,7 +179,6 @@ namespace Tnb.WarehouseMgr
Logger.LogInformation($"【Distribute】 预计生成{items_pretask.Count}条预任务");
-
List endLocations = null;
// 自动发货
if (!input.isManual)
@@ -223,12 +222,24 @@ namespace Tnb.WarehouseMgr
// 自动发货
if (!input.isManual)
{
- endLocation = await _db.Queryable().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").OrderBy("is_lock, task_nums, location_code").FirstAsync();
-
- if (endLocation == null)
+ #region 电梯第三次改动 延迟预任务生成
+ // 3-1 第三次改动
+ var YCLInnerTransfer = await _db.Queryable().Where(p => p.key == "floor3CurInCacheLocation").FirstAsync();
+ Logger.Information($"当前发货区: {YCLInnerTransfer.value}");
+ if (YCLInnerTransfer.value == null || (YCLInnerTransfer.value != "3楼发货左" && YCLInnerTransfer.value != "3楼发货右"))
{
- throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500);
+ throw new AppFriendlyException($"工厂配置->三楼出库暂存区当前入库分区 项配置错误!需要配置值为【3楼发货左】或【3楼发货右】", 500);
}
+ List locations = await _db.Queryable()
+ .InnerJoin((a, b) => a.id == b.location_id)
+ .Where((a, b) => b.name == YCLInnerTransfer.value).OrderBy("a.location_code,a.is_lock,a.is_use,task_nums").ToListAsync();
+
+ endLocation = locations.FirstOrDefault();
+
+ await _db.Updateable().SetColumns(r => r.value == (YCLInnerTransfer.value == "3楼发货左" ? "3楼发货右" : "3楼发货左"))
+ .Where(r => r.key == "floor3CurInCacheLocation").ExecuteCommandAsync();
+
+ #endregion
}
//人工发货
else
@@ -257,6 +268,7 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException("库位与载具规格不匹配", 500);
}
+
ePoint = await _db.Queryable().FirstAsync(it => it.location_id == endLocation.id);
if (ePoint != null)
@@ -281,10 +293,10 @@ namespace Tnb.WarehouseMgr
if (sPoint.area_code != ePoint.area_code)
{
points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id);
- if (points.Count <= 2)
- {
- throw new AppFriendlyException($"sPoint {sPoint.point_code} ePoint{ePoint.point_code}该路径不存在", 500);
- }
+ //if (points.Count <= 2)
+ //{
+ // throw new AppFriendlyException($"sPoint {sPoint.point_code} ePoint{ePoint.point_code}该路径不存在", 500);
+ //}
}
else
{
@@ -342,7 +354,9 @@ namespace Tnb.WarehouseMgr
carry_status = ((int)EnumCarryStatus.占用).ToString(),
is_lock = 1,
location_id = startLocation.id,
- location_code = location.location_code
+ location_code = location.location_code,
+ require_id = input.source_id,
+ biz_type = WmsWareHouseConst.BIZTYPE_WMSSALERELEASE_ID
}).Where(it => it.id == carry.id).ExecuteCommandAsync();
}
@@ -416,6 +430,287 @@ namespace Tnb.WarehouseMgr
return await ToApiResult(HttpStatusCode.OK, "成功");
}
+
+ ///
+ /// 下发
+ ///
+ ///
+ ///
+ ///
+ //[HttpPost, NonUnify, AllowAnonymous]
+ //public async Task Distribute(SaleReleaseDistributeInput input)
+ //{
+ // Logger.LogInformation($"【Distribute】 销售出库下发");
+ // SemaphoreSlim semaphoreSlim = null;
+ // try
+ // {
+ // semaphoreSlim = _wareHouseService.GetSemaphore("outstock", WmsWareHouseConst.WAREHOUSE_CP_ID);
+ // await semaphoreSlim.WaitAsync();
+ // if (input.qty <= 0)
+ // {
+ // throw new AppFriendlyException("数量必须大于0", 500);
+ // }
+ // if (string.IsNullOrEmpty(input.source_id))
+ // {
+ // throw new AppFriendlyException("来源单据id不可为空", 500);
+ // }
+
+ // WmsSaleD wmsOutstockD = await _db.Queryable().FirstAsync(it => it.id == input.source_id);
+ // await _db.Ado.BeginTranAsync();
+ // //入库取终点 //出库起点
+ // OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, material_id = wmsOutstockD.material_id, qty = input.qty, code_batch = wmsOutstockD.code_batch, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID };
+ // List> items = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput);
+
+ // decimal canOutstockQty = items.Sum(r => r.Item3.codeqty).ParseToDecimal();
+ // if (canOutstockQty < input.qty)
+ // {
+ // throw new AppFriendlyException($@"当前可出库数量只有 {canOutstockQty.ToString("G")}", 500);
+ // }
+
+ // List> items_sorttask = items.Where(r => r.Item1 == "分拣任务").ToList();
+ // List> items_pretask = items.Where(r => r.Item1 == "预任务").ToList();
+
+ // Logger.LogInformation($"【Distribute】 预计生成{items_pretask.Count}条预任务");
+
+
+ // List endLocations = null;
+ // // 自动发货
+ // if (!input.isManual)
+ // {
+ // endLocations = await _db.Queryable().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").ToListAsync();
+
+ // if (endLocations.Count < items_pretask.Count)
+ // {
+ // throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500);
+ // }
+
+ // List endLocations_temp = await _db.Queryable().Where(r => r.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && r.is_lock == 0 && r.is_use == "0").ToListAsync();
+
+ // if (endLocations_temp.Count < items_pretask.Count)
+ // {
+ // throw new AppFriendlyException($"三楼发货时,没有可用的暂存库位可以使用,需要下发任务{items_pretask.Count}条,可用的暂存库位只有{endLocations_temp.Count}条", 500);
+ // }
+ // }
+ // //人工发货
+ // else
+ // {
+ // InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = items_pretask.Count, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID };
+ // endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
+
+ // if (endLocations.Count < items_pretask.Count)
+ // {
+ // throw new AppFriendlyException("三楼人工出库区没有足够的未锁定且空闲的出库工位", 500);
+ // }
+ // }
+
+
+ // // 预任务逻辑
+ // foreach (Tuple item in items_pretask)
+ // {
+ // WmsCarryH carry = item.Item2;
+ // WmsCarryCode carryCode = item.Item3;
+ // BasLocation startLocation = item.Item4;
+ // // 根据一楼工位任务数平均分配任务 确定一楼工位
+
+ // BasLocation endLocation = null;
+ // // 自动发货
+ // if (!input.isManual)
+ // {
+ // endLocation = await _db.Queryable().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").OrderBy("is_lock, task_nums, location_code").FirstAsync();
+
+ // if (endLocation == null)
+ // {
+ // throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500);
+ // }
+ // }
+ // //人工发货
+ // else
+ // {
+ // InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = 1, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID };
+ // endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
+
+ // if (endLocations.Count < 1)
+ // {
+ // throw new AppFriendlyException("三楼人工出库区没有足够的未锁定且空闲的出库工位", 500);
+ // }
+ // endLocation = endLocations[0];
+ // }
+ // if (endLocation == null)
+ // {
+ // throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500);
+ // }
+ // WmsPointH sPoint = null!;
+ // WmsPointH ePoint = null!;
+
+ // sPoint = await _db.Queryable().FirstAsync(it => it.location_id == startLocation.id);
+
+ // bool isMatch = await IsCarryAndLocationMatchByCarryStd(carry, endLocation);
+ // if (!isMatch)
+ // {
+ // throw new AppFriendlyException("库位与载具规格不匹配", 500);
+ // }
+
+ // ePoint = await _db.Queryable().FirstAsync(it => it.location_id == endLocation.id);
+
+ // if (ePoint != null)
+ // {
+ // }
+ // else
+ // {
+ // throw new AppFriendlyException($"库位{endLocation.location_code}未在点位表中维护对应点位", 500);
+ // }
+
+ // string endLocationId = endLocation.id;
+
+ // // 在线开发
+ // //VisualDevEntity? templateEntity = await _visualDevService?.GetInfoById(ModuleConsts.MODULE_WMSDELIVERYPDA_ID, true)!;
+ // //await _runService.Create(templateEntity, input);
+
+ // // 计算路径,插入预任务申请
+
+ // if (sPoint != null && ePoint != null)
+ // {
+ // List points = new List();
+ // if (sPoint.area_code != ePoint.area_code)
+ // {
+ // points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id);
+ // //if (points.Count <= 2)
+ // //{
+ // // throw new AppFriendlyException($"sPoint {sPoint.point_code} ePoint{ePoint.point_code}该路径不存在", 500);
+ // //}
+ // }
+ // else
+ // {
+ // points.Add(sPoint);
+ // points.Add(ePoint);
+ // }
+
+ // //根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序)
+ // if (points?.Count > 0)
+ // {
+ // List preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
+ // {
+ // WmsPointH? sPoint = it.FirstOrDefault();
+ // WmsPointH? ePoint = it.LastOrDefault();
+
+ // WmsPretaskH preTask = new()
+ // {
+ // org_id = _userManager!.User.OrganizeId,
+ // startlocation_id = sPoint?.location_id!,
+ // startlocation_code = sPoint?.location_code!,
+ // endlocation_id = ePoint?.location_id!,
+ // endlocation_code = ePoint?.location_code!,
+ // start_floor = sPoint?.floor.ToString(),
+ // end_floor = ePoint?.floor.ToString(),
+ // startpoint_id = sPoint?.id!,
+ // startpoint_code = sPoint?.point_code!,
+ // endpoint_id = ePoint?.id!,
+ // endpoint_code = ePoint?.point_code!,
+ // bill_code = _billRullService!.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult(),
+ // status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID,
+ // biz_type = WmsWareHouseConst.BIZTYPE_WMSSALERELEASE_ID,
+ // task_type = WmsWareHouseConst.WMS_PRETASK_TRANSFER_TYPE_ID
+ // };
+ // preTask.carry_id = carry.id;
+ // preTask.carry_code = carry.carry_code;
+ // preTask.area_id = sPoint?.area_id!;
+ // preTask.area_code = it.Key;
+ // preTask.require_id = input.source_id;
+ // preTask.require_code = "";
+ // preTask.create_id = _userManager.UserId;
+ // preTask.create_time = DateTime.Now;
+ // return preTask;
+ // }).ToList();
+ // bool isOk = await _wareHouseService.GenPreTask(preTasks, null!, _db);
+ // if (isOk)
+ // {
+ // if (endLocationId != null)
+ // {
+ // //查询库位表
+ // BasLocation location = await _db.Queryable().SingleAsync(it => it.id == startLocation.id);
+ // {
+ // //载具加锁,增加库位信息
+ // _ = await _db.Updateable().SetColumns(it => new WmsCarryH
+ // {
+ // carry_status = ((int)EnumCarryStatus.占用).ToString(),
+ // is_lock = 1,
+ // location_id = startLocation.id,
+ // location_code = location.location_code,
+ // require_id = input.source_id,
+ // biz_type = WmsWareHouseConst.BIZTYPE_WMSSALERELEASE_ID
+ // }).Where(it => it.id == carry.id).ExecuteCommandAsync();
+ // }
+
+ // //所有库位加锁
+ // string?[] ids = new[] { startLocation.id, preTasks[0].endlocation_id, endLocationId };
+ // _ = await _db.Updateable().SetColumns(it => new BasLocation { is_lock = 1 }).Where(it => ids.Contains(it.id)).ExecuteCommandAsync();
+
+ // }
+ // }
+ // }
+
+ // }
+ // }
+
+ // Logger.LogInformation($"【Distribute】 预计生成{items_sorttask.Count}条分拣任务");
+ // // 分拣任务逻辑
+ // foreach (Tuple item in items_sorttask)
+ // {
+ // WmsCarryH carry = item.Item2;
+ // WmsCarryCode carryCode = item.Item3;
+ // BasLocation startLocation = item.Item4;
+
+ // // 锁定分拣载具
+ // await _db.Updateable().SetColumns(r => r.is_lock == 1).Where(r => r.id == carry.id).ExecuteCommandAsync();
+
+ // Dictionary dic = new()
+ // {
+ // [nameof(WmsSortingtask.id)] = SnowflakeIdHelper.NextId(),
+ // [nameof(WmsSortingtask.bill_code)] = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_SORTINGTASK_ENCODE),
+ // [nameof(WmsSortingtask.org_id)] = input.org_id ?? _userManager.User.OrganizeId,
+ // [nameof(WmsSortingtask.qty)] = carryCode.codeqty,
+ // [nameof(WmsSortingtask.carry_id)] = carry.id,
+ // [nameof(WmsSortingtask.carry_code)] = carry.carry_code,
+ // [nameof(WmsSortingtask.status)] = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID,
+ // [nameof(WmsSortingtask.location_id)] = startLocation.id,
+ // [nameof(WmsSortingtask.location_code)] = startLocation.location_code,
+ // [nameof(WmsSortingtask.create_id)] = input.create_id ?? _userManager.UserId,
+ // [nameof(WmsSortingtask.create_time)] = DateTime.Now,
+ // [nameof(WmsSortingtask.source_id)] = input.source_id
+ // };
+
+ // VisualDevModelDataCrInput visualDevModelDataCrInput = new()
+ // {
+ // data = dic
+ // };
+
+ // //在线开发
+ // VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSSORTINGTASK_ID, false);
+ // await _runService.Create(templateEntity, visualDevModelDataCrInput);
+ // }
+
+ // // 更新销售出库单子表已下发数量
+ // await _db.Updateable().SetColumns(r => r.purchase_arriveqty == r.purchase_arriveqty + input.qty).Where(r => r.id == input.source_id).ExecuteCommandAsync();
+
+ // await _db.Ado.CommitTranAsync();
+ // Logger.LogInformation($"【Distribute】 销售出库下发完成");
+ // }
+ // catch (Exception ex)
+ // {
+ // await _db.Ado.RollbackTranAsync();
+ // Logger.LogError($"【Distribute】 销售出库 {ex.Message}");
+ // Logger.LogError($"【Distribute】 销售出库 {ex.StackTrace}");
+ // return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
+ // }
+ // finally
+ // {
+ // semaphoreSlim.Release();
+ // await InvokeGenPretaskExcute();
+ // }
+
+ // return await ToApiResult(HttpStatusCode.OK, "成功");
+ //}
+
///
/// 分拣
///
diff --git a/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json b/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json
index ab81d5aa..7e076272 100644
--- a/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json
+++ b/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json
@@ -18,7 +18,7 @@
//Dm
//"DefaultConnection": "server={0};port={1};database={2};uid={3};pwd={4};"
//Oracle
- //"DefaultConnection": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1}))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME={2})));User Id={3};Password={4}"
+ //"DefaultConnection": "Data Sourctianyi20240902e=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1}))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME={2})));User Id={3};Password={4}"
//PostgreSQL
"DefaultConnection": "server={0};port={1};database={2};uid={3};pwd={4};pooling=true;KeepAlive=60;ConnectionLifetime=300;MaxPoolSize=320;",
//MySql