Browse Source

Merge branch 'dev_DY_CC' of http://dev.ccwin-in.com:3000/BoXu.Zheng/WZC2 into dev_DY_CC

dev_DY_CC
lvzb 1 year ago
parent
commit
b51320d461
  1. 4
      be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/Properties/PublishProfiles/FolderProfile.pubxml
  2. 15
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs
  3. 5
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaDTO.cs
  4. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentDTO.cs
  5. 6
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentEditInput.cs
  6. 13
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentImportInput.cs
  7. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
  8. 72
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAppService.cs
  9. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAutoMapperProfile.cs
  10. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAutoMapperProfile.cs
  11. 44
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs
  12. 33
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs
  13. 4
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Win_in.Sfs.Basedata.Domain.Shared.csproj
  14. 8
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/Equipment.cs
  15. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs
  16. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs
  17. 11
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumRecommendType.cs
  18. 53
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/DTOs/EquipmentRecordDTO.cs
  19. 22
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/EquipmentRecordPermissions.cs
  20. 45
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/IEquipmentRecordAppService.cs
  21. 57
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/Inputs/EquipmentRecordEditInput.cs
  22. 53
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/Inputs/EquipmentRecordImportInput.cs
  23. 20
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/ProductRecyclePermissions.cs
  24. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Win_in.Sfs.Wms.Store.Application.Contracts.csproj
  25. 204
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Equipments/EquipmentRecordAppService.cs
  26. 43
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Equipments/EquipmentRecordAutoMapperProfile.cs
  27. 16
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs
  28. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationAutoMapperProfile.cs
  29. 49
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/EquipmentRecord.cs
  30. 112
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/EquipmentRecordDetail.cs
  31. 126
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/EquipmentRecordManager.cs
  32. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/IEquipmentRecordManager.cs
  33. 10
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/IEquipmentRecordRepository.cs
  34. 10
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobManager.cs
  35. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobRepository.cs
  36. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleExtension.cs
  37. 66
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJob.cs
  38. 88
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobDetail.cs
  39. 10
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobManager.cs
  40. 76
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Equipments/EquipmentRecordDbContextModelCreatingExtensions.cs
  41. 23
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Equipments/EquipmentRecordEfCoreRepository.cs
  42. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContext.cs
  43. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContextModelCreatingExtensions.cs
  44. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreEntityFrameworkCoreModule.cs
  45. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Win_in.Sfs.Wms.Store.EntityFrameworkCore.csproj

4
be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/Properties/PublishProfiles/FolderProfile.pubxml

@ -4,13 +4,13 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<DeleteExistingFiles>true</DeleteExistingFiles>
<DeleteExistingFiles>false</DeleteExistingFiles>
<ExcludeApp_Data>false</ExcludeApp_Data>
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>.\..\..\..\OutPut\BaseData\</PublishUrl>
<PublishUrl>C:\发布\WMS</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<TargetFramework>net6.0</TargetFramework>

15
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs

@ -41,8 +41,21 @@ public class IssueNoteController : AbpController
p.ToPackingCode = string.Empty;
if(p.PositionCode.Contains('W'))
{
p.RecommendType = EnumRecommendType.PositionCode;
p.RecommendType = EnumRecommendType.W;
}
else if(p.PositionCode.Contains('Q'))
{
p.RecommendType = EnumRecommendType.Q;
}
else if (p.PositionCode.Contains('K'))
{
p.RecommendType = EnumRecommendType.K;
}
else
{
p.RecommendType = EnumRecommendType.None;
}
});
await _issueNoteAppService.CreateAsync(input).ConfigureAwait(false);

5
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaDTO.cs

@ -11,11 +11,6 @@ using System.Collections.Generic;
public class EquipmentAreaDTO : SfsBaseDataDTOBase, IHasCode
{
/// <summary>
/// 器具编号
/// </summary>

9
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentDTO.cs

@ -7,7 +7,7 @@ namespace Win_in.Sfs.Basedata.Application.Contracts;
using System;
using System.Collections.Generic;
[Display(Name = "物品基本信息")]
[Display(Name = "器具基本信息")]
public class EquipmentDTO : SfsBaseDataDTOBase, IHasCode
{
@ -51,4 +51,11 @@ public class EquipmentDTO : SfsBaseDataDTOBase, IHasCode
[Display(Name = "创建时间")]
public DateTime CreatTime { get; set; } = DateTime.Now;
/// <summary>
/// 标包数量
/// </summary>
[Display(Name = "标包数")]
public decimal StdQty { get; set; }
}

6
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentEditInput.cs

@ -46,7 +46,11 @@ public class EquipmentEditInput : SfsBaseDataCreateOrUpdateInputBase
[Display(Name = "创建时间")]
public DateTime CreatTime { get; set; }=DateTime.Now;
/// <summary>
/// 标包数量
/// </summary>
[Display(Name = "标包数")]
public decimal StdQty { get; set; }
//#region Base
///// <summary>

13
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentImportInput.cs

@ -36,11 +36,6 @@ public class EquipmentImportInput : SfsBaseDataImportInputBase
[Display(Name = "状态")]
public int State { get; set; } = 0;
/// <summary>
/// 备注
/// </summary>
[Display(Name = "备注")]
public string Remark { get; set; } = string.Empty;
/// <summary>
/// 创建人
/// </summary>
[Display(Name = "创建人")]
@ -52,5 +47,13 @@ public class EquipmentImportInput : SfsBaseDataImportInputBase
[Display(Name = "创建时间")]
public DateTime CreatTime { get; set; } = DateTime.Now;
/// <summary>
/// 标包数量
/// </summary>
[Display(Name = "标包数")]
public decimal StdQty { get; set; }
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs

@ -52,5 +52,6 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
EquipmentAutoMapperProfile();
SplitPackingRecAutoMapperProfile();
KittingAutoMapperProfile();
}
}

72
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAppService.cs

