using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Threading.Tasks; using Aspose.Cells.Drawing; using JNPF; using JNPF.Common.Contracts; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; 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.Outputs; using Tnb.WarehouseMgr.Entities.Entity; using Tnb.WarehouseMgr.Interfaces; namespace Tnb.WarehouseMgr { [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)] [Route("api/[area]/[controller]/[action]")] public class BaseWareHouseService : IOverideVisualDevService, IDynamicApiController, ITransient { private static Dictionary _stroageMap = new(StringComparer.OrdinalIgnoreCase); public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); static BaseWareHouseService() { var serviceTypes = App.EffectiveTypes.Where(u => u.IsClass && !u.IsInterface && !u.IsAbstract && typeof(IWHStorageService).IsAssignableFrom(u)).ToList(); foreach (var serviceType in serviceTypes) { var callerName = serviceType.GetCustomAttribute()?.Name ?? string.Empty; if (!callerName.IsNullOrEmpty()) { var obj = Activator.CreateInstance(serviceType) as IWHStorageService; if (obj == null) continue; _stroageMap[callerName] = obj; } } } /// /// 判断最终目标库位是否可以放置当前载具 /// /// 当前载具 /// 目标库位 /// /// [NonAction] protected Task IsCarryAndLocationMatchByCarryStd(WmsCarryH carry, BasLocation locDest) { bool isMatch = false; if (carry == null) throw new ArgumentNullException(nameof(carry)); if (locDest == null) throw new ArgumentNullException(nameof(locDest)); if (!carry.carrystd_id.IsNullOrEmpty() && !locDest.carrystd_id.IsNullOrEmpty()) { var jsonArr = JArray.Parse(locDest.carrystd_id); var locCarryStdArr = jsonArr.Select(x => x.ToObject()).ToArray(); isMatch = locCarryStdArr.Contains(carry.carrystd_id); } return Task.FromResult(isMatch); } [NonAction] protected async Task DoUpdate(WareHouseUpInput input) { if (_stroageMap.ContainsKey(input.loginType)) { await _stroageMap[input.loginType].Do(input); } } [NonAction] public virtual Task ModifyAsync(WareHouseUpInput input) { return Task.CompletedTask; } /// /// Api响应结果 /// /// [NonAction] protected Task ToApiResult() { DataResult result = new(); return Task.FromResult(result); } /// /// Api响应结果 /// /// [NonAction] protected Task ToApiResult(HttpStatusCode statusCode, object data) { DataResult result = new() { code = statusCode, data = data }; return Task.FromResult(result); } /// /// Api响应结果 /// /// [NonAction] protected Task ToApiResult(object data) { DataResult result = new() { data = data }; return Task.FromResult(result); } /// /// Api响应结果 /// /// [NonAction] protected Task ToApiResult(HttpStatusCode statusCode, string msg) { DataResult result = new() { code = statusCode, msg = msg }; return Task.FromResult(result); } /// /// Api响应结果 /// /// [NonAction] protected Task ToApiResult(HttpStatusCode statusCode, string msg, object data) { DataResult result = new() { code = statusCode, msg = msg, data = data }; return Task.FromResult(result); } } }