diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
index f6c5ca72..cb716379 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
@@ -40,6 +40,15 @@ public class ModuleConsts
/// 模块标识-PDA载具移入
///
public const string MODULE_WMSMOVEINSTKPDA_ID = "26476127634469";
+ ///
+ /// 模块标识-PDA空载具出库
+ ///
+ public const string MODULE_WMSEMPTYOUTSTKPDA_ID = "26475845405733";
+ ///
+ /// 模块标识-PDA空载具入库
+ ///
+ public const string MODULE_WMSEMPTYINSTKPDA_ID = "26475795363877";
+
///
/// 模块标识-PDA载具更换
///
@@ -115,7 +124,7 @@ public class ModuleConsts
///
/// 模块标识-空载具出库
///
- public const string MODULE_WMSEPTYOUTSTK_ID = "26122798979365";
+ public const string MODULE_WMSEMPTYOUTSTK_ID = "26122798979365";
///
/// 模块标识-载具移入
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs
index 67db8c1f..03277942 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs
@@ -29,7 +29,7 @@ namespace Tnb.WarehouseMgr
///
/// 空载具出库
///
- [OverideVisualDev(ModuleConsts.MODULE_WMSEMPTYINSTOCK_ID)]
+ [OverideVisualDev(ModuleConsts.MODULE_WMSEMPTYOUTSTK_ID)]
[ServiceModule(BizTypeId)]
public class WmsEmptyOutstockService : BaseWareHouseService
@@ -55,10 +55,10 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
- OverideFuncs.CreateAsync = WmsEmptyOut;
+ OverideFuncs.CreateAsync = PDAWmsEmptyOut;
}
- private async Task WmsEmptyOut(VisualDevModelDataCrInput input)
+ private async Task PDAWmsEmptyOut(VisualDevModelDataCrInput input)
{
try
@@ -69,7 +69,7 @@ namespace Tnb.WarehouseMgr
- VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYINSTOCK_ID, true);
+ VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYOUTSTK_ID, true);
await _runService.Create(templateEntity, input);
/*//入库取终点
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs
index 94e9a9bb..33c6c57c 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs
@@ -29,7 +29,7 @@ namespace Tnb.WarehouseMgr
///
/// 空载具入库
///
- [OverideVisualDev(ModuleConsts.MODULE_WMSEMPTYINSTOCK_ID)]
+ [OverideVisualDev(ModuleConsts.MODULE_WMSEMPTYINSTKPDA_ID)]
[ServiceModule(BizTypeId)]
public class WmsPDAEmptyInstockService : BaseWareHouseService
@@ -55,17 +55,17 @@ namespace Tnb.WarehouseMgr
_wareHouseService = wareHouseService;
_userManager = userManager;
_billRullService = billRullService;
- OverideFuncs.CreateAsync = WmsEmptyIn;
+ OverideFuncs.CreateAsync = PDAWmsEmptyIn;
}
- private async Task WmsEmptyIn(VisualDevModelDataCrInput input)
+ private async Task PDAWmsEmptyIn(VisualDevModelDataCrInput input)
{
try
{
await _db.Ado.BeginTranAsync();
- VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYINSTOCK_ID, true);
+ VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYINSTKPDA_ID, true);
await _runService.Create(templateEntity, input);
//入库取终点
var inStockStrategyInput = new InStockStrategyQuery { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString(), Size = 1 };
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs
new file mode 100644
index 00000000..368e8a44
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs
@@ -0,0 +1,175 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using JNPF.Common.Core.Manager;
+using JNPF.Common.Dtos.VisualDev;
+using JNPF.Common.Enums;
+using JNPF.Common.Extension;
+using JNPF.Common.Security;
+using JNPF.FriendlyException;
+using JNPF.Systems.Interfaces.System;
+using JNPF.VisualDev;
+using JNPF.VisualDev.Entitys;
+using JNPF.VisualDev.Interfaces;
+using Mapster;
+using Microsoft.AspNetCore.Mvc;
+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.Interfaces;
+
+namespace Tnb.WarehouseMgr
+
+{
+ ///
+ /// 空载具出库
+ ///
+ [OverideVisualDev(ModuleConsts.MODULE_WMSEMPTYOUTSTKPDA_ID)]
+ [ServiceModule(BizTypeId)]
+
+ public class WmsPDAEmptyOutstockService : BaseWareHouseService
+ {
+ private const string BizTypeId = "26121986416677";
+ private readonly ISqlSugarClient _db;
+ private readonly IRunService _runService;
+ private readonly IVisualDevService _visualDevService;
+ private readonly IWareHouseService _wareHouseService;
+ private readonly IBillRullService _billRullService;
+ private readonly IUserManager _userManager;
+ public WmsPDAEmptyOutstockService(
+ ISqlSugarRepository repository,
+ IRunService runService,
+ IVisualDevService visualDevService,
+ IWareHouseService wareHouseService,
+ IUserManager userManager,
+ IBillRullService billRullService)
+ {
+ _db = repository.AsSugarClient();
+ _runService = runService;
+ _visualDevService = visualDevService;
+ _wareHouseService = wareHouseService;
+ _userManager = userManager;
+ _billRullService = billRullService;
+ OverideFuncs.CreateAsync = PDAWmsEmptyOut;
+ }
+
+ private async Task PDAWmsEmptyOut(VisualDevModelDataCrInput input)
+ {
+
+ try
+ {
+ await _db.Ado.BeginTranAsync();
+
+
+
+
+
+ VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYOUTSTKPDA_ID, true);
+ await _runService.Create(templateEntity, input);
+
+ /*//入库取终点
+ var inStockStrategyInput = new InStockStrategyQuery { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString(), Size = 1 };
+ var endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);*/
+
+ //出库取起点,获取所有符合输入的载具规格的载具
+ var setQty = await _db.Queryable().FirstAsync(it => it.bill_code == input.data[nameof(WmsEmptyOutstockH.bill_code)]);
+ var carrys = await _db.Queryable().LeftJoin((a, b) => a.location_id == b.id)
+ .Select((a,b) => new
+ {
+ carry_id = a.id,
+ carrystd_id = a.id,
+ location_id = b.id,
+ carry_status = a.carry_status,
+ c_is_lock = a.is_lock,
+ l_is_lock = b.is_lock,
+ l_is_use = b.is_use,
+ l_is_type = b.is_type
+ })
+ .Where(it => it.carrystd_id == input.data[nameof(WmsEmptyOutstockH.carrystd_id)].ToString()
+ && it.carry_status == "0"&& it.c_is_lock == 0 && it.l_is_lock == 0 && it.l_is_use == "0" && it.l_is_type == "0")
+ .ToListAsync();
+
+ WmsPointH sPoint = null;
+ WmsPointH ePoint = null;
+ if (input.data.ContainsKey(nameof(WmsPointH.location_id)))
+ {
+ ePoint = await _db.Queryable().FirstAsync(it => it.location_id == input.data[nameof(WmsPointH.location_id)].ToString());
+ }
+ //根据每个载具的起始库位做路径运算
+ for(int i =0; i< setQty.qty ;i++)
+ {
+ sPoint = await _db.Queryable().FirstAsync(it => it.location_id == carrys[i].location_id);
+
+ if (sPoint != null && ePoint != null)
+ {
+ var points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id);
+ //根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序)
+ if (points?.Count > 0)
+ {
+ if (points.Count <= 2) throw new AppFriendlyException("该路径不存在", 500);
+ var preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
+ {
+ var sPoint = it.FirstOrDefault();
+ var ePoint = it.LastOrDefault();
+
+ WmsPretaskH preTask = new();
+ preTask.org_id = _userManager.User.OrganizeId;
+ preTask.startlocation_id = sPoint?.location_id;
+ preTask.startlocation_code = sPoint?.location_code;
+ preTask.endlocation_id = ePoint?.location_id;
+ preTask.endlocation_code = ePoint?.location_code;
+ preTask.start_floor = sPoint?.floor.ToString();
+ preTask.end_floor = ePoint?.floor.ToString();
+ preTask.bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult();
+ preTask.status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID;
+ preTask.biz_type = WmsWareHouseConst.BIZTYPE_WMSEMPTYINSTOCK_ID;
+ preTask.carry_id = input.data[nameof(preTask.carry_id)]?.ToString()!;
+ preTask.carry_code = input.data[nameof(preTask.carry_code)]?.ToString()!;
+ preTask.area_id = sPoint?.area_id;
+ preTask.area_code = it.Key;
+ preTask.require_id = input.data["ReturnIdentity"].ToString();
+ preTask.require_code = input.data[nameof(preTask.bill_code)]?.ToString()!;
+ preTask.create_id = _userManager.UserId;
+ preTask.create_time = DateTime.Now;
+ return preTask;
+ }).ToList();
+ var isOk = await _wareHouseService.GenPreTask(preTasks);
+ if (isOk)
+ {
+ var preTaskUpInput = new GenPreTaskUpInput();
+ preTaskUpInput.PreTaskId = input.data["ReturnIdentity"].ToString();
+ preTaskUpInput.CarryId = input.data[nameof(WmsCarryD.carry_id)]?.ToString()!;
+ preTaskUpInput.CarryStartLocationId = points.FirstOrDefault().location_id;
+ preTaskUpInput.CarryStartLocationCode = points.FirstOrDefault().location_code;
+ preTaskUpInput.LocationIds = points.Select(x => x.id).ToList();
+ preTaskUpInput.PreTaskRecords = preTasks.Adapt>();
+ preTaskUpInput.PreTaskRecords.ForEach(x => x.id = SnowflakeIdHelper.NextId());
+ await _wareHouseService.GenTaskHandleAfter(preTaskUpInput);
+ }
+ }
+ }
+ }
+
+ await _db.Ado.CommitTranAsync();
+ }
+ catch (Exception ex)
+ {
+ await _db.Ado.RollbackTranAsync();
+ throw;
+ }
+ return Task.FromResult(true);
+ }
+
+ //public async Task ModifyAsync(WareHouseUpInput input)
+ //{
+ // if (input == null) throw new ArgumentNullException(nameof(input));
+ // var isOk = await _db.Updateable().SetColumns(it => new WmsEmptyInstock { status = input.bizTypeId }).Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
+ // if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
+ //}
+ }
+}