using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using iWare.Wms.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System.Linq.Dynamic.Core;
namespace iWare.Wms.Application
{
///
/// 设备刀具详情表服务
///
[ApiDescriptionSettings("刀具相关", Name = "KnifeToolEquipmentInfo", Order = 101)]
[Route("api/[Controller]")]
public class KnifeToolEquipmentInfoService : IKnifeToolEquipmentInfoService, IDynamicApiController, ITransient
{
private readonly IRepository _knifeToolEquipmentInfoRep;
private readonly IRepository _knifeToolEquipmentUpdateLogRep;
private readonly IRepository _knifeToolEquipmentInfoLogRep;
private readonly IRepository _equipmentBaseInfoRep;
private readonly IRepository _knifeToolBaseInfoRep;
public KnifeToolEquipmentInfoService(
IRepository knifeToolEquipmentInfoRep
, IRepository knifeToolEquipmentUpdateLogRep
, IRepository knifeToolEquipmentInfoLogRep
, IRepository equipmentBaseInfoRep,
IRepository knifeToolBaseInfoRep)
{
_knifeToolEquipmentInfoRep = knifeToolEquipmentInfoRep;
_knifeToolEquipmentUpdateLogRep = knifeToolEquipmentUpdateLogRep;
_knifeToolEquipmentInfoLogRep = knifeToolEquipmentInfoLogRep;
_equipmentBaseInfoRep = equipmentBaseInfoRep;
_knifeToolBaseInfoRep = knifeToolBaseInfoRep;
}
///
/// 分页查询设备刀具详情表
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] KnifeToolEquipmentInfoSearch input)
{
var knifeToolEquipmentInfos = await (from knife in _knifeToolEquipmentInfoRep.DetachedEntities
join toolbaseinfo in _knifeToolBaseInfoRep.DetachedEntities on knife.KnifeToolID equals toolbaseinfo.KnifeToolID into tooljoinEmpty
from toolbaseinfo2 in tooljoinEmpty.DefaultIfEmpty()
join eqbaseinfo in _equipmentBaseInfoRep.DetachedEntities on knife.EquipmentID equals eqbaseinfo.EquipmentId into eqjoinEmpty
from eqbaseinfo2 in eqjoinEmpty.DefaultIfEmpty()
where knife.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? knife.EquipmentID : input.EquipmentID)
where knife.KnifeToolID.Contains( (string.IsNullOrEmpty(input.KnifeToolID) ? knife.KnifeToolID : input.KnifeToolID))
select new KnifeToolEquipmentInfoOutput
{
EquipmentID = knife.EquipmentID,
EquipmentName= eqbaseinfo2.EquipmentName,
WorkingProcedure = knife.WorkingProcedure,
Station = knife.Station,
KnifeToolID = knife.KnifeToolID,
KnifeToolName = knife.KnifeToolName,
StartLife = knife.StartLife,
CurrentLife = knife.CurrentLife,
ChangeStartTime = knife.ChangeStartTime,
Remarks1 = knife.Remarks1,
Remarks2 = knife.Remarks2,
Remarks3 = knife.Remarks3,
Id = knife.Id,
KnifeToolLife= toolbaseinfo2.KnifeToolLife,
KnifeToolChangeAlertThreshold= toolbaseinfo2.KnifeToolChangeAlertThreshold,
})
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return knifeToolEquipmentInfos;
}
///
/// 旧刀查询
///
///
///
[HttpGet("OldKnifeQuery")]
public async Task> OldKnifeQuery([FromQuery] KnifeToolBaseInfoSearch input)
{
var knifeToolBaseInfos = await (from knife in _knifeToolEquipmentInfoLogRep.DetachedEntities
join eqbaseinfo in _equipmentBaseInfoRep.DetachedEntities on knife.EquipmentID equals eqbaseinfo.EquipmentId into eqjoinEmpty
from eqbaseinfo2 in eqjoinEmpty.DefaultIfEmpty()
join baseinfo in _knifeToolBaseInfoRep.DetachedEntities on knife.EquipmentID equals baseinfo.EquipmentID into joinEmpty
from baseinfo2 in joinEmpty.DefaultIfEmpty()
where knife.EquipmentID == input.EquipmentID
where knife.WorkingProcedure == input.WorkingProcedure
select new KnifeToolBaseInfoOutput
{
Id = knife.Id,
KnifeToolID = knife.KnifeToolID,
KnifeToolModel = baseinfo2.KnifeToolModel,
KnifeEdgeNumber = baseinfo2.KnifeEdgeNumber,
KnifeToolLife = baseinfo2.KnifeToolLife,
KnifeLength = baseinfo2.KnifeLength,
EquipmentID = knife.EquipmentID,
EquipmentName = eqbaseinfo2.EquipmentName,
CurrentLife=knife.CurrentLife,
KnifeToolName=knife.KnifeToolName,
KnifeToolChangeAlertThreshold = baseinfo2.KnifeToolChangeAlertThreshold,
CreatedTime = knife.CreatedTime,
Remarks = knife.Remarks1,
})
.GroupBy(x => new { x.KnifeToolName })
.Select(o=>o.First())
.ProjectToType()
.OrderBy(PageInputOrder.OrderBuilder(input))
.ToADPagedListAsync(input.PageNo, input.PageSize);
return knifeToolBaseInfos;
}
///
/// 设备上刀
///
///
///
[HttpPost("UpperKnife")]
public async Task UpperKnife(UpperKnifeInput input)
{
if(string.IsNullOrEmpty(input.Station)|| string.IsNullOrEmpty(input.EquipmentID))
{
throw Oops.Oh("设备与工位信息必须输入!");
}
var isExist = await _knifeToolEquipmentInfoRep.AnyAsync(u => u.EquipmentID == input.EquipmentID&&u.Station==input.Station, false);
if (isExist) throw Oops.Oh($"设备【{input.EquipmentID}】工位【{input.Station}】已有刀具!");
if(input.Type==1)
{//新刀
input.KnifeToolName = DateTime.Now.ToString("yyyyMMddHHmmss");
}
else if(input.Type == 2)
{//旧刀
if (string.IsNullOrEmpty(input.KnifeToolName))
{
throw Oops.Oh("刀具名称没有值!");
}
}
else
{
throw Oops.Oh("请输入刀具新旧(新|旧)!");
}
var knifeToolEquipmentInfo = input.Adapt();
knifeToolEquipmentInfo.StartLife = (int)input.CurrentLife;
knifeToolEquipmentInfo.ChangeStartTime = DateTime.Now;
await _knifeToolEquipmentInfoRep.InsertAsync(knifeToolEquipmentInfo);
var log = knifeToolEquipmentInfo.Adapt();
log.OperateType = "上刀";
log.OperateDesc = $"设备[{input.EquipmentID}]工序[{input.WorkingProcedure}]工位[{input.Station}] {input.TypeName}上刀,刀具名称为{input.KnifeToolName}";
await _knifeToolEquipmentUpdateLogRep.InsertAsync(log);
}
///
/// 设备换刀
///
///
///
[HttpPost("ChangeKnife")]
public async Task ChangeKnife(UpperKnifeInput input)
{
if (input.oldId == null || input.oldId < 1)
{
throw Oops.Oh("请传入下刀的主键id!");
}
if (string.IsNullOrEmpty(input.Station) || string.IsNullOrEmpty(input.EquipmentID))
{
throw Oops.Oh("设备与工位信息必须输入!");
}
//上刀
var isExist = await _knifeToolEquipmentInfoRep.AnyAsync(u => u.EquipmentID == input.EquipmentID && u.Station == input.Station, false);
if (!isExist) throw Oops.Oh($"设备【{input.EquipmentID}】工位【{input.Station}】已有刀具!");
if (input.Type == 1)
{//新刀
input.KnifeToolName = DateTime.Now.ToString("yyyyMMddHHmmss");
}
else if (input.Type == 2)
{//旧刀
if (string.IsNullOrEmpty(input.KnifeToolName))
{
throw Oops.Oh("刀具名称没有值!");
}
}
else
{
throw Oops.Oh("请输入刀具新旧(新|旧)!");
}
//下刀
var isExistdown = await _knifeToolEquipmentInfoRep.AnyAsync(u => u.Id == input.oldId, false);
if (!isExistdown) throw Oops.Oh($"当前刀具主键{input.oldId}没有找到刀具!");
//下刀
var knifeToolEquipmentInfo = await _knifeToolEquipmentInfoRep.FirstOrDefaultAsync(u => u.Id == input.oldId);
await _knifeToolEquipmentInfoRep.DeleteAsync(knifeToolEquipmentInfo);
var knifeToolEquipmentInfolog = knifeToolEquipmentInfo.Adapt();
knifeToolEquipmentInfolog.ChangeEndTime = DateTime.Now;
//knifeToolEquipmentInfolog.ResidueLife = input.ResidueLife;//剩余寿命
knifeToolEquipmentInfolog.CurrentLife = input.oldCurrentLife;
await _knifeToolEquipmentInfoLogRep.InsertAsync(knifeToolEquipmentInfolog);
var log = knifeToolEquipmentInfolog.Adapt();
log.OperateType = "换刀";
log.OperateDesc = $"设备[{knifeToolEquipmentInfolog.EquipmentID}]工序[{knifeToolEquipmentInfolog.WorkingProcedure}]工位[{knifeToolEquipmentInfolog.Station}] {input.TypeName}换刀下刀,刀具名称为{knifeToolEquipmentInfolog.KnifeToolName}";
await _knifeToolEquipmentUpdateLogRep.InsertAsync(log);
//上刀
var knifeToolEquipmentInfoadd = input.Adapt();
knifeToolEquipmentInfoadd.ChangeStartTime = DateTime.Now;
knifeToolEquipmentInfoadd.StartLife = (int)input.CurrentLife;
await _knifeToolEquipmentInfoRep.InsertAsync(knifeToolEquipmentInfoadd);
var log2 = knifeToolEquipmentInfoadd.Adapt();
log2.OperateType = "换刀";
log2.OperateDesc = $"设备[{knifeToolEquipmentInfoadd.EquipmentID}]工序[{knifeToolEquipmentInfoadd.WorkingProcedure}]工位[{knifeToolEquipmentInfoadd.Station}] {input.TypeName}换刀上刀,刀具名称为{knifeToolEquipmentInfoadd.KnifeToolName}";
await _knifeToolEquipmentUpdateLogRep.InsertAsync(log2);
}
///
/// 设备下刀
///
///
///
[HttpPost("DownKnife")]
public async Task DownKnife(UpperKnifeInput input)
{
if (input.oldId == null || input.oldId <1)
{
throw Oops.Oh("请传入下刀的主键id!");
}
var isExist = await _knifeToolEquipmentInfoRep.AnyAsync(u => u.Id == input.oldId, false);
if (!isExist) throw Oops.Oh($"当前刀具主键{input.oldId}没有找到刀具!");
var knifeToolEquipmentInfo = await _knifeToolEquipmentInfoRep.FirstOrDefaultAsync(u => u.Id == input.oldId);
await _knifeToolEquipmentInfoRep.DeleteAsync(knifeToolEquipmentInfo);
var knifeToolEquipmentInfolog = knifeToolEquipmentInfo.Adapt();
//knifeToolEquipmentInfolog.ResidueLife = input.ResidueLife;//剩余寿命
knifeToolEquipmentInfolog.ChangeEndTime = DateTime.Now;
knifeToolEquipmentInfolog.CurrentLife = input.CurrentLife;//下刀后当前寿命
await _knifeToolEquipmentInfoLogRep.InsertAsync(knifeToolEquipmentInfolog);
var log = knifeToolEquipmentInfolog.Adapt();
log.OperateType = "下刀";
log.OperateDesc = $"设备[{knifeToolEquipmentInfolog.EquipmentID}]工序[{knifeToolEquipmentInfolog.WorkingProcedure}]工位[{knifeToolEquipmentInfolog.Station}] {input.TypeName}下刀,刀具名称为{knifeToolEquipmentInfolog.KnifeToolName}";
await _knifeToolEquipmentUpdateLogRep.InsertAsync(log);
}
///
/// 增加设备刀具详情表
///
///
///
[HttpPost("add")]
public async Task Add(AddKnifeToolEquipmentInfoInput input)
{
var knifeToolEquipmentInfo = input.Adapt();
await _knifeToolEquipmentInfoRep.InsertAsync(knifeToolEquipmentInfo);
}
///
/// 删除设备刀具详情表
///
///
///
[HttpPost("delete")]
public async Task Delete(DeleteKnifeToolEquipmentInfoInput input)
{
var knifeToolEquipmentInfo = await _knifeToolEquipmentInfoRep.FirstOrDefaultAsync(u => u.Id == input.Id);
await _knifeToolEquipmentInfoRep.DeleteAsync(knifeToolEquipmentInfo);
}
///
/// 更新设备刀具详情表
///
///
///
[HttpPost("edit")]
public async Task Update(UpdateKnifeToolEquipmentInfoInput input)
{
var isExist = await _knifeToolEquipmentInfoRep.AnyAsync(u => u.Id == input.Id, false);
if (!isExist) throw Oops.Oh(ErrorCode.D3000);
var knifeToolEquipmentInfo = input.Adapt();
await _knifeToolEquipmentInfoRep.UpdateAsync(knifeToolEquipmentInfo,ignoreNullValues:true);
}
///
/// 获取设备刀具详情表
///
///
///
[HttpGet("detail")]
public async Task Get([FromQuery] QueryeKnifeToolEquipmentInfoInput input)
{
return (await _knifeToolEquipmentInfoRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt();
}
///
/// 获取设备刀具详情表列表
///
///
///
[HttpGet("list")]
public async Task> List([FromQuery] KnifeToolEquipmentInfoInput input)
{
return await _knifeToolEquipmentInfoRep.DetachedEntities.ProjectToType().ToListAsync();
}
}
}