@ -1,11 +1,13 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
@ -15,6 +17,8 @@ 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.Application.Contracts;
using Win_in.Sfs.Shared.Application.Contracts.ExportAndImport;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
@ -29,14 +33,17 @@ public class EquipmentAppService
//private readonly ItemValidator _itemValidator;
private readonly IEquipmentManager _manager;
private new readonly IEquipmentRepository _repository;
private readonly IExportImportService _importService;
public EquipmentAppService(
IEquipmentRepository repository,
IDistributedCache<EquipmentDTO> cache,
IExportImportService importService,
// ItemValidator itemValidator,
IEquipmentManager manager)
: base(repository, cache)
{
_importService=importService;
_repository = repository;
//_itemValidator = itemValidator;
_manager = manager;
@ -52,8 +59,53 @@ public class EquipmentAppService
{
await Task.CompletedTask.ConfigureAwait(false);
}
//public override async Task<IActionResult> ImportAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file)
//{
// List<EquipmentErrorDTO> errors = new List<EquipmentErrorDTO>();
// using var ms = new MemoryStream();
// await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false);
// var inputFileBytes = ms.GetAllBytes();
// var dtos=_importService.Import<EquipmentEditInput>(inputFileBytes).ToList();
// var list=ObjectMapper.Map<List<EquipmentEditInput>, List<Equipment>>(dtos);
// foreach (var itm in list)
// {
// itm.SetId(GuidGenerator.Create());
// itm.Code = string.Format("{0}{1}", "Q", itm.Code);
// }
// ////var bytes = result.FileContents;
// ////result.FileContents = null;
// ////HttpContextAccessor.HttpContext.Response.Headers.AccessControlExposeHeaders = "X-Response";
// ////HttpContextAccessor.HttpContext.Response.Headers.Add("X-Response",
// //// JsonSerializer.Serialize(new { result.ExceptionMessage, result.FileName, result.FileCode, result }));
// ////Console.WriteLine(@"导入错误信息:" + result.ExceptionMessage);
// ////var resultAction = new TestResult(bytes, ExportImportService.ContentType) { FileDownloadName = result.FileName };
// ////resultAction.errorNum = result.ErrorNum;
// ////resultAction.successNum = resultAction.successNum;
// //return resultAction;
// // return base.ImportAsync(requestInput, file);
//}
//protected ICategoryAppService _categoryApp => LazyServiceProvider.LazyGetRequiredService<ICategoryAppService>();
//protected IItemCategoryAppService _itemCategoryApp => LazyServiceProvider.LazyGetRequiredService<IItemCategoryAppService>();
@ -227,10 +279,30 @@ public class EquipmentAppService
public virtual async Task UpsertAsync(EquipmentEditInput input)
{
var entity = ObjectMapper.Map<EquipmentEditInput, Equipment>(input);
await _repository.UpsertAsync(entity).ConfigureAwait(false);
}
[HttpPost]
[Route("")]
public override async Task<EquipmentDTO> CreateAsync(EquipmentEditInput input)
{
var first= _repository.WithDetails().FirstOrDefault(p => p.Code == input.Code);
if (first == null)
{
var entity = ObjectMapper.Map<EquipmentEditInput, Equipment>(input);
entity.Code = string.Format("{0}{1}", "Q", entity.Code);
entity.Model = "Q";
await _repository.UpsertAsync(entity).ConfigureAwait(false);
var entity1=_repository.WithDetails().FirstOrDefault(p => p.Code == input.Code);
return ObjectMapper.Map<Equipment,EquipmentDTO>(entity1);
}
else
{
throw new UserFriendlyException($"已存在器具编号{input.Code}!");
}
}
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAutoMapperProfile.cs

@ -19,6 +19,7 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
.Ignore(x => x.Remark)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
;
//CreateMap<Equipment, EquipmentImportInput>()

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAutoMapperProfile.cs

@ -19,6 +19,8 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
.Ignore(x => x.Remark)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
.ForMember(p =>p.Code, p => p.MapFrom(q =>"Q" +q.Code))
;
//CreateMap<Equipment, EquipmentImportInput>()

44
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs

@ -93,25 +93,31 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase<Kitting, Kitt
[Route("{id}")]
public override Task<KittingDTO> UpdateAsync(Guid id, KittingEditInput input)
{
var detailquery = _repository.WithDetails();
var first = detailquery.FirstOrDefault(p => p.Id == id);
if (first.Code == input.Code)
{
throw new UserFriendlyException($"已存在编码:{input.Code}的Kitting箱");
}
var query = from itm in input.Details
join itm1 in first.Details on itm.PartCode equals itm1.PartCode
select itm;
List<string> errors = new List<string>();
foreach (var itm in query.ToList())
{
errors.Add(itm.PartCode);
}
if(errors.Count > 0)
{
throw new UserFriendlyException($"零件号${string.Join(",", errors)}已存在");
}
//var detailquery = _repository.WithDetails();
//var first = detailquery.FirstOrDefault(p => p.Id == id);
//var ids=input.Details.Select(p => p.Id);
//first.Details.Where(p =>ids.Contains(p.Id));
return base.UpdateAsync(id, input);
//var entity = ObjectMapper.Map<KittingEditInput, Kitting>(input);
////entity.SetId(id);
////entity.Code = first.Code;
//await _repository.UpsertAsync(entity).ConfigureAwait(false);
//var firstEntity = detailquery.FirstOrDefault(p => p.Id == id);
//return ObjectMapper.Map<Kitting, KittingDTO>(first);
}
[HttpPost("update")]
@ -133,6 +139,8 @@ public class KittingAppService : SfsBaseDataWithCodeAppServiceBase<Kitting, Kitt
{
var entity = ObjectMapper.Map<KittingEditInput, Kitting>(input);
await _repository.UpsertAsync(entity).ConfigureAwait(false);
}

33
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs

@ -1,6 +1,9 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Caching;
using Volo.Abp.Uow;
@ -51,18 +54,42 @@ public class PositionCodeAppService
if(input.Code.Contains('W'))
{
input.Type = EnumRecommendType.PositionCode;
input.Type = EnumRecommendType.W;
}
else if (input.Code.Contains('Q'))
{
input.Type = EnumRecommendType.Q;
}
else if(input.Code.Contains('K'))
{
input.Type = EnumRecommendType.KittingCode;
input.Type = EnumRecommendType.K;
}
else
{
input.Type = EnumRecommendType.WareCode;
input.Type = EnumRecommendType.None;
}
return await base.CreateAsync(input).ConfigureAwait(false);
}
/// <summary>
/// 用来重写 导入数据时可以加工数据
/// </summary>
/// <param name="dictionary"></param>
/// <returns></returns>
protected override async Task<Dictionary<PositionCode, EntityState>> ImportProcessingEntityAsync(
Dictionary<PositionCode, EntityState> dictionary)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
foreach (var positionCode in addList)
{
positionCode.Code = positionCode.Type + positionCode.Code;
positionCode.CreatorId= CurrentUser.Id;
}
return dictionary;
}
}

4
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Win_in.Sfs.Basedata.Domain.Shared.csproj

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
@ -9,7 +9,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Volo.Abp.Validation" Version="5.3.5" />
</ItemGroup>

8
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/Equipment.cs

@ -33,9 +33,6 @@ public class Equipment : SfsBaseDataAggregateRootBase, IHasCode
/// 状态
/// </summary>
public int State { get; set; }
/// <summary>
/// 备注
/// </summary>
/// <summary>
/// 创建人
@ -47,6 +44,11 @@ public class Equipment : SfsBaseDataAggregateRootBase, IHasCode
/// </summary>
public DateTime CreatTime { get; set; }
/// <summary>
/// 标包数量
/// </summary>
public decimal StdQty { get; set; }

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs

@ -14,7 +14,6 @@ public class PositionCode : SfsBaseDataAggregateRootBase, IHasCode
/// 位置代码
/// </summary>
[Display(Name = "位置代码")]
[IgnoreUpdate]
public string Code { get; set; }
/// <summary>
/// 物料号

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

@ -43,7 +43,7 @@ public static class KittingDbContextModelCreatingExtensions
b.Property(p => p.Desc1).HasMaxLength(SfsPropertyConst.DescLength);
//Properties
b.Property(q => q.Desc2).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Desc2).HasMaxLength(SfsPropertyConst.CodeLength);
//Relations
b.Property(q => q.MasterId).IsRequired();
//Indexes

11
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumRecommendType.cs

@ -7,21 +7,26 @@ namespace Win_in.Sfs.Shared.Domain.Shared;
/// </summary>
public enum EnumRecommendType
{
/// <summary>
/// 空枚举
/// </summary>
None = 0,
/// <summary>
/// 位置码
/// </summary>
[Display(Name = "位置码")]
PositionCode = 1,
W = 1,
/// <summary>
/// 器具码
/// </summary>
[Display(Name = "器具码")]
WareCode = 2,
Q = 2,
/// <summary>
/// Kitting箱码
/// </summary>
[Display(Name = "Kitting箱码")]
KittingCode = 3,
K = 3
}

53
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/DTOs/EquipmentRecordDTO.cs

@ -0,0 +1,53 @@
using System;
using System.ComponentModel;
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.Wms.Store.Application.Contracts;
[Display(Name = "器具操作")]
public class EquipmentRecordDTO : SfsBasicDTOBase
{
/// <summary>
/// 器具编码
/// </summary>
[Display(Name = "器具编码")]
public string EqptCode { get; set; }
/// <summary>
/// 条码编号
/// </summary>
[Display(Name = "条码编号")]
public string BarCode { get; set; }
/// <summary>
/// 零件号
/// </summary>
[Display(Name = "零件号")]
public string PartCode { get; set; }
/// <summary>
/// 批次
/// </summary>
[Display(Name = "批次")]
public string Batch { get; set; }
/// <summary>
/// 库位
/// </summary>
[Display(Name = "库位")]
public string LocCode { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// 状态
/// </summary>
[Display(Name = "状态")]
public int State { get; set; }
/// <summary>
/// 记录类型
/// </summary>
[Display(Name = "记录类型")]
public int Type { get; set; }
}

22
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/EquipmentRecordPermissions.cs

@ -0,0 +1,22 @@
using Volo.Abp.Authorization.Permissions;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Equipments;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class EquipmentRecordPermissions
{
public const string Default = StorePermissions.GroupName + "." + nameof(PurchaseOrder);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
public static void AddEquipmentRecordPermission(this PermissionGroupDefinition permissionGroup)
{
var purchaseOrderPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(EquipmentRecord)));
purchaseOrderPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
purchaseOrderPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
purchaseOrderPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}

45
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/IEquipmentRecordAppService.cs

@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IEquipmentRecordAppService
:
ISfsStoreMasterAppServiceBase<EquipmentRecordDTO, SfsStoreRequestInputBase, EquipmentRecordEditInput, EquipmentRecordDTO, SfsStoreRequestInputBase>,
ISfsCheckStatusAppService
, ISfsUpsertAppService<EquipmentRecordEditInput>
{
///// <summary>
///// 打开订单明细
///// </summary>
///// <returns></returns>
//Task OpenDetailAsync(Guid id, Guid detailId);
///// <summary>
///// 关闭订单明细
///// </summary>
///// <returns></returns>
//Task CloseDetailAsync(Guid id, Guid detailId);
///// <summary>
///// 更新订单明细
///// </summary>
///// <param name="number"></param>
///// <param name="input"></param>
///// <returns></returns>
//Task UpdateDetailsAsync(string number,List<PurchaseOrderDetailUpdateInput> input);
///// <summary>
///// 【批量创建】到货通知 (收货单)
///// </summary>
///// <param name="inputs"></param>
///// <returns></returns>
//Task<List<PurchaseOrderDTO>> CreateManyAsync(List<PurchaseOrderEditInput> inputs);
//Task<List<PurchaseOrderDTO>> GetListBySupplierCodeAsync(string supplierCode, string itemCode);
//Task<List<string>> GetNoPoBillList(List<string> poBillNo);
//Task<PurchaseOrderDTO> CreateOrUpdateAsync(PurchaseOrderEditInput input);
}

57
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/Inputs/EquipmentRecordEditInput.cs

