using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Aspose.Cells.Drawing; using DingTalk.Api.Request; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Extension; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using JNPF.VisualDev.Entitys; using JNPF.VisualDev.Interfaces; using Microsoft.AspNetCore.Components.Forms; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Tnb.BasicData.Entities; namespace Tnb.BasicData { /// /// 区域物料设定 /// [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 701)] [Route("api/[area]/[controller]/[action]")] [OverideVisualDev(ModuleId)] public class BasRegionMatService : IOverideVisualDevService, IDynamicApiController, ITransient { private const string ModuleId = "26187428200229"; private readonly ISqlSugarClient _db; private readonly IRunService _runService; private readonly IVisualDevService _visualDevService; private readonly IDictionaryDataService _dataDictionaryService; private static Dictionary s_materialCategoryMap = new(); public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); public BasRegionMatService(ISqlSugarRepository repo, IRunService runService, IVisualDevService visualDevService, IDictionaryDataService dataDictionaryService ) { _db = repo.AsSugarClient(); _runService = runService; _visualDevService = visualDevService; _dataDictionaryService = dataDictionaryService; OverideFuncs.CreateAsync = CreateAsync; } private async Task CreateAsync(VisualDevModelDataCrInput input) { Task respTask = Task.FromResult(1); try { await _db.Ado.BeginTranAsync(); string? regionCode = null, materialType = null; if (input.data.ContainsKey(nameof(BasRegionMat.region_code)) && input.data[nameof(BasRegionMat.region_code)].IsNotEmptyOrNull()) { regionCode = input.data[nameof(BasRegionMat.region_code)].ToString(); } if (input.data.ContainsKey(nameof(BasRegionMat.material_type)) && input.data[nameof(BasRegionMat.material_type)].IsNotEmptyOrNull()) { materialType = input.data[nameof(BasRegionMat.material_type)].ToString(); } var blTrueAll = new List { regionCode.IsNullOrWhiteSpace(), materialType.IsNullOrWhiteSpace() }; if (blTrueAll.All(b => !b)) { if (s_materialCategoryMap.Count == 0) { s_materialCategoryMap = await _dataDictionaryService.GetDictionaryByTypeId(DictConst.MaterialCatagoryID); } var regionMat = await _db.Queryable().FirstAsync(it => it.region_code == regionCode && it.material_type == materialType); if (regionMat != null) { throw new AppFriendlyException($"区域:【{regionCode}】,物料:【{s_materialCategoryMap[materialType]?.ToString()}】已存在", 500); } } await _db.Ado.CommitTranAsync(); VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); await _runService.Create(templateEntity, input); } catch (Exception) { respTask = Task.FromResult(0); await _db.Ado.RollbackTranAsync(); throw; } return await respTask; } } }