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
adc784567d
  1. 1
      .gitignore
  2. 23
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs
  3. 25
      be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs
  4. 15
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionRequestController.cs
  5. 35
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs
  6. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemBasics/IItemBasicAppService.cs
  7. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationModule.cs
  8. 15
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs
  9. 141
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs
  10. 8
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Items/ItemBasicAppService.cs
  11. 11
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs
  12. 45
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Caches/Cache.cs
  13. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs
  14. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs
  15. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs
  16. 17
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs
  17. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionIssueRequestEventHandler.cs

1
.gitignore

@ -1 +1,2 @@
**/node_modules/
/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/Properties/PublishProfiles/FolderProfile3.pubxml

23
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs

@ -19,16 +19,13 @@ using Win_in.Sfs.Wms.Store.Application.Contracts;
using System.Text.Json.Serialization;
using System.IdentityModel.Tokens.Jwt;
using Volo.Abp;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming;
public class InjectionMoldingRequestReader : IReader
{
private readonly IInjectionIssueRequestAppService _injectionRequest;
private readonly IItemBasicAppService _itemService;
private readonly ILocationAppService _locService;
private readonly ILogger<InjectionMoldingRequestReader> _logger;
private readonly IOptions<InjectionMoldingTaskOptions> _options;
private readonly IHttpClientFactory _httpClientFactory;
@ -53,15 +50,6 @@ public class InjectionMoldingRequestReader : IReader
_locService = locService;
}
/// <summary>
/// 读取注塑叫料任务
/// </summary>
@ -127,7 +115,6 @@ public class InjectionMoldingRequestReader : IReader
_logger.LogInformation(error);
}
return new List<IncomingFromExternal>();
}
// 创建新的注塑请求并将数据写入数据库
await _injectionRequest.CreateAsync(input).ConfigureAwait(false);
@ -194,6 +181,10 @@ public class InjectionMoldingRequestReader : IReader
/// <returns></returns>
public async Task<string> ReaderCameraApi()
{
try
{
// 从配置中获取远程摄像头的地址、用户名、密码和令牌
var address = _options.Value.AutoRemote.IpAddress;
var username = _options.Value.AutoRemote.UserName;
@ -216,6 +207,12 @@ public class InjectionMoldingRequestReader : IReader
{
return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
}
}
catch (HttpRequestException ex)
{
_logger.LogInformation("远程摄像头连接失败:" + ex.Message);
}
return "Error occurred";
}

25
be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs

@ -20,6 +20,7 @@ using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement.EntityFrameworkCore;
using Volo.Abp.SettingManagement.EntityFrameworkCore;
using Volo.Abp.Swashbuckle;
using Volo.Abp.Threading;
using Volo.Abp.Timing;
using Volo.Abp.Users;
using Win_in.Sfs.Basedata.Application;
@ -67,19 +68,14 @@ public class BasedataHttpApiHostModule : ModuleBase<BasedataHttpApiHostModule>
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
//base.ConfigureServices(context);
//ConfigureAuditing();
////
//ConfigureBlobStoring();
//Configure<AbpClockOptions>(options =>
//{
// options.Kind = DateTimeKind.Local;
//});
base.ConfigureServices(context);
ConfigureAuditing();
//
ConfigureBlobStoring();
}
public override void PostConfigureServices(ServiceConfigurationContext context)
@ -120,7 +116,20 @@ public class BasedataHttpApiHostModule : ModuleBase<BasedataHttpApiHostModule>
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
CreateDatabase<BasedataDbContext>(context);
base.OnApplicationInitialization(context);
//AsyncHelper.RunSync(async () =>
//{
// using (var scope = context.ServiceProvider.CreateScope())
// {
// await scope.ServiceProvider
// .GetRequiredService<CacheService>().StartAsync().ConfigureAwait(false);
// }
//});
}
}

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

