You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

58 lines
2.1 KiB

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Domain.Services;
using Win_in.Sfs.Shared.Framework;
namespace Win_in.Sfs.Label.Domain;
public class LabelDefinitionManager : DomainService, ILabelDefinitionManager
{
private readonly ILabelDefinitionRepository _labelDefinitionRepository;
private readonly ISerialNumberGenerator _numberGenerator;
public LabelDefinitionManager(ILabelDefinitionRepository labelDefinitionRepository, ISerialNumberGenerator numberGenerator)
{
_labelDefinitionRepository = labelDefinitionRepository;
_numberGenerator = numberGenerator;
}
public virtual async Task<LabelDefinition> GetByTypeAsync(string labelType)
{
var result = await _labelDefinitionRepository.FindAsync(p => p.Code == labelType).ConfigureAwait(false);
if (result == null)
{
throw new UserFriendlyException($"未找到 {labelType} 单据的配置信息");
}
return result;
}
private async Task<SerialNumberParam> GetNumberParamAsync(string labelType)
{
var labelDefinition = await GetByTypeAsync(labelType).ConfigureAwait(false);
var param = new SerialNumberParam(labelDefinition.Prefix, labelDefinition.Format,
labelDefinition.Separator, labelDefinition.SerialLength);
return param;
}
public virtual async Task<string> GenerateAsync(string labelType, DateTime time)
{
var param = await GetNumberParamAsync(labelType).ConfigureAwait(false);
var number = await _numberGenerator.CreateAsync(param, time).ConfigureAwait(false);
return number;
}
public virtual async Task<List<string>> GenerateManyAsync(string labelType, DateTime time, int count)
{
var numbers = new List<string>();
var param = await GetNumberParamAsync(labelType).ConfigureAwait(false);
for (var i = 0; i < count; i++)
{
var number = await _numberGenerator.CreateAsync(param, time).ConfigureAwait(false);
numbers.Add(number);
}
return numbers;
}
}