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;
|
/// <summary>
|
/// 单号生成规则服务
|
/// </summary>
|
[ApiDescriptionSettings(ApplicationConst.WmsSystemConfigGroupName, Order = 100)]
|
public class WmsNoCreateRuleService : IDynamicApiController, ITransient
|
{
|
private readonly SqlSugarRepository<WmsConfigNoRule> _rep;
|
public WmsNoCreateRuleService(SqlSugarRepository<WmsConfigNoRule> rep)
|
{
|
_rep = rep;
|
}
|
|
/// <summary>
|
/// 分页查询单号生成规则
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "Page")]
|
[Description("WmsNoCreateRule/Page")]
|
public async Task<SqlSugarPagedList<WmsNoCreateRuleOutput>> Page(WmsNoCreateRuleInput input)
|
{
|
var query = CommonPageFilter(input);
|
return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize);
|
}
|
|
/// <summary>
|
/// 不分页查询单号生成规则
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpGet]
|
[ApiDescriptionSettings(Name = "List")]
|
[Description("WmsNoCreateRule/List")]
|
public async Task<List<WmsNoCreateRuleOutput>> List([FromQuery] WmsNoCreateRuleInput input)
|
{
|
var query = CommonPageFilter(input);
|
return await query.OrderBuilder(input, "", "Id").Select<WmsNoCreateRuleOutput>().ToListAsync();
|
}
|
|
/// <summary>
|
/// 增加单号生成规则
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "Add")]
|
[Description("WmsNoCreateRule/Add")]
|
public async Task<long> Add(AddWmsNoCreateRuleInput input)
|
{
|
var entity = input.Adapt<WmsConfigNoRule>();
|
|
//重复性验证
|
await CheckExist(entity);
|
|
await _rep.InsertAsync(entity);
|
return entity.Id;
|
}
|
|
/// <summary>
|
/// 删除单号生成规则
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[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); //真删除
|
}
|
|
/// <summary>
|
/// 更新单号生成规则
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "Update")]
|
[Description("WmsNoCreateRule/Update")]
|
public async Task Update(UpdateWmsNoCreateRuleInput input)
|
{
|
var entity = input.Adapt<WmsConfigNoRule>();
|
|
//重复性验证
|
await CheckExist(entity,true);
|
|
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
|
}
|
|
/// <summary>
|
/// 获取单号生成规则
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpGet]
|
[ApiDescriptionSettings(Name = "Detail")]
|
[Description("WmsNoCreateRule/Detail")]
|
public async Task<WmsConfigNoRule> Detail([FromQuery] QueryByIdWmsNoCreateRuleInput input)
|
{
|
return await _rep.GetFirstAsync(u => u.Id == input.Id);
|
}
|
|
|
|
|
|
|
#region 私有方法
|
|
/// <summary>
|
/// 公共查询单号生成规则条件
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
private ISugarQueryable<WmsNoCreateRuleOutput> 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<WmsNoCreateRuleOutput>();
|
return query;
|
}
|
|
/// <summary>
|
/// 重复性验证
|
/// </summary>
|
/// <param name="input">验证对象</param>
|
/// <param name="isEdit">是否是编辑</param>
|
/// <returns></returns>
|
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}]已存在");
|
|
|
//没有配置单独校验,不需要验重
|
}
|
|
/// <summary>
|
/// 根据组合校验和单独校验验证数据是否已存在-导入时验证
|
/// </summary>
|
/// <param name="inputs"></param>
|
/// <returns></returns>
|
private async Task CheckExisitForImport(List<WmsConfigNoRule> 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<WmsConfigNoRule>();
|
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<WmsConfigNoRule>();
|
throw Oops.Oh($"系统中,单据类型[{item.OrderType}],业务类型[{item.BusinessType}]已存在");
|
}
|
|
|
|
|
//根据单独校验验证表格中中是否已存在相同数据
|
|
|
|
}
|
#endregion
|
|
}
|