diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Attributes/ServiceModuleAttribute.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Attributes/ServiceModuleAttribute.cs
new file mode 100644
index 00000000..0224145f
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Attributes/ServiceModuleAttribute.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.WarehouseMgr.Entities.Attributes
+{
+ ///
+ /// 业务类型模块特性
+ ///
+ [AttributeUsage(AttributeTargets.Class)]
+ public class ServiceModuleAttribute : Attribute
+ {
+ ///
+ /// 业务类型ID
+ ///
+ public string BizTypeId { get; set; }
+ public ServiceModuleAttribute(string bizTypeId)
+ {
+ this.BizTypeId = bizTypeId;
+ }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
index 4847bae1..69d95c77 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
@@ -4,5 +4,125 @@ public class ModuleConsts
{
public const string Tag = "WarehouseMgr";
public const string Area = "wms";
+ ///
+ /// 任务操作-PDA异常取消
+ ///
+ public const string MODULE_WMSEXCEPTIONCANCELPDA_ID = "26631250691605";
+ ///
+ /// 任务操作-PDA异常重新执行
+ ///
+ public const string MODULE_WMSEXCPTIONREEXCUTEPDA_ID = "26631184673813";
+ ///
+ /// 任务操作-PDA异常完成
+ ///
+ public const string MODULE_WMSEXCPTIONCOMPLETEPDA_ID = "26497241038869";
+ ///
+ /// 任务操作-PDA投料操作
+ ///
+ public const string MODULE_WMSFEEDINGRECORDPDA_ID = "26496913096981";
+ ///
+ /// 任务操作-PDA绑定操作
+ ///
+ public const string MODULE_WMSBINDINGPDA_ID = "26496560237333";
+ ///
+ /// 任务操作-PDA载具解绑
+ ///
+ public const string MODULE_WMSCARRYUNBINDPDA_ID = "26479624280613";
+ ///
+ /// 任务操作-PDA载具绑定
+ ///
+ public const string MODULE_WMSCARRYBINDPDA_ID = "26479495084837";
+ ///
+ /// 任务操作-PDA载具移出
+ ///
+ public const string MODULE_WMSCARRYMOOUTSTKPDA_ID = "26479437840677";
+ ///
+ /// 任务操作-PDA载具移入
+ ///
+ public const string MODULE_WMSMOVEINSTKPDA_ID = "26476127634469";
+ ///
+ /// 任务操作-PDA载具更换
+ ///
+ public const string MODULE_WMSCARRYREPLACEPDA_ID = "26475867493157";
+ ///
+ /// 任务操作-PDA配送申请
+ ///
+ public const string MODULE_WMSDELIVERYPDA_ID = "26475604135973";
+ ///
+ /// 任务操作-PDA库内转移
+ ///
+ public const string MODULE_WMSTRANSFERPDA_ID = "26475492865317";
+ ///
+ /// 任务操作-PDA寄存捆包
+ ///
+ public const string MODULE_WMSINBALEINPDA_ID = "26475412782629";
+ ///
+ /// 任务操作-PDA寄存入库
+ ///
+ public const string MODULE_WMSINBALEINSTKPDA_ID = "26474954845989";
+ ///
+ /// 任务操作-PDA齐套入库
+ ///
+ public const string MODULE_WMSKITTINGINSTKPDA_ID = "26474190687781";
+ ///
+ /// 任务操作-PDA一般入库
+ ///
+ public const string MODULE_WMSINSTOCKPDA_ID = "26458832529445";
+ ///
+ /// 任务操作-寄存出库
+ ///
+ public const string MODULE_WMSOUTBALE_ID = "26192638001445";
+ ///
+ /// 任务操作-寄存捆包
+ ///
+ public const string MODULE_WMSINBALE_ID = "26192480520485";
+ ///
+ /// 任务操作-出库申请
+ ///
+ public const string MODULE_WMSOUTSTOCK_ID = "26191983650597";
+ ///
+ /// 任务操作-入库申请
+ ///
+ public const string MODULE_WMSINSTOCK_ID = "26191326300453";
+ ///
+ /// 任务操作-载具更换
+ ///
+ public const string MODULE_WMSCARRYREPLACE_ID = "26188532491557";
+ ///
+ /// 任务操作-齐套分拣
+ ///
+ public const string MODULE_WMSSETSORTING_ID = "26172520979237";
+ ///
+ /// 任务操作-齐套出库
+ ///
+ public const string MODULE_WMSKITTINGOUTSTK_ID = "26169701736741";
+ ///
+ /// 任务操作-齐套入库
+ ///
+ public const string MODULE_WMSKITTINGINSTK_ID = "26166785871909";
+ ///
+ /// 任务操作-配送申请
+ ///
+ public const string MODULE_WMSDELIVERY_ID = "26126388337189";
+ ///
+ /// 任务操作-库内转移
+ ///
+ public const string MODULE_WMSTRANSFER_ID = "26125750270757";
+ ///
+ /// 任务操作-载具移出
+ ///
+ public const string MODULE_WMSCARRYMOOUTSTK_ID = "26123262586661";
+ ///
+ /// 任务操作-空载具出库
+ ///
+ public const string MODULE_WMSEPTYOUTSTK_ID = "26122798979365";
+ ///
+ /// 任务操作-载具移入
+ ///
+ public const string MODULE_CARRYMOVEINSTOCK_ID = "26122102481957";
+ ///
+ /// 任务操作-空载具入库
+ ///
+ public const string MODULE_WMSEMPTYINSTOCK_ID = "26120915344165";
}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
index c45ee6e7..96cbd3af 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
@@ -60,8 +60,21 @@ namespace Tnb.WarehouseMgr.Entities.Consts
///
public const string WMS_PRETASK_INSTOCK_TYPE_ID = "26126748597797";
///
- /// 预任务生成业务类型-空载具移入Id
+ /// 预任务生成业务类型-载具移入Id
///
public const string BIZTYPE_EMPTYIN_ID = "26120915344165";
+ ///
+ /// 预任务生成业务类型-空载具出库ID
+ ///
+ public const string BIZTYPE_EMPTYOUT_ID = "26122798979365";
+ ///
+ /// 预任务生成业务类型-PDA空载具入库ID
+ ///
+ public const string BIZTYPE_EMPTYINPDA_ID = "26475795363877";
+ ///
+ /// 预任务生成业务类型-PDA空载具出库ID
+ ///
+ public const string BIZTYPE_EMPTYOUTPDA_ID = "26475845405733";
+
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskExecuteAfterUpInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskExecuteAfterUpInput.cs
index dc065732..2489ece5 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskExecuteAfterUpInput.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskExecuteAfterUpInput.cs
@@ -14,6 +14,6 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Inputs
///
/// 任务执行Ids
///
- public List disTaskIds { get; set; }
+ public List disTaskIds { get; set; }
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WareHouseUpInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WareHouseUpInput.cs
new file mode 100644
index 00000000..f571d010
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/WareHouseUpInput.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.WarehouseMgr.Entities.Dto
+{
+ ///
+ /// 库房业务更新输入参数
+ ///
+ public class WareHouseUpInput
+ {
+ ///
+ /// 需求来源单据Id,对应业务主表Id
+ ///
+ public string requireId { get; set; }
+ ///
+ /// 单据业务类型Id
+ ///
+ public string bizTypeId { get; set; }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumWareHouseModule.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumWareHouseModule.cs
new file mode 100644
index 00000000..8c55ebb1
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumWareHouseModule.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.WarehouseMgr.Entities.Enums
+{
+ ///
+ /// 库房模块
+ ///
+ public enum EnumWareHouseModule
+ {
+ ///
+ /// 其它
+ ///
+ other= 1,
+ ///
+ /// 空载具出库
+ ///
+ WmsEptyOutStk=2,
+ ///
+ /// 载具移出
+ ///
+ WmsMoOutstk = 3,
+ ///
+ /// 空载具入库
+ ///
+ WmsEmptyInstock = 4,
+ ///
+ /// 载具移入
+ ///
+ CarryMoveInStock = 5,
+ ///
+ /// 齐套分拣
+ ///
+ WmsTransfer = 6,
+ ///
+ /// 寄存捆包
+ ///
+ WmsInbale = 7,
+ ///
+ /// 一般入库
+ ///
+ WmsInStock = 8,
+ ///
+ /// 一般出库
+ ///
+ WmsOutStock = 9,
+ ///
+ /// 齐套入库
+ ///
+ WmsKittingInStk = 10,
+ ///
+ /// 齐套出库
+ ///
+ WmsKittingOutStk = 11,
+ ///
+ /// 寄存出库
+ ///
+ WmsOutBale = 12,
+ ///
+ /// 寄存入库
+ ///
+ WmsInbaleInStk = 13,
+ ///
+ /// 配送申请
+ ///
+ WmsDelivery = 14,
+ ///
+ /// 异常取消
+ ///
+ WmsExceptionCancel = 15,
+ ///
+ /// 异常重新执行
+ ///
+ WmsExceptionReExcute = 16,
+ ///
+ /// 异常完成
+ ///
+ WmsExceptionComplete = 17,
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/Interface1.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/Interface1.cs
new file mode 100644
index 00000000..ca71435b
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/Interface1.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.WarehouseMgr.Interfaces
+{
+ ///
+ /// 更新业务单据信息接口
+ ///
+ public interface IUpdateBizBillInfo
+ {
+ Task Modify(string requireId);
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
index 04d0ff8e..d6288960 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
@@ -1,13 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Aspose.Cells.Drawing;
+using JNPF;
+using JNPF.Common.Extension;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.VisualDev;
using Microsoft.AspNetCore.Mvc;
+using Tnb.WarehouseMgr.Entities.Attributes;
+using Tnb.WarehouseMgr.Entities.Dto;
namespace Tnb.WarehouseMgr
{
@@ -15,8 +20,40 @@ namespace Tnb.WarehouseMgr
[Route("api/[area]/[controller]/[action]")]
public class BaseWareHouseService : IOverideVisualDevService, IDynamicApiController, ITransient
{
+ private static Dictionary _serviceMap = new Dictionary();
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
-
+ static BaseWareHouseService()
+ {
+ var serviceTypes = App.EffectiveTypes.Where(u => u.IsClass && !u.IsInterface && !u.IsAbstract && u.IsSubclassOf(typeof(BaseWareHouseService))).ToList();
+ foreach (var serviceType in serviceTypes)
+ {
+ var bizTypeId = serviceType.GetCustomAttribute()?.BizTypeId;
+ if (!bizTypeId.IsNullOrEmpty())
+ {
+ _serviceMap[bizTypeId!] = (BaseWareHouseService)Activator.CreateInstance(serviceType)!;
+ }
+ }
+ }
+
+ protected Task this[WareHouseUpInput input]
+ {
+ set
+ {
+ if (_serviceMap.ContainsKey(input.bizTypeId))
+ {
+ _serviceMap[input.bizTypeId].ModifyAsync(input);
+ }
+ }
+ get
+ {
+ return Task.CompletedTask;
+ }
+ }
+
+ public virtual Task ModifyAsync(WareHouseUpInput input)
+ {
+ return Task.CompletedTask;
+ }
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index 375cf165..aeff25b8 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -395,14 +395,40 @@ namespace Tnb.WarehouseMgr
//更新任务执行表,单据状态为 完成
await _db.Updateable().SetColumns(it => new WmsDistaskH { status = WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID }).Where(it => input.disTaskIds.Contains(it.id)).ExecuteCommandAsync();
//更新预任务申请表,单据状态为 已完成
- var preTaskIds = await _db.Queryable().Where(it => input.disTaskIds.Contains(it.id)).Select(it => it.pretask_id).ToListAsync();
- if(preTaskIds?.Count > 0)
+ var disTasks = await _db.Queryable().Where(it => input.disTaskIds.Contains(it.id)).ToListAsync();
+ if (disTasks?.Count > 0)
{
+ var preTaskIds = disTasks.Select(x => x.pretask_id).ToList();
await _db.Updateable().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync();
}
//更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位
+ if (disTasks?.Count > 0)
+ {
+ var multiList = disTasks.Select(it => (it.carry_id, it.endlocation_id)).ToList();
+ for (int i = 0; i < multiList.Count; i++)
+ {
+ await _db.Updateable().SetColumns(it => new WmsCarryH { is_lock = 0, location_id = multiList[i].endlocation_id }).Where(it => it.id == multiList[i].carry_id).ExecuteCommandAsync();
+ }
+ }
//更新库位信息,使用状态为 使用,锁定状态为未锁定
+ if (disTasks?.Count > 0)
+ {
+ var destLocIds = disTasks.Select(it => it.endlocation_id).ToList();
+ await _db.Updateable().SetColumns(it => new BasLocation { is_use = "1", is_lock = 0 }).Where(it => destLocIds.Contains(it.id)).ExecuteCommandAsync();
+ }
//更新业务主表的单据状态
+ if (disTasks?.Count > 0)
+ {
+ foreach (var dt in disTasks)
+ {
+ if (dt.is_chain == 0)
+ {
+ var upInput = new WareHouseUpInput { bizTypeId = dt.biz_type, requireId = dt.require_id };
+ await base[upInput];
+ }
+
+ }
+ }
}
///
@@ -458,7 +484,6 @@ namespace Tnb.WarehouseMgr
#region PrivateMethods
- private bool isArrivedEpoint = false;
private async Task> LocPathCalcAlgorithms(string pStartId, string pEndId, List roads)
{
var points = await _db.Queryable().ToListAsync();
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs
index 264cfd19..93598c5c 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs
@@ -18,6 +18,7 @@ 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;
@@ -28,8 +29,10 @@ namespace Tnb.WarehouseMgr
/// 载具移入
///
[OverideVisualDev(ModuleId)]
+ [ServiceModule(BizTypeId)]
public class WmsCarryMoveInStockService : BaseWareHouseService
{
+ private const string BizTypeId = "26121988909861";
private const string ModuleId = "26122102481957";
private readonly ISqlSugarClient _db;
private readonly IRunService _runService;
@@ -137,5 +140,12 @@ namespace Tnb.WarehouseMgr
}
return Task.FromResult(true);
}
+
+ public override async Task ModifyAsync(WareHouseUpInput input)
+ {
+ if (input == null) throw new ArgumentNullException(nameof(input));
+ var isOk = await _db.Updateable().SetColumns(it => new WmsMoveInstock { status = input.bizTypeId }).Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
+ if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
+ }
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs
index 7d5ee9db..ad86e417 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs
@@ -29,6 +29,7 @@ namespace Tnb.WarehouseMgr
/// 空载具入库
///
[OverideVisualDev(ModuleId)]
+
public class WmsEmptyInstockService : BaseWareHouseService
{
private const string ModuleId = "26120915344165";