@ -1,6 +1,8 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Pda.Controllers.Stores;
@ -48,4 +50,17 @@ public class InjectionIssueRequestController : AbpController
return Ok(result);
}
/// <summary>
/// 获取物品类别列表
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
[HttpGet("list/item-category")]
public virtual async Task<List<ItemBasicDTO>> GetItemCategoryListAsync()
{
var entities = await _injectionRequestAppService.GetItemCategoryListAsync().ConfigureAwait(false);
return entities;
}
}

35
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Application.Dtos;
@ -99,4 +100,38 @@ public class TransferLibJobController : AbpController
{
await _transferLibJobAppService.CancelAcceptAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <returns></returns>
[HttpGet("list")]
public virtual async Task<PagedResultDto<TransferLibJobDTO>> GetListAsync(int pageSize, int pageIndex)
{
//var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
//var jsonCodes = JsonSerializer.Serialize(wlgCodes);
var status = new List<int>() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing };
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsJobRequestInputBase
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(TransferLibJobDTO.Priority)} ASC",
Condition = new Condition
{
Filters = new List<Filter>
{
//new(nameof(TransferLibJobDTO.WorkGroupCode),jsonCodes,"In"),
new(nameof(TransferLibJobDTO.JobStatus),jsonStatus,"In")
}
}
};
var list = await _transferLibJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
return list;
}
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemBasics/IItemBasicAppService.cs

@ -17,6 +17,7 @@ public interface IItemBasicAppService
void CheckItemIsAvailable(ItemBasicDTO itemBasicDTO);
Task<List<ItemBasicDTO>> GetListByNameAsync(string name);
Task<List<ItemBasicDTO>> GetCategoryListAsync();
Task<ItemBasicDTO> GetOrAddAsync(ItemBasicEditInput input);

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationModule.cs

@ -3,6 +3,7 @@ using Volo.Abp.Application;
using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Shared.Application;
@ -19,10 +20,16 @@ public class BasedataApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAutoMapperObjectMapper<BasedataApplicationModule>();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<BasedataApplicationModule>(validate: true);
});
}
}

15
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs

