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;
}
}
}