@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
[Display(Name = "器具操作")]
public class EquipmentRecordEditInput
: SfsStoreCreateOrUpdateInputBase
{
/// <summary>
/// 器具编码
/// </summary>
[Display(Name = "器具编码")]
public string EqptCode { get; set; }
/// <summary>
/// 条码编号
/// </summary>
[Display(Name = "条码编号")]
public string BarCode { get; set; }
/// <summary>
/// 零件号
/// </summary>
[Display(Name = "零件号")]
public string PartCode { get; set; }
/// <summary>
/// 批次
/// </summary>
[Display(Name = "批次")]
public string Batch { get; set; }
/// <summary>
/// 库位
/// </summary>
[Display(Name = "库位")]
public string LocCode { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// 状态
/// </summary>
[Display(Name = "状态")]
public int State { get; set; }
/// <summary>
/// 记录类型
/// </summary>
[Display(Name = "记录类型")]
public int Type { get; set; }
}

53
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Equipments/Inputs/EquipmentRecordImportInput.cs

@ -0,0 +1,53 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Application.Contracts.ExportAndImport;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
[Display(Name = "器具操作")]
public class EquipmentRecordImportInput : SfsStoreImportInputBase
{
/// <summary>
/// 器具编码
/// </summary>
[Display(Name = "器具编码")]
public string EqptCode { get; set; }
/// <summary>
/// 条码编号
/// </summary>
[Display(Name = "条码编号")]
public string BarCode { get; set; }
/// <summary>
/// 零件号
/// </summary>
[Display(Name = "零件号")]
public string PartCode { get; set; }
/// <summary>
/// 批次
/// </summary>
[Display(Name = "批次")]
public string Batch { get; set; }
/// <summary>
/// 库位
/// </summary>
[Display(Name = "库位")]
public string LocCode { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// 状态
/// </summary>
[Display(Name = "状态")]
public int State { get; set; }
/// <summary>
/// 记录类型
/// </summary>
[Display(Name = "记录类型")]
public int Type { get; set; }
}

20
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/ProductRecyclePermissions.cs

@ -0,0 +1,20 @@
using Volo.Abp.Authorization.Permissions;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class ProductRecyclePermissions
{
public const string Default = StorePermissions.GroupName + "." + nameof(ProductRecycleJob);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
public static void AddProductRecycleJobPermission(this PermissionGroupDefinition permissionGroup)
{
var productRecycleJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(ProductRecycleJob)));
productRecycleJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
productRecycleJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
productRecycleJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Win_in.Sfs.Wms.Store.Application.Contracts.csproj

@ -42,6 +42,8 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Jobs\ProductRecycleJobs\DTOs\" />
<Folder Include="Jobs\ProductRecycleJobs\Inputs\" />
<Folder Include="Orders" />
<Folder Include="Plans" />
</ItemGroup>

204
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Equipments/EquipmentRecordAppService.cs

@ -0,0 +1,204 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Shared.Application;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
using Win_in.Sfs.Wms.Store.Equipments;
namespace Win_in.Sfs.Wms.Store.Application;
[Authorize]
[Route($"{StoreConsts.RootPath}EquipmentRecord")]
public class EquipmentRecordAppService
: SfsStoreAppServiceBase<EquipmentRecord, EquipmentRecordDTO, SfsStoreRequestInputBase, EquipmentRecordEditInput,
ExchangeDataImportInput>
, IEquipmentRecordAppService
{
private readonly IEquipmentRecordManager _manager;
private readonly IEquipmentRecordRepository _repository;
public EquipmentRecordAppService(
IEquipmentRecordRepository repository, IEquipmentRecordManager manager
):base(repository)
{
base.CreatePolicyName = EquipmentRecordPermissions.Create;
base.UpdatePolicyName = EquipmentRecordPermissions.Update;
base.DeletePolicyName = EquipmentRecordPermissions.Delete;
_manager = manager;
_repository = repository;
}
/// <summary>
/// 没用
/// </summary>
/// <param name="id"></param>
/// <param name="list"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost("addDetail")]
public Task AddDetailListAsync(Guid id, List<EquipmentRecordDTO> list)
{
throw new NotImplementedException();
}
/// <summary>
/// 没用
/// </summary>
[HttpPost("check")]
public Task CheckStatusAsync(string number)
{
throw new NotImplementedException();
}
/// <summary>
/// 没用
/// </summary>
[HttpPost("getlist")]
public Task<List<EquipmentRecordDTO>> GetDetailListAsync(Guid id, SfsStoreRequestInputBase requestInput)
{
throw new NotImplementedException();
}
/// <summary>
/// 没用
/// </summary>
[HttpPost("updateDetail")]
public Task UpdateDetailAsync(Guid id, Guid detailId, EquipmentRecordDTO updateDTO)
{
throw new NotImplementedException();
}
/// <summary>
/// 没用
/// </summary>
[HttpPost("upsertAsync")]
public Task UpsertAsync(EquipmentRecordEditInput input)
{
throw new NotImplementedException();
}
/// <summary>
/// 没用
/// </summary>
[HttpPost("withDetil")]
Task<EquipmentRecordDTO> ISfsReadOnlyWithDetailsAppService<EquipmentRecordDTO, SfsStoreRequestInputBase, EquipmentRecordDTO, SfsStoreRequestInputBase>.GetDetailAsync(Guid id, Guid detailId)
{
throw new NotImplementedException();
}
//[HttpGet("by-batchsize")]
//public virtual async Task<List<EquipmentRecordDTO>> GetToBeProcessedListAsync(int batchSize)
//{
// var entities = await _manager.GetToBeProcessedListAsync(batchSize).ConfigureAwait(false);
// var dtos = ObjectMapper.Map<List<EquipmentRecord>, List<EquipmentRecordDTO>>(entities);
// return dtos;
//}
//[HttpPost("re-send-by-id/{id}")]
//public virtual async Task<EquipmentRecordDTO> ReSendByNumberAsync(Guid id)
//{
// var EquipmentRecordOld = await _repository.GetAsync(id).ConfigureAwait(false);
// if (EquipmentRecordOld == null)
// {
// throw new UserFriendlyException($"未找到ID为【{id.ToString()}】的数据");
// }
// EquipmentRecordOld.Status = EnumEquipmentRecordStatus.Error;
// var EquipmentRecordNew = new ExchangeData()
// {
// DataAction = exchangeDataOld.DataAction,
// DataContent = exchangeDataOld.DataContent,
// DataIdentityCode = exchangeDataOld.DataIdentityCode,
// DataType = exchangeDataOld.DataType,
// DestinationSystem = exchangeDataOld.DestinationSystem,
// EffectiveDate = exchangeDataOld.EffectiveDate,
// Remark = exchangeDataOld.Remark,
// SourceSystem = exchangeDataOld.SourceSystem,
// WriteTime = DateTime.Now,
// Writer = null,
// };
// var entityNew= await _repository.InsertAsync(exchangeDataNew).ConfigureAwait(false);
// exchangeDataOld.Remark = $"在【{DateTime.Now}】时,重新生成了新的接口数据:ID为【{entityNew.Id}】";
// await _repository.UpdateAsync(exchangeDataOld).ConfigureAwait(false);
// return new ExchangeDataDTO() { Id = entityNew.Id };
//}
//[HttpPost("by-batchsize-post")]
//public virtual async Task<List<ExchangeDataDTO>> GetToBeProcessedListPostAsync(int batchSize)
//{
// var resultList=new List<ExchangeData>();
// var entities = await
// (await _repository.GetDbSetAsync().ConfigureAwait(false))
// .Where(p => p.Status == EnumExchangeDataStatus.Unread)
// .OrderBy(p => p.TyrpNumber)
// .Take(batchSize)
// .ToListAsync().ConfigureAwait(false);
// foreach (var entity in entities)
// {
// entity.Status = EnumExchangeDataStatus.Success;
// entity.ReadTime = Clock.Now;
// entity.Reader = "DataExchange.Agent";
// resultList.Add(await _repository.UpdateAsync(entity).ConfigureAwait(false));
// }
// var dtos = ObjectMapper.Map<List<ExchangeData>, List<ExchangeDataDTO>>(resultList);
// return dtos;
//}
//[HttpPost("by-batchsize-only-read")]
//public virtual async Task<List<ExchangeDataDTO>> GetToBeProcessedListOnlyReadAsync(int batchSize)
//{
// var entities = await
// (await _repository.GetDbSetAsync().ConfigureAwait(false))
// .Where(p => p.Status == EnumExchangeDataStatus.Unread)
// .OrderBy(p => p.TyrpNumber)
// .Take(batchSize)
// .ToListAsync().ConfigureAwait(false);
// var dtos = ObjectMapper.Map<List<ExchangeData>, List<ExchangeDataDTO>>(entities);
// return dtos;
//}
//[HttpPost("update-status-by-id-list")]
//public virtual async Task<List<ExchangeDataDTO>> UpdateStatusByIdListAsync(List<Guid> list)
//{
// List<ExchangeData> listExchangeDatas = new EditableList<ExchangeData>();
// var resultList = new List<ExchangeData>();
// foreach (var id in list)
// {
// listExchangeDatas.Add(await _repository.GetAsync(id).ConfigureAwait(false));
// }
// listExchangeDatas.ForEach(p =>
// {
// p.Status = EnumExchangeDataStatus.Success;
// p.ReadTime = Clock.Now;
// p.Reader = "DataExchange.Agent";
// });
// foreach (var entity in listExchangeDatas)
// {
// resultList.Add(await _repository.UpdateAsync(entity).ConfigureAwait(false));
// }
// var dtos = ObjectMapper.Map<List<ExchangeData>, List<ExchangeDataDTO>>(resultList);
// return dtos;
//}
}

43
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Equipments/EquipmentRecordAutoMapperProfile.cs

@ -0,0 +1,43 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Equipments;
namespace Win_in.Sfs.Wms.Store.Application;
public partial class StoreApplicationAutoMapperProfile : Profile
{
private void EquipmentRecordAutoMapperProfile()
{
CreateMap<EquipmentRecord, EquipmentRecordDTO>()
.ReverseMap();
// CreateMap<ExchangeDataCreateInput, ExchangeData>()
// .IgnoreAuditedObjectProperties()
// .Ignore(x => x.ConcurrencyStamp).Ignore(x => x.Id)
// ;
// CreateMap<ExchangeDataUpdateInput, ExchangeData>()
// .IgnoreAuditedObjectProperties()
// .Ignore(x => x.Id) ;
// ;
// CreateMap<ExchangeDataImportInput, ExchangeData>()
// .IgnoreAuditedObjectProperties()
// .Ignore(x => x.TenantId)
// //.Ignore(x => x.Remark)
// .Ignore(x => x.ExtraProperties)
// .Ignore(x => x.ConcurrencyStamp)
// ;
// CreateMap<ExchangeData, ExchangeDataImportInput>()
// .Ignore(x => x.ReportStatus)
// .Ignore(x => x.ReportReason)
// ;
// CreateMap<ExchangeData, ExchangeDataExportDTO>()
//;
}
}

16
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs

@ -214,9 +214,21 @@ public class MaterialRequestAppService : SfsStoreRequestAppServiceBase<MaterialR
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detailInput.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detailInput.ItemCode);
detailInput.ItemDesc1 = itemBasicDto.Desc1;
if(detailInput.PositionCode.Contains("W"))
if(detailInput.PositionCode.Contains('W'))
{
detailInput.RecommendType = EnumRecommendType.PositionCode;
detailInput.RecommendType = EnumRecommendType.W;
}
else if(detailInput.PositionCode.Contains('Q'))
{
detailInput.RecommendType = EnumRecommendType.Q;
}
else if(detailInput.PositionCode.Contains('K'))
{
detailInput.RecommendType = EnumRecommendType.K;
}
else
{
detailInput.RecommendType = EnumRecommendType.None;
}
var productionLineDto = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationDto.LocationGroupCode).ConfigureAwait(false);

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationAutoMapperProfile.cs

