zs
2025-05-07 4456f43c6c73185a9f7ce46cdcdf94ab2053f02e
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockRecordAppService.cs
@@ -1,8 +1,8 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord;
using CmsQueryExtensions;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
@@ -14,33 +14,33 @@
namespace CMS.Plugin.HIAWms.Application.Implements;
/// <summary> 
/// 出入库记录表应用服务
/// 出入库记录应用服务
/// </summary> 
public class WmsInOutStockRecordAppService : CMSPluginAppService, IWmsInOutStockRecordAppService
{
    private readonly IWmsInOutStockRecordRepository _wmsInOutStockRecordRepository;
    private readonly IWmsInOutStockRecordRepository wmsInOutStockRecordRepository;
    /// <summary> 
    /// Initializes a new instance of the <see cref="WmsInOutStockRecordAppService"/> class. 
    /// </summary> 
    /// <param name="WmsInOutStockRecordRepository">The task job repository.</param> 
    public WmsInOutStockRecordAppService(IWmsInOutStockRecordRepository wmsInOutStockRecordRepository)
    public WmsInOutStockRecordAppService(IWmsInOutStockRecordRepository _WmsInOutStockRecordRepository)
    {
        _wmsInOutStockRecordRepository = wmsInOutStockRecordRepository;
        wmsInOutStockRecordRepository = _WmsInOutStockRecordRepository;
    }
    /// <summary> 
    /// 获取指定出入库记录表
    /// 获取指定出入库记录
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual async Task<WmsInOutStockRecordDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(await _wmsInOutStockRecordRepository.GetAsync(id));
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(await wmsInOutStockRecordRepository.GetAsync(id));
    }
    /// <summary> 
    /// 分页获取出入库记录表
    /// 分页获取出入库记录
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
@@ -60,8 +60,8 @@
        #endregion
        var count = await _wmsInOutStockRecordRepository.GetCountAsync(whereConditions);
        var list = await _wmsInOutStockRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        var count = await wmsInOutStockRecordRepository.GetCountAsync(whereConditions);
        var list = await wmsInOutStockRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsInOutStockRecordDto>(count, ObjectMapper.Map<List<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(list));
    }
@@ -90,7 +90,7 @@
    }
    /// <summary> 
    /// 新建出入库记录表
    /// 新建出入库记录
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
@@ -99,16 +99,20 @@
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await wmsInOutStockRecordRepository.NameExistAsync(input.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Id]);
        }
        var maxSort = await _wmsInOutStockRecordRepository.GetMaxSortAsync();
        var maxSort = await wmsInOutStockRecordRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsInOutStockRecordCreateDto, WmsInOutStockRecord>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await _wmsInOutStockRecordRepository.InsertAsync(insertObj);
        await wmsInOutStockRecordRepository.InsertAsync(insertObj);
        if (input.Sort.HasValue && insertObj.Sort != maxSort)
        {
@@ -119,7 +123,7 @@
    }
    /// <summary> 
    /// 更新出入库记录表
    /// 更新出入库记录
    /// </summary> 
    /// <param name="id"></param> 
    /// <param name="input"></param> 
@@ -129,8 +133,12 @@
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await _wmsInOutStockRecordRepository.GetAsync(id);
        var updateObj = await wmsInOutStockRecordRepository.GetAsync(id);
        var exist = await wmsInOutStockRecordRepository.NameExistAsync(input.Id, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Id]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
