Browse Source

提交

Agv分支2024-11-19
赵新宇 5 months ago
parent
commit
fce346c147
  1. 29
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/DTOs/PostionLocationDTO.cs
  2. 26
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/IPostionLocationAppService.cs
  3. 24
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/Inputs/PostionLocationCheckInput.cs
  4. 25
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/Inputs/PostionLocationEditInput.cs
  5. 28
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/Inputs/PostionLocationImportInput.cs
  6. 21
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/PostionLocationPermissions.cs
  7. 136
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PostionLocations/PostionLocationAppService.cs
  8. 44
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PostionLocations/PostionLocationAutoMapperProfile.cs
  9. 8
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PostionLocations/IPostionLocationManager.cs
  10. 8
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PostionLocations/IPostionLocationRepository.cs
  11. 106
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PostionLocations/PostionLocation.cs
  12. 48
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PostionLocations/PostionLocationManager.cs
  13. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs
  14. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
  15. 31
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PostionLocations/PostionLocationDbContextModelCreatingExtensions.cs
  16. 12
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PostionLocations/PostionLocationEfCoreRepository.cs
  17. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Win_in.Sfs.Basedata.EntityFrameworkCore.csproj

29
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/DTOs/PostionLocationDTO.cs

@ -0,0 +1,29 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
/// <summary>
/// 库位
/// </summary>
[Display(Name = "工作站库位对应关系")]
public class PostionLocationDTO : SfsBaseDataDTOBase, IHasCode, IHasName
{
[Display(Name = "工作站编号")]
[Required(ErrorMessage = "{0}是必填项")]
public string Code { get; set; }
/// <summary>
/// 名称
/// </summary>
[Display(Name = "名称")]
public string Name { get; set; }
/// <summary>
/// WMS库位
/// </summary>
[Display(Name = "库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string LocationCode { get; set; }
}

26
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/IPostionLocationAppService.cs

@ -0,0 +1,26 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Win_in.Sfs.Basedata.tests;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
public interface IPostionLocationAppService
: ISfsBaseDataAppServiceBase<PostionLocationDTO, SfsBaseDataRequestInputBase, PostionLocationEditInput>
, ISfsGetByCodeAppService<PostionLocationDTO>
, ISfsUpsertAppService<PostionLocationEditInput>
{
}

24
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/Inputs/PostionLocationCheckInput.cs

@ -0,0 +1,24 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
public class PostionLocationCheckInput
{
[Display(Name = "工作站编号")]
public string Code { get; set; }
/// <summary>
/// 名称
/// </summary>
[Display(Name = "名称")]
public string Name { get; set; }
/// <summary>
/// WMS库位
/// </summary>
[Display(Name = "库位")]
public string LocationCode { get; set; }
}

25
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/Inputs/PostionLocationEditInput.cs

@ -0,0 +1,25 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
public class PostionLocationEditInput : SfsBaseDataCreateOrUpdateInputBase
{
[Display(Name = "工作站编号")]
[Required(ErrorMessage = "{0}是必填项")]
public string Code { get; set; }
/// <summary>
/// 名称
/// </summary>
[Display(Name = "名称")]
public string Name { get; set; }
/// <summary>
/// WMS库位
/// </summary>
[Display(Name = "库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string LocationCode { get; set; }
}

28
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/Inputs/PostionLocationImportInput.cs

@ -0,0 +1,28 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
[Display(Name = "库位信息")]
public class PostionLocationImportInput : SfsBaseDataImportInputBase
{
[Display(Name = "工作站编号")]
[Required(ErrorMessage = "{0}是必填项")]
public string Code { get; set; }
/// <summary>
/// 名称
/// </summary>
[Display(Name = "名称")]
public string Name { get; set; }
/// <summary>
/// WMS库位
/// </summary>
[Display(Name = "库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string LocationCode { get; set; }
}

21
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PostionLocations/PostionLocationPermissions.cs

@ -0,0 +1,21 @@
using Volo.Abp.Authorization.Permissions;
using Win_in.Sfs.Basedata.Domain;
namespace Win_in.Sfs.Basedata.Application.Contracts;
public static class PostionLocationPermissions
{
public const string Default = BasedataPermissions.GroupName + "." + nameof(PostionLocation);
public const string Create = Default + "." + BasedataPermissions.CreateStr;
public const string Update = Default + "." + BasedataPermissions.UpdateStr;
public const string Delete = Default + "." + BasedataPermissions.DeleteStr;
public static void AddLPostionLocationPermission(this PermissionGroupDefinition permissionGroup)
{
var lPostionLocationPermission = permissionGroup.AddPermission(Default, BasedataPermissionDefinitionProvider.L(nameof(PostionLocation)));
lPostionLocationPermission.AddChild(Create, BasedataPermissionDefinitionProvider.L(BasedataPermissions.CreateStr));
lPostionLocationPermission.AddChild(Update, BasedataPermissionDefinitionProvider.L(BasedataPermissions.UpdateStr));
lPostionLocationPermission.AddChild(Delete, BasedataPermissionDefinitionProvider.L(BasedataPermissions.DeleteStr));
}
}

136
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PostionLocations/PostionLocationAppService.cs

@ -0,0 +1,136 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Validation;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Shared.Application.Contracts;
using Volo.Abp;
namespace Win_in.Sfs.Basedata.Application;
[Authorize]
[Route($"{BasedataConsts.RootPath}PostionLocation")]
public class PostionLocationAppService
: SfsBaseDataWithCodeAppServiceBase<PostionLocation, PostionLocationDTO, SfsBaseDataRequestInputBase, PostionLocationEditInput, PostionLocationImportInput>
, IPostionLocationAppService
{
private readonly IPostionLocationManager _manager;
private readonly IPostionLocationRepository _repository;
private readonly ILocationAppService _locationAppService;
public PostionLocationAppService(
IPostionLocationRepository repository,
IPostionLocationManager manager
, IDistributedCache<PostionLocationDTO> cache
, ILocationAppService locationAppService
) : base(repository, cache)
{
_locationAppService = locationAppService;
_manager = manager;
_repository = repository;
//_PostionLocationCapacityAppService = PostionLocationCapacityAppService;
base.CreatePolicyName = PostionLocationPermissions.Create;
base.UpdatePolicyName = PostionLocationPermissions.Update;
base.DeletePolicyName = PostionLocationPermissions.Delete;
}
[HttpPost("list")]
public override async Task<PagedResultDto<PostionLocationDTO>> GetPagedListByFilterAsync(
SfsBaseDataRequestInputBase sfsRequestInput,
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
Expression<Func<PostionLocation, bool>> expression = sfsRequestInput.Condition.Filters?.Count > 0
? sfsRequestInput.Condition.Filters.ToLambda<PostionLocation>()
: p => true;
var pageResult = await GetPagedListAsync(
expression,
sfsRequestInput.SkipCount,
sfsRequestInput.MaxResultCount,
sfsRequestInput.Sorting,
includeDetails,
cancellationToken).ConfigureAwait(false);
//foreach (var item in pageResult.Items)
//{
// item.ItemCategoryDictionary = await GetItemCategory(item.Code).ConfigureAwait(false);
//}
return pageResult;
}
[HttpPost("get-or-add")]
public virtual async Task<PostionLocationDTO> GetOrAddAsync(PostionLocationEditInput input)
{
await CheckLocationCode(input.LocationCode).ConfigureAwait(false);
var result = await _repository.FirstOrDefaultAsync(p => p.Code == input.Code).ConfigureAwait(false);
if (result == null)
{
var entity = ObjectMapper.Map<PostionLocationEditInput, PostionLocation>(input);
result = await _repository.InsertAsync(entity, true).ConfigureAwait(false);
}
var dto = ObjectMapper.Map<PostionLocation, PostionLocationDTO>(result);
return dto;
}
[HttpPost("upsert")]
public async Task UpsertAsync(PostionLocationEditInput input)
{
var entity= await _repository.GetAsync(p=>p.Code == input.Code).ConfigureAwait(false);
if (entity != null)
{
entity.Name = input.Name;
entity.LocationCode = input.LocationCode;
await _repository.UpdateAsync(entity).ConfigureAwait(false);
}
else
{
entity.Code = input.Code;
entity.LocationCode = input.LocationCode;
entity.Name=input.Name;
await _repository.InsertAsync(entity, true).ConfigureAwait(false);
}
}
private async Task CheckLocationCode(string p_location)
{
var list = await _locationAppService.GetByCodeAsync(p_location).ConfigureAwait(false);
if (list == null )
{
throw new UserFriendlyException($"{p_location}库位编码不存在,请查看库位信息!");
}
}
}

44
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PostionLocations/PostionLocationAutoMapperProfile.cs

@ -0,0 +1,44 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
namespace Win_in.Sfs.Basedata.Application;
public partial class BasedataApplicationAutoMapperProfile : Profile
{
private void PostionLocationAutoMapperProfile()
{
CreateMap<PostionLocation, PostionLocationDTO>()
.ReverseMap();
CreateMap<PostionLocationImportInput, PostionLocation>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.TenantId)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
//.Ignore(x => x.EnableMixItem)
//.Ignore(x => x.EnableMixLot)
//.Ignore(x => x.EnableMixStatus)
//.Ignore(x => x.EnableNegative)
//.Ignore(x => x.EnableKeepZero)
//.Ignore(x => x.EnableOpportunityCount)
//.Ignore(x => x.EnablePick)
//.Ignore(x => x.EnableOverPick)
//.Ignore(x => x.EnableWholeStore)
//.Ignore(x => x.EnableBreakStore)
//.Ignore(x => x.EnableShip)
//.Ignore(x => x.EnableReceive)
//.Ignore(x => x.EnableReturnToSupplier)
//.Ignore(x => x.EnableReturnFromCustomer)
//.Ignore(x => x.EnableSplitPallet)
//.Ignore(x => x.EnableSplitBox)
;
CreateMap<PostionLocation, PostionLocationImportInput>()
.Ignore(x => x.ReportStatus)
.Ignore(x => x.ReportReason);
}
}

8
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PostionLocations/IPostionLocationManager.cs

@ -0,0 +1,8 @@
using Volo.Abp.Domain.Services;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.Domain;
public interface IPostionLocationManager : IDomainService, IBulkImportService<PostionLocation>
{
}

8
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PostionLocations/IPostionLocationRepository.cs

@ -0,0 +1,8 @@
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.Domain;
public interface IPostionLocationRepository : ISfsBaseDataRepositoryBase<PostionLocation>, ISfsBulkRepositoryBase<PostionLocation>
{
}

106
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PostionLocations/PostionLocation.cs

@ -0,0 +1,106 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Domain;
public class PostionLocation : SfsBaseDataAggregateRootBase, IHasCode, IHasName
{
/// <summary>
/// 代码
/// </summary>
[IgnoreUpdate]
[Display(Name ="工作站编号")]
public string Code { get; set; }
/// <summary>
/// 名称
/// </summary>
[Display(Name = "名称")]
public string Name { get; set; }
/// <summary>
/// WMS库位
/// </summary>
[Display(Name ="库位")]
public string LocationCode { get; set; }
///// <summary>
///// 库位类型
///// </summary>
//public EnumLocationType Type { get; set; }
///// <summary>
///// ERP系统库位代码
///// </summary>
//public string ErpLocationCode { get; set; }
///// <summary>
///// 仓库代码
///// </summary>
//public string WarehouseCode { get; set; }
///// <summary>
///// 区域代码
///// </summary>
//public string AreaCode { get; set; }
///// <summary>
///// 库位组代码
///// </summary>
//public string LocationGroupCode { get; set; }
///// <summary>
///// 工作组代码
///// </summary>
//public string WorkGroupCode { get; set; }
///// <summary>
///// 货架号
///// </summary>
//public string ShelfCode { get; set; }
///// <summary>
///// 行号
///// </summary>
//public int RowCode { get; set; }
///// <summary>
///// 列号
///// </summary>
//public int ColumnCode { get; set; }
///// <summary>
///// 默认库存状态
///// </summary>
//public EnumInventoryStatus DefaultInventoryStatus { get; set; }
///// <summary>
///// 拣料优先级
///// </summary>
//public int PickPriority { get; set; }
///// <summary>
///// 拣料顺序
///// </summary>
//public int PickOrder { get; set; }
//public bool EnableMixItem { get; set; } = true; // 可以混物品
//public bool EnableMixLot { get; set; } = true; // 可以混批次
//public bool EnableMixStatus { get; set; } = true; // 可以混状态
//public bool EnableNegative { get; set; } = true; // 可以负库存
//public bool EnableKeepZero { get; set; } = true; // 可以保留零库存
//public bool EnableOpportunityCount { get; set; } = true; // 可以机会盘点
//public bool EnablePick { get; set; } = true; // 可以领料
//public bool EnableOverPick { get; set; } = true; // 可以过量领料
//public bool EnableWholeStore { get; set; } = true; // 可以整包存储
//public bool EnableBreakStore { get; set; } = true; // 可以散件存储
//public bool EnableShip { get; set; } = true; // 可以发出
//public bool EnableReceive { get; set; } = true; // 可以接收
//public bool EnableReturnToSupplier { get; set; } = true; // 可以退货给供应商
//public bool EnableReturnFromCustomer { get; set; } = true; // 可以接收客户退货
//public bool EnableSplitBox { get; set; } = true; //是否可以拆箱
//public bool EnableSplitPallet { get; set; } = true; //是否可以拆托
}

48
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PostionLocations/PostionLocationManager.cs

@ -0,0 +1,48 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Domain;
public class PostionLocationManager : DomainService, IPostionLocationManager
{
private readonly IPostionLocationRepository _repository;
private readonly IWarehouseRepository _warehourseRepository;
private readonly IAreaRepository _areaRepository;
private readonly ILocationGroupRepository _locationGroupRepository;
private readonly IWorkGroupRepository _workGroupRepository;
public PostionLocationManager(IPostionLocationRepository repository, IWarehouseRepository warehourseRepository
, IAreaRepository areaRepository
, ILocationGroupRepository locationGroupRepository
, IWorkGroupRepository workGroupRepository
)
{
_repository = repository;
_warehourseRepository = warehourseRepository;
_areaRepository = areaRepository;
_locationGroupRepository = locationGroupRepository;
_workGroupRepository = workGroupRepository;
}
/// <summary>
/// 执行导入
/// </summary>
public virtual async Task ImportDataAsync(List<PostionLocation> mergeEntities, List<PostionLocation> deleteEntities = null)
{
if (deleteEntities != null && deleteEntities.Count > 0)
{
await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
}
await _repository.BulkMergeAsync(mergeEntities).ConfigureAwait(false);
}
}

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs

@ -59,6 +59,8 @@ public class BasedataDbContext : AbpDbContext<BasedataDbContext>, IBasedataDbCon
public DbSet<Equipment> Equipments { get; set; }
public DbSet<SplitPackingRec> SplitPackingRecs { get; set; }
public DbSet<PostionLocation> PostionLocations { get; set; }
public BasedataDbContext(DbContextOptions<BasedataDbContext> options)
: base(options)

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs

@ -61,6 +61,7 @@ public class BasedataEntityFrameworkCoreModule : AbpModule
context.Services.AddTransient<IDockRepository, DockEfCoreRepository>();
context.Services.AddTransient<ILocationGroupRepository, LocationGroupEfCoreRepository>();
context.Services.AddTransient<ILocationRepository, LocationEfCoreRepository>();
context.Services.AddTransient<IPostionLocationRepository, PostionLocationEfCoreRepository>();
context.Services.AddTransient<IProductionLineRepository, ProductionLineEfCoreRepository>();
context.Services.AddTransient<IWorkGroupRepository, WorkGroupEfCoreRepository>();
context.Services.AddTransient<IItemQualityRepository, ItemQualityEfCoreRepository>();

31
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PostionLocations/PostionLocationDbContextModelCreatingExtensions.cs

@ -0,0 +1,31 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.EntityFrameworkCore;
namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
public static class PostionLocationDbContextModelCreatingExtensions
{
public static void ConfigurePostionLocation(this ModelBuilder builder, BasedataModelBuilderConfigurationOptions options)
{
builder.Entity<PostionLocation>(b =>
{
//Configure table & schema name
b.ToTable(options.TablePrefix + nameof(Location), options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Configure Sfs base properties
b.ConfigureSfsBase();
//Properties
//Relations
//None
//Indexes
b.HasIndex(q => new { q.Code }).IsUnique();
});
}
}

12
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PostionLocations/PostionLocationEfCoreRepository.cs

@ -0,0 +1,12 @@
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
public class PostionLocationEfCoreRepository : SfsBaseDataEfCoreRepositoryBase<BasedataDbContext, PostionLocation>, IPostionLocationRepository, ISfsBulkRepositoryBase<PostionLocation>
{
public PostionLocationEfCoreRepository(IDbContextProvider<BasedataDbContext> dbContextProvider) : base(dbContextProvider)
{
}
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Win_in.Sfs.Basedata.EntityFrameworkCore.csproj

@ -14,7 +14,6 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.EntityFrameworkCore" Version="5.3.5" />
<ProjectReference Include="..\..\..\Shared\src\Win_in.Sfs.Shared.EntityFrameworkCore\Win_in.Sfs.Shared.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\Win_in.Sfs.Basedata.Domain\Win_in.Sfs.Basedata.Domain.csproj" />
</ItemGroup>

Loading…
Cancel
Save