137 lines
6.6 KiB
C#
137 lines
6.6 KiB
C#
using System.Linq;
|
|
using JNPF.Common.Core.Manager;
|
|
using JNPF.Common.Dtos.VisualDev;
|
|
using JNPF.Common.Security;
|
|
using JNPF.DependencyInjection;
|
|
using JNPF.DynamicApiController;
|
|
using JNPF.FriendlyException;
|
|
using JNPF.Systems.Interfaces.System;
|
|
using JNPF.VisualDev;
|
|
using JNPF.VisualDev.Interfaces;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using SqlSugar;
|
|
using Tnb.EquipMgr.Entities;
|
|
using Tnb.EquipMgr.Interfaces;
|
|
|
|
namespace Tnb.EquipMgr
|
|
{
|
|
/// <summary>
|
|
/// 备品备件领用服务
|
|
/// </summary>
|
|
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
|
|
[Route("api/[area]/[controller]/[action]")]
|
|
[OverideVisualDev(ModuleId)]
|
|
public class EqpSparePartsRequisitionHService : IEqpSparePartsRequisitionHService, IOverideVisualDevService, IDynamicApiController, ITransient
|
|
{
|
|
private const string ModuleId = "27338205223957";
|
|
private readonly ISqlSugarRepository<EqpSparePartsRequisitionH> _repository;
|
|
private readonly IVisualDevService _visualDevService;
|
|
private readonly IRunService _runService;
|
|
private readonly IUserManager _userManager;
|
|
private readonly IBillRullService _billRuleService;
|
|
|
|
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
|
|
|
public EqpSparePartsRequisitionHService(ISqlSugarRepository<EqpSparePartsRequisitionH> repository,
|
|
IRunService runService,
|
|
IVisualDevService visualDevService,
|
|
IBillRullService billRuleService,
|
|
IUserManager userManager)
|
|
{
|
|
_repository = repository;
|
|
_visualDevService = visualDevService;
|
|
_runService = runService;
|
|
_userManager = userManager;
|
|
_billRuleService = billRuleService;
|
|
OverideFuncs.CreateAsync = Create;
|
|
}
|
|
|
|
private async Task<dynamic> Create(VisualDevModelDataCrInput input)
|
|
{
|
|
ISqlSugarClient db = _repository.AsSugarClient();
|
|
DbResult<bool> result = await db.Ado.UseTranAsync(async () =>
|
|
{
|
|
// VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true);
|
|
// await _runService.Create(templateEntity, input);
|
|
string code = await _billRuleService.GetBillNumber(Tnb.BasicData.CodeTemplateConst.SPAREPARTSREQUISITION_CODE);
|
|
EqpSparePartsRequisitionH eqpSparePartsRequisitionH = new()
|
|
{
|
|
code = code,
|
|
equip_id = input.data.ContainsKey("equip_id") ? input.data["equip_id"].ToString() : "",
|
|
department = input.data.ContainsKey("department") ? input.data["department"].ToString() : "",
|
|
recipient_id = input.data.ContainsKey("recipient_id") ? input.data["recipient_id"].ToString() : "",
|
|
requisition_purpose = input.data.ContainsKey("requisition_purpose") ? input.data["requisition_purpose"].ToString() : "",
|
|
create_id = _userManager.UserId,
|
|
create_time = DateTime.Now,
|
|
org_id = _userManager.GetUserInfo().Result.organizeId,
|
|
};
|
|
|
|
_ = await db.Insertable<EqpSparePartsRequisitionH>(eqpSparePartsRequisitionH).ExecuteCommandAsync();
|
|
|
|
if (input.data.TryGetValue("tablefield120", out object? value))
|
|
{
|
|
List<Dictionary<string, string>> details = value.ToObject<List<Dictionary<string, string>>>();
|
|
List<EqpEquipSpareParts> eqpSparePartsList = new();
|
|
List<EqpSparePartsRequisitionD> eqpSparePartsRequisitionDs = new() { };
|
|
foreach (Dictionary<string, string> detail in details)
|
|
{
|
|
string instockDetailId = detail.ContainsKey("instock_detail_id") ? detail["instock_detail_id"] : "";
|
|
string sparePartsId = detail.ContainsKey("spare_parts_id") ? detail["spare_parts_id"] : "";
|
|
int quantity = Convert.ToInt32(detail.ContainsKey("quantity") ? detail["quantity"] : "");
|
|
|
|
eqpSparePartsRequisitionDs.Add(new EqpSparePartsRequisitionD
|
|
{
|
|
instock_detail_id = instockDetailId,
|
|
spare_parts_id = sparePartsId,
|
|
quantity = quantity,
|
|
equip_id = eqpSparePartsRequisitionH.equip_id,
|
|
spare_parts_requisition_id = eqpSparePartsRequisitionH.id,
|
|
});
|
|
|
|
if (await db.Queryable<EqpSparePartsInstockD>()
|
|
.AnyAsync(x => x.id == instockDetailId && (x.quantity - x.use_quantity - quantity) >= 0))
|
|
{
|
|
eqpSparePartsList.Add(new EqpEquipSpareParts
|
|
{
|
|
equip_id = input.data["equip_id"]?.ToString() ?? "",
|
|
spare_parts_id = sparePartsId,
|
|
create_id = _userManager.UserId,
|
|
create_time = DateTime.Now,
|
|
org_id = _userManager.GetUserInfo().Result.organizeId
|
|
});
|
|
|
|
_ = await db.Updateable<EqpSparePartsInstockD>()
|
|
.SetColumns(x => x.use_quantity == x.use_quantity + quantity)
|
|
.Where(x => x.id == instockDetailId).ExecuteCommandAsync();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("库存不够");
|
|
}
|
|
|
|
}
|
|
|
|
if (eqpSparePartsRequisitionDs.Count > 0)
|
|
{
|
|
_ = await db.Insertable<EqpSparePartsRequisitionD>(eqpSparePartsRequisitionDs).ExecuteCommandAsync();
|
|
}
|
|
|
|
if (eqpSparePartsList.Count > 0)
|
|
{
|
|
var datas= await db.Queryable<EqpEquipSpareParts>().ToListAsync();
|
|
foreach (var item in eqpSparePartsList)
|
|
{
|
|
if (!datas.Where(p => p.equip_id == item.equip_id && p.spare_parts_id == item.spare_parts_id).Any())
|
|
_ = await db.Insertable<EqpEquipSpareParts>(eqpSparePartsList).ExecuteCommandAsync();
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
return !result.IsSuccess ? throw Oops.Bah(result.ErrorMessage) : (dynamic)(result.IsSuccess ? "保存成功" : result.ErrorMessage);
|
|
}
|
|
}
|
|
} |