@@ -147,15 +155,16 @@
        updateObj.TaskNo = input.TaskNo;
        updateObj.SourcePlace = input.SourcePlace;
        updateObj.ToPlace = input.ToPlace;
        updateObj.IsDisabled = input.IsDisabled;
        await _wmsInOutStockRecordRepository.UpdateAsync(updateObj);
        await wmsInOutStockRecordRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(updateObj);
    }
    /// <summary> 
    /// 克隆出入库记录表
    /// 克隆出入库记录
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
@@ -195,17 +204,17 @@
    }
    /// <summary> 
    /// 删除单个出入库记录表
    /// 删除单个出入库记录
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual Task DeleteAsync(Guid id)
    {
        return _wmsInOutStockRecordRepository.DeleteAsync(id);
        return wmsInOutStockRecordRepository.DeleteAsync(id);
    }
    /// <summary> 
    /// 删除多个出入库记录表
    /// 删除多个出入库记录
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
@@ -218,14 +227,14 @@
    }
    /// <summary> 
    /// 调整排序出入库记录表
    /// 调整排序出入库记录
    /// </summary> 
    /// <param name="id"></param> 
    /// <param name="sort"></param> 
    /// <returns></returns> 
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _wmsInOutStockRecordRepository.GetListAsync(null, nameof(WmsInOutStockRecord.Sort));
        var list = await wmsInOutStockRecordRepository.GetListAsync(null, nameof(WmsInOutStockRecord.Sort));
        if (list != null && list.Any())
        {
            var initSort = 1;
@@ -252,22 +261,130 @@
            }
        }
        await _wmsInOutStockRecordRepository.UpdateManyAsync(list);
        await wmsInOutStockRecordRepository.UpdateManyAsync(list);
    }
    /// <summary> 
    /// 导入出入库记录表
    /// 导入出入库记录
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public async Task ImportAsync(WmsInOutStockRecordsImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsInOutStockRecordCreateDtos = new List<(int RowIndex, WmsInOutStockRecordCreateDto Item)>();
        var wmsInOutStockRecordUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockRecordUpdateDto Item)>();
        var importItems = input.WmsInOutStockRecords;
        if (importItems != null && importItems.Any())
        {
            #region 导入校验
            // 判断名称是否重复,并输出第几行重复
            var duplicateWmsInOutStockRecords = importItems.GroupBy(x => x.Id).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsInOutStockRecords?.Any() == true)
            {
                var duplicateWmsInOutStockRecordMsgs = duplicateWmsInOutStockRecords.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key}  名称重复");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockRecordMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.Id.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.Id.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockRecord名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsInOutStockRecord = await wmsInOutStockRecordRepository.FindByNameAsync(impItem.Id);
                if (oldWmsInOutStockRecord != null)
                {
                    var wmsInOutStockRecordUpdateDto = new WmsInOutStockRecordUpdateDto
                    {
                        OrderNo = impItem.OrderNo,
MaterialName = impItem.MaterialName,
MaterialNo = impItem.MaterialNo,
StockType = impItem.StockType,
ContainerNo = impItem.ContainerNo,
MaterialModel = impItem.MaterialModel,
OperateTime = impItem.OperateTime,
Remark = impItem.Remark,
MaterialId = impItem.MaterialId,
TaskNo = impItem.TaskNo,
SourcePlace = impItem.SourcePlace,
ToPlace = impItem.ToPlace,
IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockRecordUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockRecord.Id, wmsInOutStockRecordUpdateDto));
                }
                else
                {
                    var wmsInOutStockRecordCreateDto = new WmsInOutStockRecordCreateDto
                    {
                        OrderNo = impItem.OrderNo,
MaterialName = impItem.MaterialName,
MaterialNo = impItem.MaterialNo,
StockType = impItem.StockType,
ContainerNo = impItem.ContainerNo,
MaterialModel = impItem.MaterialModel,
OperateTime = impItem.OperateTime,
Remark = impItem.Remark,
MaterialId = impItem.MaterialId,
TaskNo = impItem.TaskNo,
SourcePlace = impItem.SourcePlace,
ToPlace = impItem.ToPlace,
IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockRecordCreateDtos.Add((impItem.RowIndex, wmsInOutStockRecordCreateDto));
                }
            }
        }
        // 新增
        foreach (var wmsInOutStockRecordDto in wmsInOutStockRecordCreateDtos)
        {
            try
            {
                await CreateAsync(wmsInOutStockRecordDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockRecordDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // 更新
        foreach (var wmsInOutStockRecordDto in wmsInOutStockRecordUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsInOutStockRecordDto.Id, wmsInOutStockRecordDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockRecordDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <summary> 
    /// 导出出入库记录表
    /// 导出出入库记录
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
@@ -288,7 +405,7 @@
        #endregion
        var list = await _wmsInOutStockRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var list = await wmsInOutStockRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(list);
        var sheets = new Dictionary<string, object>
@@ -296,12 +413,12 @@
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsInOutStockRecord列表" : result.Count == 1 ? result[0]?.MaterialName : "WmsInOutStockRecord模版";
        var fileName = result.Count > 1 ? "出入库记录列表" : result.Count == 1 ? result[0]?.Id : "WmsInOutStockRecord模版";
        return (sheets, fileName);
    }
    /// <summary> 
    /// 校验出入库记录表,当新建或更新时
    /// 校验出入库记录,当新建或更新时
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns>