using Admin.NET.Core.Service;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
namespace Admin.NET.Application;
///
/// 业务类型服务
///
[ApiDescriptionSettings(ApplicationConst.WmsBaseGroupName, Order = 100)]
public class WmsBaseBusinessTypeService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
private readonly SqlSugarRepository _repWmsOrderAsn;
private readonly SqlSugarRepository _repWmsOrderMovement;
private readonly SqlSugarRepository _repWmsOrderPurchase;
private readonly SqlSugarRepository _repWmsOrderDeliver;
private readonly SqlSugarRepository _repWmsOrderSort;
private readonly SqlSugarRepository _repWmsOrderQc;
public WmsBaseBusinessTypeService(SqlSugarRepository rep,
SqlSugarRepository repWmsOrderAsn,
SqlSugarRepository repWmsOrderMovement,
SqlSugarRepository repWmsOrderPurchase,
SqlSugarRepository repWmsOrderDeliver, SqlSugarRepository repWmsOrderSort, SqlSugarRepository repWmsOrderQc
)
{
_rep = rep;
_repWmsOrderAsn = repWmsOrderAsn;
_repWmsOrderMovement = repWmsOrderMovement;
_repWmsOrderPurchase = repWmsOrderPurchase;
_repWmsOrderDeliver = repWmsOrderDeliver;
_repWmsOrderSort = repWmsOrderSort;
_repWmsOrderQc = repWmsOrderQc;
}
///
/// 分页查询业务类型
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Page")]
[Description("WmsBaseBusinessType/Page")]
public async Task> Page(WmsBaseBusinessTypeInput input)
{
var query = CommonPageFilter(input);
return await query.OrderBuilder(input, "", "BusinessTypeValue", false).ToPagedListAsync(input.Page, input.PageSize);
}
///
/// 不分页查询业务类型
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "List")]
[Description("WmsBaseBusinessType/List")]
public async Task> List([FromQuery] WmsBaseBusinessTypeInput input)
{
var query = CommonPageFilter(input);
return await query.OrderBuilder(input, "", "BusinessTypeValue", false).Select().ToListAsync();
}
///
/// 增加业务类型
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Add")]
[Description("WmsBaseBusinessType/Add")]
public async Task Add(AddWmsBaseBusinessTypeInput input)
{
var entity = input.Adapt();
entity.MoveTypeName = entity.MoveType.GetDescription();
if (!entity.IsSystemParameter.HasValue)
{
entity.IsSystemParameter = false;
}
if (entity.IsSystemParameter == true)
{
throw Oops.Oh("不允许增加是否系统参数为是的业务类型!");
}
//重复性验证
await CheckExist(entity);
//验证业务类型值是否以移动类型枚举值开头
await CheckValue(entity);
await _rep.InsertAsync(entity);
return entity.Id;
}
///
/// 删除业务类型
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Delete")]
[Description("WmsBaseBusinessType/Delete")]
public async Task Delete(DeleteWmsBaseBusinessTypeInput input)
{
var BusinessTypeModel = await _rep.AsQueryable().FirstAsync(p => p.Id == input.Id);
if (BusinessTypeModel?.IsSystemParameter == true) throw Oops.Oh("系统配置的业务类型不允许删除!");
var count = 0;
if (await _repWmsOrderAsn.AsQueryable().AnyAsync(p => p.BusinessType == BusinessTypeModel.BusinessTypeValue))
{
count++;
}
if (await _repWmsOrderMovement.AsQueryable().AnyAsync(p => (int)p.BusinessType == BusinessTypeModel.BusinessTypeValue))
{
count++;
}
if (await _repWmsOrderPurchase.AsQueryable().AnyAsync(p => (int)p.BusinessType == BusinessTypeModel.BusinessTypeValue))
{
count++;
}
if (await _repWmsOrderDeliver.AsQueryable().AnyAsync(p => (int)p.BusinessType == BusinessTypeModel.BusinessTypeValue))
{
count++;
}
if (await _repWmsOrderSort.AsQueryable().AnyAsync(p => (int)p.BusinessType == BusinessTypeModel.BusinessTypeValue))
{
count++;
}
if (await _repWmsOrderQc.AsQueryable().AnyAsync(p => (int)p.BusinessType == BusinessTypeModel.BusinessTypeValue))
{
count++;
}
if (count > 0) throw Oops.Oh("不可删除此业务类型,已有关联信息!!");
var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
//await _rep.FakeDeleteAsync(entity); //假删除
await _rep.DeleteAsync(entity); //真删除
}
///
/// 更新业务类型
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Update")]
[Description("WmsBaseBusinessType/Update")]
public async Task Update(UpdateWmsBaseBusinessTypeInput input)
{
var BusinessTypeModel = await _rep.AsQueryable().FirstAsync(p => p.Id == input.Id);
if (BusinessTypeModel?.IsSystemParameter == true) throw Oops.Oh("系统配置的业务类型不允许修改!");
var entity = input.Adapt();
entity.MoveTypeName = entity.MoveType.GetDescription();
if (!entity.IsSystemParameter.HasValue)
{
entity.IsSystemParameter = false;
}
else
if (entity.IsSystemParameter == true)//
{
throw Oops.Oh("系统参数不允许修改!");
}
//重复性验证
await CheckExist(entity, true);
//验证业务类型值是否以移动类型枚举值开头
await CheckValue(entity);
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
}
///
/// 获取业务类型
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "Detail")]
[Description("WmsBaseBusinessType/Detail")]
public async Task Detail([FromQuery] QueryByIdWmsBaseBusinessTypeInput input)
{
return await _rep.GetFirstAsync(u => u.Id == input.Id);
}
#region 私有方法
///
/// 公共查询业务类型条件
///
///
///
private ISugarQueryable CommonPageFilter(WmsBaseBusinessTypeInput input)
{
var query = _rep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
u.BusinessTypeName.Contains(input.SearchKey.Trim())
|| u.MoveTypeName.Contains(input.SearchKey.Trim())
|| u.MoveTypeCode.Contains(input.SearchKey.Trim())
//|| u.CreateUserName.Contains(input.SearchKey.Trim())
//|| u.UpdateUserName.Contains(input.SearchKey.Trim())
)
.WhereIF(input.BusinessTypeValue.HasValue, u => u.BusinessTypeValue == input.BusinessTypeValue)
.WhereIF(!string.IsNullOrWhiteSpace(input.BusinessTypeName), u => u.BusinessTypeName.Contains(input.BusinessTypeName.Trim()))
.WhereIF(input.MoveType.HasValue, u => u.MoveType == input.MoveType)
.WhereIF(input.IsDisabled.HasValue, u => u.IsDisabled == input.IsDisabled)
.WhereIF(input.UpDownShelvesType.HasValue, u => u.UpDownShelvesType == input.UpDownShelvesType)
.WhereIF(input.IsSystemParameter.HasValue, u => u.IsSystemParameter == input.IsSystemParameter)
.WhereIF(input.DownShelvesIsAutoFinish.HasValue, u => u.DownShelvesIsAutoFinish == input.DownShelvesIsAutoFinish)
.WhereIF(input.IsDisabled.HasValue, u => u.IsDisabled == input.IsDisabled)
.Select();
return query;
}
///
/// 重复性验证
///
/// 验证对象
/// 是否是编辑
///
private async Task CheckExist(WmsBaseBusinessType input, bool isEdit = false)
{
//输出数据已存在错误
ErrorCodeItemMetadataAttribute metadata = ErrorCodeEnum.D1006.GetErrorCodeItemMetadata();
WmsBaseBusinessType _existItem = null;
if (!isEdit)//新增
{
_existItem = await _rep.GetFirstAsync(u => u.BusinessTypeValue.Equals(input.BusinessTypeValue));
if (_existItem != null) throw Oops.Oh($"业务类型[{input.BusinessTypeValue}]{metadata.ErrorMessage}");
_existItem = await _rep.GetFirstAsync(u => u.BusinessTypeName.Equals(input.BusinessTypeName));
if (_existItem != null) throw Oops.Oh($"业务类型名称[{input.BusinessTypeName}]{metadata.ErrorMessage}");
}
else//编辑
{
//当前编辑数据以外是否存在重复
_existItem = await _rep.GetFirstAsync(u => u.Id != input.Id && u.BusinessTypeValue.Equals(input.BusinessTypeValue));
if (_existItem != null) throw Oops.Oh($"业务类型[{input.BusinessTypeValue}]{metadata.ErrorMessage}");
_existItem = await _rep.GetFirstAsync(u => u.Id != input.Id && u.BusinessTypeName.Equals(input.BusinessTypeName));
if (_existItem != null) throw Oops.Oh($"业务类型名称[{input.BusinessTypeName}]{metadata.ErrorMessage}");
}
}
#endregion
///
/// //验证业务类型值是否以移动类型枚举值开头
///
///
///
private async Task CheckValue(WmsBaseBusinessType input)
{
string businessType = input.BusinessTypeValue.ToString();
string moveType = ((int)input.MoveType).ToString();
if (!businessType.StartsWith(moveType))
{
throw Oops.Oh($"移动类型是{input.MoveType.GetDescription()} 业务类型值[{input.BusinessTypeValue}]必须是以{moveType}开头");
}
}
}