using Admin.NET.Core.Service;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
using System.Data;
using System.Web;
using System.Text;
namespace Admin.NET.Application;
///
/// 单号生成规则服务
///
[ApiDescriptionSettings(ApplicationConst.WmsSystemConfigGroupName, Order = 100)]
public class WmsNoCreateRuleService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
public WmsNoCreateRuleService(SqlSugarRepository rep)
{
_rep = rep;
}
///
/// 分页查询单号生成规则
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Page")]
[Description("WmsNoCreateRule/Page")]
public async Task> Page(WmsNoCreateRuleInput input)
{
var query = CommonPageFilter(input);
return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize);
}
///
/// 不分页查询单号生成规则
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "List")]
[Description("WmsNoCreateRule/List")]
public async Task> List([FromQuery] WmsNoCreateRuleInput input)
{
var query = CommonPageFilter(input);
return await query.OrderBuilder(input, "", "Id").Select().ToListAsync();
}
///
/// 增加单号生成规则
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Add")]
[Description("WmsNoCreateRule/Add")]
public async Task Add(AddWmsNoCreateRuleInput input)
{
var entity = input.Adapt();
//重复性验证
await CheckExist(entity);
await _rep.InsertAsync(entity);
return entity.Id;
}
///
/// 删除单号生成规则
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Delete")]
[Description("WmsNoCreateRule/Delete")]
public async Task Delete(DeleteWmsNoCreateRuleInput input)
{
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("WmsNoCreateRule/Update")]
public async Task Update(UpdateWmsNoCreateRuleInput input)
{
var entity = input.Adapt();
//重复性验证
await CheckExist(entity,true);
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
}
///
/// 获取单号生成规则
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "Detail")]
[Description("WmsNoCreateRule/Detail")]
public async Task Detail([FromQuery] QueryByIdWmsNoCreateRuleInput input)
{
return await _rep.GetFirstAsync(u => u.Id == input.Id);
}
#region 私有方法
///
/// 公共查询单号生成规则条件
///
///
///
private ISugarQueryable CommonPageFilter(WmsNoCreateRuleInput input)
{
var query = _rep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
u.RuleCode.Contains(input.SearchKey.Trim())
|| u.RuleName.Contains(input.SearchKey.Trim())
|| u.NoRule.Contains(input.SearchKey.Trim())
|| u.RuleDesc.Contains(input.SearchKey.Trim())
|| u.CreateUserName.Contains(input.SearchKey.Trim())
|| u.UpdateUserName.Contains(input.SearchKey.Trim())
)
.WhereIF(!string.IsNullOrWhiteSpace(input.RuleCode), u => u.RuleCode.Contains(input.RuleCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.RuleName), u => u.RuleName.Contains(input.RuleName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.NoRule), u => u.NoRule.Contains(input.NoRule.Trim()))
.WhereIF(input.OrderType.HasValue, u => u.OrderType == input.OrderType)
.WhereIF(input.BusinessType.HasValue, u => u.BusinessType == input.BusinessType)
.WhereIF(input.SerialNoStepSize>0, u => u.SerialNoStepSize == input.SerialNoStepSize)
.WhereIF(input.SerialNoLength>0, u => u.SerialNoLength == input.SerialNoLength)
.WhereIF(!string.IsNullOrWhiteSpace(input.RuleDesc), u => u.RuleDesc.Contains(input.RuleDesc.Trim()))
.WhereIF(input.IsDisabled.HasValue, u => u.IsDisabled == input.IsDisabled)
.Select();
return query;
}
///
/// 重复性验证
///
/// 验证对象
/// 是否是编辑
///
private async Task CheckExist( WmsConfigNoRule input,bool isEdit=false)
{
bool isExist = false;
if (!isEdit)//新增
{
//数据是否存在重复
isExist = await _rep.AsQueryable().AnyAsync(u =>
u.OrderType.Equals(input.OrderType)
&& u.BusinessType.Equals(input.BusinessType)
);
}
else//编辑
{
//当前编辑数据以外是否存在重复
isExist = await _rep.AsQueryable().AnyAsync(u =>
u.Id != input.Id
&& u.OrderType.Equals(input.OrderType)
&& u.BusinessType.Equals(input.BusinessType)
);
}
if (isExist) throw Oops.Oh($"验证失败,单据类型[{input.OrderType}],业务类型[{input.BusinessType}]已存在");
//没有配置单独校验,不需要验重
}
///
/// 根据组合校验和单独校验验证数据是否已存在-导入时验证
///
///
///
private async Task CheckExisitForImport(List inputs)
{
if (inputs?.Count <= 0)
{
throw Oops.Oh($"导入数据不能为空");
}
//根据组合校验验证表格中中是否已存在相同数据
var existExcelItem = inputs.GroupBy(g => new {
g.OrderType
,g.BusinessType
})
.Where(g => g.Count() > 1)
.Select(s => new {
s.Key.OrderType
,s.Key.BusinessType
}).FirstOrDefault();
if (existExcelItem != null)
{
var item= existExcelItem.Adapt();
throw Oops.Oh($"导入的表格中,单据类型[{item.OrderType}],业务类型[{item.BusinessType}]已重复存在");
}
//根据组合校验验证数据库中是否已存在相同数据
var existDBItem = await _rep.GetFirstAsync(w=>
inputs.Select(s=>""
+s.OrderType
+s.BusinessType
)
.Contains(""
+w.OrderType
+w.BusinessType
));
if (existDBItem != null)
{
var item= existDBItem.Adapt();
throw Oops.Oh($"系统中,单据类型[{item.OrderType}],业务类型[{item.BusinessType}]已存在");
}
//根据单独校验验证表格中中是否已存在相同数据
}
#endregion
}