@ -22,14 +22,17 @@ public class BomAppService :
SfsBaseDataAppServiceBase<Bom, BomDTO, SfsBaseDataRequestInputBase, BomEditInput, BomImportInput>,
IBomAppService
{
private new readonly IBomRepository _repository;
private readonly IBomManager _bomManager;
List<BomComponent> _bomList=new List<BomComponent>();
public BomAppService(IBomRepository repository
, IBomManager bomManager
, IDistributedCache<BomDTO> cache
) : base(repository, cache)
{
_repository = repository;
@ -37,19 +40,9 @@ public class BomAppService :
base.CreatePolicyName = BomPermissions.Create;
base.UpdatePolicyName = BomPermissions.Update;
base.DeletePolicyName = BomPermissions.Delete;
}
#region Get
[HttpGet("get-by-productitemcode")]

141
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs

@ -0,0 +1,141 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office2010.Drawing;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.Application.Services;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Caches;
using Win_in.Sfs.Basedata.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application;
public class TaskQueue
{
private readonly List<TaskItem> _tasks = new List<TaskItem>();
public void Enqueue(string name, Action action)
{
_tasks.Add(new TaskItem { Name = name, Action = action });
}
public async Task StartAsync()
{
foreach (var task in _tasks)
{
await Task.Run(task.Action).ConfigureAwait(false);
}
}
}
public class TaskItem
{
public string Name { get; set; }
public Action Action { get; set; }
}
public class CycleOptions
{
/// <summary>
/// Boms缓存生命周期(秒)
/// </summary>
public int BomsCycle { get; set; }
}
/// <summary>
/// 提供缓存服务的类(堵塞以后修改再用)
/// </summary>
public class CacheService:ISingletonDependency
{
private readonly IServiceProvider _serviceProvider;
private readonly IOptions<CycleOptions> _options;
public CacheService(IServiceProvider serviceProvider, IOptions<CycleOptions> options)
{
_serviceProvider = serviceProvider;
_options = options;
}
/// <summary>
/// 生命周期操作
/// </summary>
private async Task BomsCycle()
{
//Task.Run(async () =>
//{
var reassigner = new Reassigner(DateTime.Now, new TimeSpan(0, 0, _options.Value.BomsCycle == 0 ? 60 : _options.Value.BomsCycle));
await reassigner.RunAsync(async () =>
{
using var serviceScope = _serviceProvider.CreateScope();
var repository = serviceScope.ServiceProvider.GetRequiredService<IBomRepository>();
Cache.Boms.Clear();
Cache.Boms = await repository.GetListAsync().ConfigureAwait(false);
}).ConfigureAwait(false);
//});
;
}
/// <summary>
/// 异步开始生命周期操作不能堵塞
/// </summary>
public async Task StartAsync()
{
BomsCycle();//异步处理不能堵塞主任务
}
}
public class Reassigner
{
private readonly TimeSpan _interval;
private DateTime _lasttime;
public Reassigner(DateTime lasttime, TimeSpan interval)
{
_lasttime = lasttime;
_interval = interval;
}
public async Task RunAsync(Action p_action)
{
while (true)
{
// 获取当前时间
var currentTime = DateTime.Now;
// 计算上次重新赋值到现在的时间间隔
var elapsed = currentTime - _lasttime;
// 检查时间间隔是否满足条件
if (elapsed >= _interval)
{
p_action();
// 重新赋值
//_value = await GetValueAsync();
// 更新最后更新时间
_lasttime = currentTime;
}
// 等待下一刻钟
await Task.Delay(_interval).ConfigureAwait(false);
}
}
}

8
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Items/ItemBasicAppService.cs

@ -122,6 +122,14 @@ public class ItemBasicAppService
return dtos;
}
[HttpGet("list-item-category")]
public virtual async Task<List<ItemBasicDTO>> GetCategoryListAsync()
{
var entities = await _repository.GetListAsync(c => !string.IsNullOrEmpty(c.Category)).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<ItemBasic>, List<ItemBasicDTO>>(entities);
return dtos;
}
[HttpGet("get-manage-type")]
public virtual async Task<EnumItemManageType> GetManageTypeAsync(string itemCode)
{

11
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs

@ -10,7 +10,8 @@ using Volo.Abp;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Domain.Services;
using Win_in.Sfs.Basedata.Boms;
using Win_in.Sfs.Basedata.Caches;
using Win_in.Sfs.Basedata.Domain.Caches;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
@ -22,6 +23,7 @@ public class BomManager : DomainService, IBomManager
private readonly IBomRepository _repository;
private readonly IItemBasicRepository _itemBasicRepository;
public BomManager(IBomRepository repository, IItemBasicRepository itemBasicRepository)
{
_repository = repository;
@ -143,6 +145,13 @@ public class BomManager : DomainService, IBomManager
return await _repository.GetListAsync(p => p.Product == product).ConfigureAwait(false);
}
public virtual async Task<List<Bom>> GetListAsync()
{
return await _repository.GetListAsync().ConfigureAwait(false);
}
public virtual async Task<List<Bom>> GetListWithPhantomItemAsync(string productItemCode, string mfgOp, DateTime validTime, bool onlyFromProductionPlan)
{
var where = BuildExpression(productItemCode, mfgOp, validTime, onlyFromProductionPlan);

45
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Caches/Cache.cs

@ -1,59 +1,28 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
using Win_in.Sfs.Basedata.Domain;
namespace Win_in.Sfs.Basedata.Caches;
namespace Win_in.Sfs.Basedata.Domain.Caches;
public static class Cache
{
public static List<Bom> Boms = new List<Bom>();
public static async void BomsLifeCycle(int lifetime)
public static void Clear()
{
var reassigner = new Reassigner(DateTime.Now,new TimeSpan(0,5,0));
await reassigner.RunAsync(() => {
Boms.Clear();
}).ConfigureAwait(false);
}
}
public class Reassigner
{
private readonly TimeSpan _interval;
private DateTime _lasttime;
public Reassigner(DateTime lasttime, TimeSpan interval)
{
_lasttime = lasttime;
_interval = interval;
}
public async Task RunAsync(Action p_action)
{
while (true)
{
// 获取当前时间
var currentTime = DateTime.Now;
// 计算上次重新赋值到现在的时间间隔
var elapsed = currentTime - _lasttime;
// 检查时间间隔是否满足条件
if (elapsed >= _interval)
{
p_action();
// 重新赋值
//_value = await GetValueAsync();
// 更新最后更新时间
_lasttime = currentTime;
}
// 等待下一刻钟
await Task.Delay(_interval);
}
}
}

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs

@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Basedata.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -16,4 +17,10 @@ public interface IInjectionIssueRequestAppService
/// </summary>
/// <returns></returns>
Task<long> GetCountAsync();
/// <summary>
/// 获取物品类别列表
/// </summary>
/// <returns></returns>
Task<List<ItemBasicDTO>> GetItemCategoryListAsync();
}

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs

@ -21,8 +21,11 @@ using Win_in.Sfs.Wms.Store.Notes;
namespace Win_in.Sfs.Wms.Store.Application;
/// <summary>
/// 注塑发料任务
/// </summary>
[Authorize]
[Route($"{StoreConsts.RootPath}injection-job")]
[Route($"{StoreConsts.RootPath}injection-issue-job")]
public class InjectionIssueJobAppService
: SfsJobAppServiceBase<InjectionIssueJob, InjectionIssueJobDetail, InjectionIssueJobDTO, SfsJobRequestInputBase,
InjectionIssueJobCheckInput, InjectionIssueJobEditInput>,

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs

@ -17,8 +17,11 @@ using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application;
/// <summary>
/// 注塑发料记录
/// </summary>
[Authorize]
[Route($"{StoreConsts.RootPath}injection-note")]
[Route($"{StoreConsts.RootPath}injection-issue-note")]
public class InjectionIssueNoteAppService :
SfsStoreWithDetailsAppServiceBase<InjectionIssueNote, InjectionIssueNoteDTO, SfsStoreRequestInputBase, InjectionIssueNoteEditInput, InjectionIssueNoteDetail,
InjectionIssueNoteDetailDTO, SfsStoreRequestInputBase, InjectionIssueNoteImportInput>,

17
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs

@ -28,10 +28,10 @@ using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application;
/// <summary>
/// 注塑叫料
/// 注塑发料申请
/// </summary>
[Authorize]
[Route($"{StoreConsts.RootPath}injection-request")]
[Route($"{StoreConsts.RootPath}injection-issue-request")]
public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<InjectionIssueRequest, InjectionIssueRequestDTO,
SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetail, InjectionIssueRequestDetailDTO,
SfsStoreRequestInputBase, InjectionIssueRequestImportInput>,
@ -150,6 +150,19 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
return injectionRequestDto;
}
/// <summary>
/// 获取物品类别列表
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
[HttpGet("list/item-category")]
public virtual async Task<List<ItemBasicDTO>> GetItemCategoryListAsync()
{
var entities = await _itemBasicAppService.GetCategoryListAsync().ConfigureAwait(false);
return entities;
}
#endregion
#region 导入

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionIssueRequestEventHandler.cs

@ -388,7 +388,7 @@ public class InjectionIssueRequestEventHandler
.RawLocationCodeListJson)
};
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);
usableList = usableList.Where(p => !useBalanceList.Contains(p.PackingCode)).ToList();
usableList = usableList.Where(p => !useBalanceList.Contains(p.PackingCode) && p.Qty!=0).ToList();
if (usableList.Any())
{
for (var i = 0; i < sumBoxQty; i++)
@ -462,6 +462,7 @@ public class InjectionIssueRequestEventHandler
detail.ItemName=injectionRequestDetail.ItemName;
detail.ItemDesc1=injectionRequestDetail.ItemDesc1;
detail.ItemDesc2 = injectionRequestDetail.ItemDesc2;
detail.StdPackQty = injectionRequestDetail.StdPackQty;
detail.Status = EnumInventoryStatus.OK;
detail.Uom = balance.Uom;

Loading…
Cancel
Save