@ -104,6 +104,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
#endregion
ExchangeDataAutoMapperProfile();
EquipmentRecordAutoMapperProfile();
}
}

49
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/EquipmentRecord.cs

@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Equipments;
public class EquipmentRecord:SfsAggregateRootBase
{
/// <summary>
/// 器具编码
/// </summary>
public string EqptCode { get; set; }
/// <summary>
/// 条码编号
/// </summary>
public string BarCode { get; set; }
/// <summary>
/// 零件号
/// </summary>
public string PartCode { get; set; }
/// <summary>
/// 批次
/// </summary>
public string Batch { get; set; }
/// <summary>
/// 库位
/// </summary>
public string LocCode { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal Qty { get; set; }
/// <summary>
/// 状态
/// </summary>
public int State { get; set; }
/// <summary>
/// 记录类型
/// </summary>
public int Type { get; set;}
}

112
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/EquipmentRecordDetail.cs

@ -0,0 +1,112 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain;
public class EquipmentRecordDetail : SfsStoreDetailWithQtyEntityBase
//, IHasSupplierPack
{
///// <summary>
///// 订单行
///// </summary>
//public string PoLine { get; set; }
///// <summary>
///// 供应商计量单位
///// </summary>
//public string SupplierPackUom { get; set; }
///// <summary>
///// 供应商计量单位
///// </summary>
//public decimal SupplierPackQty { get; set; }
///// <summary>
///// 转换率
///// </summary>
//public decimal ConvertRate { get; set; }
///// <summary>
///// 是否寄存订单
///// </summary>
//public bool IsConsignment { get; set; }
///// <summary>
///// 订单行状态 0:无效1:有效
///// </summary>
//public EnumOrderStatus LineStatus { get; set; }
///// <summary>
///// ERP库位
///// </summary>
//public string LocationErpCode { get; set; }
///// <summary>
///// 项目编号
///// </summary>
//public string ProjectCode { get; set; }
///// <summary>
///// 已发货数量
///// </summary>
//public decimal ShippedQty { get; set; }
///// <summary>
///// 已收货数量
///// </summary>
//public decimal ReceivedQty { get; set; }
///// <summary>
///// 已退货数量
///// </summary>
//public decimal ReturnedQty { get; set; }
///// <summary>
///// 已上架数量
///// </summary>
//public decimal PutAwayQty { get; set; }
///// <summary>
///// 筹措员代码
///// </summary>
//[Display(Name = "明细-筹措员代码")]
//public string PlanUserCode { get; set; }
///// <summary>
///// 生产批次
///// </summary>
//[Display(Name = "明细-生产批次")]
//public string Lot { get; set; }
///// <summary>
///// 要求到货时间
///// </summary>
//[Display(Name = "明细-要求到货时间")]
//public DateTime PlanArriveDate { get; set; }
///// <summary>
///// 明细-类型 暂定:备件是B 辅材是F 生产为空
///// </summary>
//[Display(Name = "明细-类型")]
//public string Ctype { get; set; }
///// <summary>
///// 生产时间
///// </summary>
//[Display(Name = "明细-生产时间")]
//public DateTime ProduceDate { get; set; }
///// <summary>
///// 过期时间
///// </summary>
//[Display(Name = "明细-过期时间")]
//public DateTime ExpireDate { get; set; }
///// <summary>
///// 订单备注
///// </summary>
//[Display(Name = "明细-订单备注")]
//public string OrderRemark { get; set; }
}

126
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/EquipmentRecordManager.cs

@ -0,0 +1,126 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Domain.Services;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Equipments;
namespace Win_in.Sfs.Wms.Store.Domain;
public class EquipmentRecordManager : DomainService, IEquipmentRecordManager
{
private readonly IEquipmentRecordRepository _repository;
//private readonly IPurchaseReceiptNoteManager _purchaseReceiptNoteManager;
//private readonly ISupplierAppService _supplierApp;
//private readonly IWarehouseAppService _warehouseApp;
public EquipmentRecordManager(IEquipmentRecordRepository repository
//, IPurchaseReceiptNoteManager purchaseReceiptNoteManager
//, ISupplierAppService supplierApp
// , IWarehouseAppService warehouseApp
)
{
_repository = repository;
//_purchaseReceiptNoteManager = purchaseReceiptNoteManager;
// _supplierApp = supplierApp;
// _warehouseApp = warehouseApp;
}
/// <summary>
///// 打开订单明细
///// </summary>
///// <returns></returns>
//public virtual async Task<bool> CheckIsCloseAsync(string number,string supplierCode, string itemCode)
//{
// bool result = false;
// var entitys = await _repository.GetListAsync(p =>p.Number==number && p.Details.Any(y => y.ItemCode == itemCode&&y.LineStatus== EnumOrderStatus.Close) && p.SupplierCode == supplierCode, true).ConfigureAwait(false);
// if (entitys.Count!=0) result = true;
// return result;
//}
///// <summary>
///// 打开订单明细
///// </summary>
///// <returns></returns>
//public virtual async Task OpenDetailAsync(Guid id, Guid detailId)
//{
// var entity = await Repository.GetAsync(id).ConfigureAwait(false);
// Check.NotNull(entity, EntityClassName);
// await entity.OpenDetailAsync(detailId).ConfigureAwait(false);
//}
///// <summary>
///// 关闭订单明细
///// </summary>
///// <returns></returns>
//public virtual async Task CloseDetailAsync(Guid id, Guid detailId)
//{
// var entity = await Repository.GetAsync(id).ConfigureAwait(false);
// Check.NotNull(entity, EntityClassName);
// await entity.CloseDetailAsync(detailId).ConfigureAwait(false);
//}
//public override async Task<PurchaseOrder> CreateAsync(PurchaseOrder purchaseOrder)
//{
// //接收到新的采购订单时,更新无PO收货单的PoNumber
// //await _purchaseReceiptNoteManager.AppendPoNumberAsync(purchaseOrder).ConfigureAwait(false);
// purchaseOrder.SetIdAndNumberWithDetails(GuidGenerator, purchaseOrder.Number);
// //不要用base.create 要不会把number覆盖
// purchaseOrder = await Repository.InsertAsync(purchaseOrder).ConfigureAwait(false);
// await PublishCreatedAsync(purchaseOrder).ConfigureAwait(false);
// return purchaseOrder;
//}
///// <summary>
///// 执行导入
///// </summary>
//public virtual async Task ImportDataAsync(List<EquipmentRecord> mergeEntities, List<EquipmentRecord> deleteEntities = null)
//{
// //if (deleteEntities != null && deleteEntities.Count > 0)
// //{
// // await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
// //}
// //foreach (var entity in mergeEntities)
// //{
// // entity.SetIdAndNumberWithDetails(GuidGenerator, await GenerateNumberAsync(nameof(PurchaseOrder), entity.OrderDate).ConfigureAwait(false));
// //}
// //await _repository.BulkMergeAsync(mergeEntities).ConfigureAwait(false);
// //var insertDetails = new List<PurchaseOrderDetail>();
// //foreach (var item in mergeEntities)
// //{
// // await SetDetailAsync(item.Details).ConfigureAwait(false);
// // insertDetails.AddRange(item.Details);
// //}
// // await _repository.BulkInsertAsync(insertDetails).ConfigureAwait(false);
//}
public Task ImportDataAsync(List<EquipmentRecord> entities, List<EquipmentRecord> deleteEntities = null)
{
throw new NotImplementedException();
}
private async Task SetDetailAsync(List<PurchaseOrderDetail> details)
{
//foreach (var detail in details)
//{
// var item = await ItemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
// Check.NotNull(item, "物品代码", $"物品 {detail.ItemCode} 不存在");
// if (item != null)
// {
// detail.ItemName = item.Name;
// detail.ItemDesc1 = item.Desc1;
// detail.ItemDesc2 = item.Desc2;
// }
//}
}
}

13
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/IEquipmentRecordManager.cs

@ -0,0 +1,13 @@
using System;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Wms.Store.Equipments;
namespace Win_in.Sfs.Wms.Store.Domain;
public interface IEquipmentRecordManager :IBulkImportService<EquipmentRecord>
{
//Task OpenDetailAsync(Guid id, Guid detailId);
//Task CloseDetailAsync(Guid id, Guid detailId);
//Task<bool> CheckIsCloseAsync(string number, string supplierCode, string itemCode);
}

10
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Equipments/IEquipmentRecordRepository.cs

@ -0,0 +1,10 @@
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Wms.Store.Equipments;
namespace Win_in.Sfs.Wms.Store.Domain;
public interface IEquipmentRecordRepository : ISfsStoreRepositoryBase<EquipmentRecord>, ISfsBulkRepositoryBase<EquipmentRecord>
{
Task UpsertAsync(EquipmentRecord newData);
}

10
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobManager.cs

@ -0,0 +1,10 @@
using System;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Domain;
public interface IProductRecycleJobManager : IJobManager<ProductRecycleJob>
{
Task<ProductRecycleJob> GetAsync(Expression<Func<ProductRecycleJob, bool>> expression);
}

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobRepository.cs

@ -0,0 +1,6 @@
namespace Win_in.Sfs.Wms.Store.Domain;
public interface IProductRecycleJobRepository : ISfsJobRepositoryBase<ProductRecycleJob>
{
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleExtension.cs

@ -0,0 +1,21 @@
using Volo.Abp.Timing;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain;
public static class ProductRecycleExtension
{
public static ProductRecycleJob SetWorkGroup(this ProductRecycleJob job, string warehouseCode, string workGroupCode)
{
job.WorkGroupCode = workGroupCode;
job.WarehouseCode = warehouseCode;
return job;
}
public static ProductRecycleJob SetPriority(this ProductRecycleJob job, IClock clock)
{
job.Priority = PriorityHelper.GetPriority(clock);
job.PriorityIncrement = 1;
return job;
}
}

66
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJob.cs

@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Entities;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 产品退拆任务
/// </summary>
[Display(Name = "产品退拆任务")]
public class ProductRecycleJob : SfsJobAggregateRootBase<ProductRecycleJobDetail>
{
/// <summary>
/// 车间
/// </summary>
[Display(Name = "车间")]
public string Workshop { get; set; }
/// <summary>
/// 班次
/// </summary>
[Display(Name = "班次")]
public string Shift { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[IgnoreUpdate]
public override List<ProductRecycleJobDetail> Details { get; set; } = new List<ProductRecycleJobDetail>();
/// <summary>
/// 设置任务明细的实际库位和实际数量
/// </summary>
/// <param name="id"></param>
/// <param name="handledLocationCode"></param>
/// <param name="handledLocationErpCode"></param>
/// <param name="handledQty"></param>
/// <param name="handledWarehouseCode"></param>
/// <param name="handledBatch"></param>
/// <param name="handledContainerCode"></param>
/// <param name="handledLot"></param>
/// <param name="handledPackingCode"></param>
/// <param name="locationCode"></param>
/// <param name="qty"></param>
/// <returns></returns>
public virtual async Task SetDetail(Guid id, string handledLocationCode, string handledLocationErpCode, string handledWarehouseCode, decimal handledQty, string handledSupplierBatch, DateTime handledArriveDate, DateTime handledProduceDate, DateTime handledExpireDate
, string handledContainerCode, string handledLot, string handledPackingCode)
{
var detail = GetDetail(id);
detail.HandledToLocationCode = handledLocationCode;
detail.HandledToLocationErpCode = handledLocationErpCode;
detail.HandledToWarehouseCode = handledWarehouseCode;
detail.HandledQty = handledQty;
detail.HandledSupplierBatch = handledSupplierBatch;
detail.HandledArriveDate = handledArriveDate;
detail.HandledProduceDate = handledProduceDate;
detail.HandledExpireDate = handledExpireDate;
detail.HandledContainerCode = handledContainerCode;
detail.HandledLot = handledLot;
detail.HandledPackingCode = handledPackingCode;
await Task.CompletedTask.ConfigureAwait(false);
}
}

88
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobDetail.cs

@ -0,0 +1,88 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Data;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain;
public class ProductRecycleJobDetail : SfsJobRecommendToDetailEntityBase
{
/// <summary>
/// Bom版本
/// </summary>
public string BomVersion { get; set; }
/// <summary>
/// 库位代码
/// </summary>
public string LocationCode { get; set; }
/// <summary>
/// 库区
/// </summary>
public string LocationArea { get; set; }
/// <summary>
/// 库位组
/// </summary>
public string LocationGroup { get; set; }
/// <summary>
/// ERP库位代码
/// </summary>
public string LocationErpCode { get; set; }
/// <summary>
/// 原料库位代码
/// </summary>
public string RawLocationCode { get; set; }
/// <summary>
/// 原料库区
/// </summary>
public string RawLocationArea { get; set; }
/// <summary>
/// 原料库位组
/// </summary>
public string RawLocationGroup { get; set; }
/// <summary>
/// 原料ERP库位
/// </summary>
public string RawLocationErpCode { get; set; }
/// <summary>
/// 原料仓库
/// </summary>
public string RawWarehouseCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
[MaxLength(SfsPropertyConst.CodeLength)]
public string Uom { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
[Column(TypeName = "decimal(18,6)")]
public decimal Qty { get; set; }
/// <summary>
/// 扩展属性
/// </summary>
public ExtraPropertyDictionary ExtraProperties { get; } = new ExtraPropertyDictionary();
/// <summary>
/// 库存状态
/// </summary>
public EnumInventoryStatus Status { get; set; }
/// <summary>
/// 仓库代码
/// </summary>
public string WarehouseCode { get; set; }
}

10
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobManager.cs

@ -0,0 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Jobs.ProductRecycleJobs;
internal class ProductRecycleJobManager
{
}

76
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Equipments/EquipmentRecordDbContextModelCreatingExtensions.cs

@ -0,0 +1,76 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Equipments;
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
public static class EquipmentRecordDbContextModelCreatingExtensions
{
public static void ConfigureEquipmentRecord(this ModelBuilder builder, StoreModelBuilderConfigurationOptions options)
{
builder.Entity<EquipmentRecord>(b =>
{
//Configure table & schema name
b.ToTable(options.TablePrefix + nameof(EquipmentRecord), options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Configure Sfs base properties
b.ConfigureSfsStoreBase();
b.Property(q => q.BarCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Batch).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.EqptCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.LocCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.PartCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Batch).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
//Properties
//b.Property(q => q.SupplierCode).HasMaxLength(SfsPropertyConst.NameLength);
//b.Property(q => q.PoType).HasMaxLength(SfsPropertyConst.NameLength);
//b.Property(q => q.OrderStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//b.Property(q => q.Version).HasMaxLength(SfsPropertyConst.NameLength);
//b.Property(q => q.IsConsignment).HasDefaultValue(false);
//b.Property(q => q.TaxRate).HasDefaultValue(0);
//b.Property(q => q.ContactName).HasMaxLength(SfsPropertyConst.NameLength);
//b.Property(q => q.ContactPhone).HasMaxLength(SfsPropertyConst.NameLength);
//b.Property(q => q.ContactEmail).HasMaxLength(SfsPropertyConst.NameLength);
////Relations
//b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired();
////Indexes
//b.HasIndex(q => new { q.Number }).IsUnique();
});
//builder.Entity<PurchaseOrderDetail>(b =>
//{
// //Configure table & schema name
// b.ToTable(options.TablePrefix + nameof(PurchaseOrderDetail), options.Schema);
// //Configure ABP properties
// b.ConfigureByConvention();
// //Configure Sfs base properties
// b.ConfigureSfsStoreBase();
// //Configure Sfs store detail properties
// b.ConfigureSfsStoreDetailBase();
// //Properties
// b.Property(q => q.PoLine).HasMaxLength(SfsPropertyConst.CodeLength);
// b.Property(q => q.LineStatus).IsRequired().HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
// b.Property(q => q.ConvertRate).HasDefaultValue(1);
// b.Property(q => q.IsConsignment).HasDefaultValue(false);
// b.Property(q => q.ProjectCode).HasMaxLength(SfsPropertyConst.CodeLength);
// b.Property(q => q.LocationErpCode).HasMaxLength(SfsPropertyConst.CodeLength);
// //Relations
// //Indexes
// b.HasIndex(q => new { q.ItemCode, q.Number, q.PoLine }).IsUnique();
//});
}
}

23
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Equipments/EquipmentRecordEfCoreRepository.cs

@ -0,0 +1,23 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Equipments;
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
public class EquipmentRecordEfCoreRepository : SfsStoreEfCoreRepositoryBase<StoreDbContext, EquipmentRecord>, IEquipmentRecordRepository, ISfsBulkRepositoryBase<EquipmentRecord>
{
public EquipmentRecordEfCoreRepository(IDbContextProvider<StoreDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task UpsertAsync(EquipmentRecord newData)
{
throw new System.NotImplementedException();
}
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContext.cs

@ -2,6 +2,7 @@ using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Equipments;
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
@ -104,6 +105,7 @@ public class StoreDbContext : AbpDbContext<StoreDbContext>, IStoreDbContext
#endregion
public DbSet<ExchangeData> ExchangeDatas { get; set; }
public DbSet<EquipmentRecord> EquipmentRecords { get; set; }
public StoreDbContext(DbContextOptions<StoreDbContext> options)
: base(options)

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContextModelCreatingExtensions.cs

@ -29,6 +29,11 @@ public static class StoreDbContextModelCreatingExtensions
builder.ConfigureSaleOrder(options);
builder.ConfigureWorkOrder(options);
builder.ConfigureEquipmentRecord(options);
#endregion
#region Plans

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreEntityFrameworkCoreModule.cs

@ -32,6 +32,7 @@ public class StoreEntityFrameworkCoreModule : AbpModule
context.Services.AddTransient<IPurchaseOrderRepository, PurchaseOrderEfCoreRepository>();
context.Services.AddTransient<ISaleOrderRepository, SaleOrderEfCoreRepository>();
context.Services.AddTransient<IWorkOrderRepository, WorkOrderEfCoreRepository>();
context.Services.AddTransient<IEquipmentRecordRepository, EquipmentRecordEfCoreRepository>();
#endregion

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Win_in.Sfs.Wms.Store.EntityFrameworkCore.csproj

@ -38,6 +38,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Migrations\" />
<Folder Include="Notes" />
<Folder Include="Orders" />
<Folder Include="Plans" />

Loading…
Cancel
Save