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 }