| | |
| | | using Autofac.Core; |
| | | using MailKit.Search; |
| | | using Microsoft.Extensions.Logging; |
| | | using Microsoft.Extensions.Logging; |
| | | using SqlSugar; |
| | | using SqlSugar.Extensions; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Dynamic; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Common.AllocateEnum; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Core; |
| | |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core.CodeConfigEnum; |
| | | using WIDESEA_Core.DB; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_Core.Seed; |
| | | using WIDESEA_IAllocateService; |
| | | using WIDESEA_IBasicService; |
| | | using WIDESEA_IInboundService; |
| | | using WIDESEA_IOutboundService; |
| | | using WIDESEA_Model.Models; |
| | |
| | | public readonly IOutboundService _outboundService; |
| | | public readonly IRepository<Dt_AllocateOrder> _allocateOrderRepository; |
| | | public readonly IRepository<Dt_AllocateOrderDetail> _allocateOrderDetailRepository; |
| | | |
| | | private readonly IMaterielInfoService _materielInfoService; |
| | | public readonly IRepository<Dt_InboundOrderDetail> _inboundOrderDetailRepository; |
| | | |
| | | private readonly ILogger<AllocateService> _logger; |
| | |
| | | IRepository<Dt_AllocateOrder> allocateOrderRepository, |
| | | IRepository<Dt_AllocateOrderDetail> allocateOrderDetailRepository, |
| | | IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, |
| | | ILogger<AllocateService> logger) : base(BaseDal) |
| | | ILogger<AllocateService> logger, |
| | | IMaterielInfoService materielInfoService) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _inboundService = inboundService; |
| | |
| | | _allocateOrderDetailRepository = allocateOrderDetailRepository; |
| | | _logger = logger; |
| | | _inboundOrderDetailRepository = inboundOrderDetailRepository; |
| | | _materielInfoService = materielInfoService; |
| | | } |
| | | |
| | | public IRepository<Dt_AllocateOrder> Repository => BaseDal; |
| | |
| | | { |
| | | if (BaseDal.QueryFirst(x => x.UpperOrderNo == allocateOrder.UpperOrderNo) != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è°æ¨åå·éå¤"); |
| | | return WebResponseContent.Instance.Error($"{allocateOrder.UpperOrderNo}è°æ¨åå·éå¤"); |
| | | } |
| | | allocateOrder.OrderNo = CreateCodeByRule(nameof(RuleCodeEnum.AllocateOrderCodeRule)); |
| | | var materielCodes = allocateOrder.Details.Select(x => x.MaterielCode).Distinct().ToList(); |
| | | var materielInfos = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().Where(x => materielCodes.Contains(x.MaterielCode)).ToList(); |
| | | foreach (var item in allocateOrder.Details) |
| | | { |
| | | if (materielInfos.Any()) |
| | | { |
| | | item.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? ""; |
| | | } |
| | | } |
| | | Db.InsertNav(allocateOrder).Include(x => x.Details).ExecuteCommand(); |
| | | await AddInOutData(allocateOrder); |
| | | return WebResponseContent.Instance.OK(); |
| | |
| | | List<Dt_AllocateOrderDetail> allocateOrderDetails = new List<Dt_AllocateOrderDetail>(); |
| | | List<Dt_AllocateOrderDetail> updateAllocateOrderDetails = new List<Dt_AllocateOrderDetail>(); |
| | | List<int> detailIds = new List<int>(); |
| | | |
| | | var materielCodes = allocateOrder.Details.Select(x => x.MaterielCode).Distinct().ToList(); |
| | | var materielInfos = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().Where(x => materielCodes.Contains(x.MaterielCode)).ToList(); |
| | | |
| | | foreach (var item in model.Details) |
| | | { |
| | | if (string.IsNullOrEmpty(item.Barcode)) |
| | | { |
| | | |
| | | } |
| | | else |
| | | if (!string.IsNullOrEmpty(item.Barcode)) |
| | | { |
| | | Dt_AllocateOrderDetail? allocateOrderDetail = allocateOrder.Details.FirstOrDefault(x => x.Barcode == item.Barcode); |
| | | if (allocateOrderDetail == null) |
| | |
| | | BarcodeQty = (decimal)item.BarcodeQty, |
| | | OrderQuantity = item.OrderQuantity |
| | | }; |
| | | if (materielInfos.Any()) |
| | | { |
| | | allocateOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? ""; |
| | | } |
| | | allocateOrderDetails.Add(allocateOrderDetail); |
| | | } |
| | | else |
| | |
| | | allocateOrderDetail.BarcodeUnit = item.BarcodeUnit; |
| | | allocateOrderDetail.BarcodeQty = item.BarcodeQty; |
| | | allocateOrderDetail.OrderQuantity = item.OrderQuantity; |
| | | |
| | | if (materielInfos.Any()) |
| | | { |
| | | allocateOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? ""; |
| | | } |
| | | |
| | | updateAllocateOrderDetails.Add(allocateOrderDetail); |
| | | detailIds.Add(allocateOrderDetail.Id); |
| | |
| | | <ItemGroup> |
| | | <ProjectReference Include="..\WIDESEA_Core\WIDESEA_Core.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_IAllocateService\WIDESEA_IAllocateService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_IInboundService\WIDESEA_IInboundService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_Model\WIDESEA_Model.csproj" /> |
| | |
| | | |
| | | private readonly static object _locker = new object(); |
| | | static List<LocationCache> locationCaches = new List<LocationCache>(); |
| | | private int locationCacheTime = 10; |
| | | private int locationCacheTime = 20; |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | |
| | | if (first != null) |
| | | { |
| | | locationCaches.Add(new LocationCache { LocationCode = first?.LocationCode, DateTime = DateTime.Now }); |
| | | |
| | | |
| | | using (var sugarClient = new SqlSugarClient(new ConnectionConfig |
| | | { |
| | |
| | | using WIDESEA_Core.CodeConfigEnum; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_IBasicService; |
| | | using WIDESEA_ICheckService; |
| | | using WIDESEA_IOutboundService; |
| | | using WIDESEA_Model.Models; |
| | |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly WebSocketServer _webSocketServer; |
| | | private readonly ILogger<ReCheckOrderService> _logger; |
| | | |
| | | private readonly IMaterielInfoService _materielInfoService; |
| | | public readonly IOutboundService _outboundService; |
| | | public IRepository<Dt_ReCheckOrder> Repository => BaseDal; |
| | | public ReCheckOrderService(IRepository<Dt_ReCheckOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage, WebSocketServer webSocketServer, ILogger<ReCheckOrderService> logger, IOutboundService outboundService) : base(BaseDal) |
| | | public ReCheckOrderService(IRepository<Dt_ReCheckOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage, WebSocketServer webSocketServer, ILogger<ReCheckOrderService> logger, IOutboundService outboundService, IMaterielInfoService materielInfoService) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _webSocketServer = webSocketServer; |
| | | _logger = logger; |
| | | _outboundService = outboundService; |
| | | _materielInfoService = materielInfoService; |
| | | } |
| | | |
| | | public async Task<WebResponseContent> ReceiveReCheckOrder(Dt_ReCheckOrder models, int operateType) |
| | |
| | | |
| | | if (BaseDal.QueryFirst(x => x.OrderNo == model.OrderNo) != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"åå·éå¤"); |
| | | return WebResponseContent.Instance.Error($"{model.OrderNo}åå·éå¤"); |
| | | } |
| | | |
| | | var materielInfo = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().First(x => model.MaterielCode.Equals(x.MaterielCode)); |
| | | |
| | | model.Creater = "MES"; |
| | | model.CreateDate = DateTime.Now; |
| | | model.MaterielName = materielInfo?.MaterielName ?? ""; |
| | | BaseDal.AddData(model); |
| | | var outboundOrders = ConvertToOutboundOrders(model); |
| | | |
| | |
| | | recheckOrder.FactoryArea = model.FactoryArea; |
| | | recheckOrder.Modifier = "MES"; |
| | | recheckOrder.ModifyDate = DateTime.Now; |
| | | |
| | | var materielInfo = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().First(x => model.MaterielCode.Equals(x.MaterielCode)); |
| | | recheckOrder.MaterielName= materielInfo?.MaterielName??""; |
| | | BaseDal.UpdateData(recheckOrder); |
| | | |
| | | if (isupdate) |
| | |
| | | </PropertyGroup> |
| | | |
| | | <ItemGroup> |
| | | <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_ICheckService\WIDESEA_ICheckService.csproj" /> |
| | | <ProjectReference Include="..\WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj" /> |
| | | </ItemGroup> |
| | |
| | | |
| | | private IStockService _stockService; |
| | | private readonly IMaterialUnitService _materialUnitService; |
| | | private readonly IMaterielInfoService _materielInfoService; |
| | | private readonly IInboundOrderDetailService _inboundOrderDetailService; |
| | | private readonly IRepository<Dt_InboundOrderDetail> _inboundOrderDetailRepository; |
| | | private readonly IRepository<Dt_StockInfoDetail> _stockDetailRepository; |
| | |
| | | private readonly IRepository<Dt_StockInfo> _stockRepository; |
| | | public IRepository<Dt_InboundOrder> Repository => BaseDal; |
| | | |
| | | public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository) : base(BaseDal) |
| | | public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository, IMaterielInfoService materielInfoService) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | |
| | | _warehouseAreaRepository = warehouseAreaRepository; |
| | | _stockRepository = stockRepository; |
| | | _locationTypeRepository = locationTypeRepository; |
| | | _materielInfoService = materielInfoService; |
| | | } |
| | | |
| | | public async Task<WebResponseContent> ReceiveInboundOrder(List<Dt_InboundOrder> models, int operateType) |
| | |
| | | { |
| | | if (BaseDal.QueryFirst(x => x.UpperOrderNo == model.UpperOrderNo) != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å
¥åºåå·éå¤"); |
| | | return WebResponseContent.Instance.Error($"{model.UpperOrderNo}å
¥åºåå·éå¤"); |
| | | } |
| | | } |
| | | |
| | | foreach (var model in models) |
| | | { |
| | | var materielCodes = model.Details.Select(x => x.MaterielCode).Distinct().ToList(); |
| | | var materielInfos = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().Where(x => materielCodes.Contains(x.MaterielCode)).ToList(); |
| | | |
| | | foreach (var item in model.Details) |
| | | { |
| | | var purchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync(item.MaterielCode, item.BarcodeQty); |
| | | item.Unit = purchaseToStockResult.Unit; |
| | | item.OrderQuantity = purchaseToStockResult.Quantity; |
| | | if (materielInfos.Any()) |
| | | { |
| | | item.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? ""; |
| | | } |
| | | } |
| | | if (model.OrderType != InOrderTypeEnum.AllocatInbound.ObjToInt()) |
| | | { |
| | |
| | | List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>(); |
| | | List<Dt_InboundOrderDetail> updateInboundOrderDetails = new List<Dt_InboundOrderDetail>(); |
| | | List<int> detailIds = new List<int>(); |
| | | var materielCodes = model.Details.Select(x => x.MaterielCode).Distinct().ToList(); |
| | | var materielInfos = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().Where(x => materielCodes.Contains(x.MaterielCode)).ToList(); |
| | | |
| | | foreach (var item in model.Details) |
| | | { |
| | | if (string.IsNullOrEmpty(item.Barcode)) |
| | | { |
| | | |
| | | } |
| | | else |
| | | if (!string.IsNullOrEmpty(item.Barcode)) |
| | | { |
| | | Dt_InboundOrderDetail? inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.Barcode == item.Barcode); |
| | | if (inboundOrderDetail == null) |
| | |
| | | var purchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync(item.MaterielCode, item.BarcodeQty); |
| | | inboundOrderDetail.Unit = purchaseToStockResult.Unit; |
| | | inboundOrderDetail.OrderQuantity = purchaseToStockResult.Quantity; |
| | | |
| | | if (materielInfos.Any()) |
| | | { |
| | | inboundOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? ""; |
| | | } |
| | | inboundOrderDetails.Add(inboundOrderDetail); |
| | | } |
| | | else |
| | | { |
| | | if (materielInfos.Any()) |
| | | { |
| | | inboundOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? ""; |
| | | } |
| | | inboundOrderDetail.lineNo = item.lineNo; |
| | | inboundOrderDetail.MaterielCode = item.MaterielCode; |
| | | inboundOrderDetail.SupplyCode = item.SupplyCode; |
| | |
| | | |
| | | public WebResponseContent UndoPalletGroup(string palletCode, string barcode = "") |
| | | { |
| | | |
| | | |
| | | if (string.IsNullOrWhiteSpace(palletCode)) |
| | | { |
| | | return WebResponseContent.Instance.Error("æçå·ä¸è½ä¸ºç©º"); |
| | | } |
| | | |
| | | |
| | | |
| | | try |
| | | { |
| | | _unitOfWorkManage.BeginTran(); |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | // 2. æ¥è¯¢æçåºå主记å½ï¼é¿å
æ æ°æ®æå¼å¸¸ï¼ |
| | | var stock = _stockRepository.Db.Queryable<Dt_StockInfo>() |
| | |
| | | return WebResponseContent.Instance.Error($"æç{palletCode}䏿ªæ¾å°æ¡ç {barcode}çæç»è®°å½"); |
| | | } |
| | | |
| | | ResetInboundOrderStatus(new List<string> { targetDetail.OrderNo},new List<string> { targetDetail.Barcode}); |
| | | ResetInboundOrderStatus(new List<string> { targetDetail.OrderNo }, new List<string> { targetDetail.Barcode }); |
| | | // å é¤æå®æç» |
| | | _stockDetailRepository.DeleteData(targetDetail); |
| | | |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error($"æçæ¤é失败ï¼{ex.Message}"); |
| | | } |
| | | } |
| | |
| | | if (!string.IsNullOrEmpty(options.Wheres)) |
| | | { |
| | | try |
| | | { |
| | | { |
| | | searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>(); |
| | | if (searchParametersList.Count > 0) |
| | | { |
| | |
| | | public string MaterielCode { get; set; } |
| | | |
| | | |
| | | public string MaterielName { get; set; } |
| | | /// <summary> |
| | | /// æ¹æ¬¡å· |
| | | /// </summary> |
| | |
| | | public string MaterielCode { get; set; } = null!; |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string MaterielName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// å¤ æ³¨: |
| | | /// é»è®¤å¼: |
| | | ///</summary> |
| | |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | _logger.LogError($"空箱ååºå¤±è´¥: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"空箱ååºå¤±è´¥ï¼{ex.Message}"); |
| | | _logger.LogError($"空箱ååºExecutePalletReturn失败: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"空箱ååºExecutePalletReturn失败ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | catch (Exception taskEx) |
| | | { |
| | | _logger.LogError($"ååºä»»å¡å建失败: {taskEx.Message}"); |
| | | _logger.LogError($"ååºä»»å¡CreateReturnTaskWithoutESSå建失败: {taskEx.Message}"); |
| | | // ä»»å¡å建失败ä¸å½±åæ°æ®ååº |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | _logger.LogError($"ååºå¤±è´¥: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"ååºå¤±è´¥ï¼{ex.Message}"); |
| | | _logger.LogError($"ExecutePalletReturn ååºå¤±è´¥: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"ExecutePalletReturn ååºå¤±è´¥ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | // å建ååºä»»å¡ï¼ä¸åéESSå½ä»¤ï¼ |
| | | var returnTaskInfo = await CreateEmptyPalletReturnTask(orderNo, palletCode, emptyStockInfo, currentTask); |
| | | |
| | | return WebResponseContent.Instance.OK("空æçååºæå"); |
| | | return WebResponseContent.Instance.OK("空æçååºæå", returnTaskInfo); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _logger.LogError($"空æçååºå¤±è´¥: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"空æçååºå¤±è´¥: {ex.Message}"); |
| | | _logger.LogError($"空æçååºå¤±è´¥ HandleEmptyPalletReturn: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"空æçååºå¤±è´¥ HandleEmptyPalletReturn: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using Microsoft.Extensions.Logging; |
| | | using SqlSugar; |
| | | using WIDESEA_BasicService; |
| | | using WIDESEA_Common.AllocateEnum; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Core; |
| | |
| | | { |
| | | private readonly IMapper _mapper; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IMaterielInfoService _materielInfoService; |
| | | public IRepository<Dt_OutboundOrder> Repository => BaseDal; |
| | | private readonly ILogger<OutboundOrderService> _logger; |
| | | private readonly IRepository<Dt_OutboundOrderDetail> _outboundOrderDetailRepository; |
| | | private readonly IMaterialUnitService _materialUnitService; |
| | | public OutboundOrderService(IRepository<Dt_OutboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository, ILogger<OutboundOrderService> logger, IMaterialUnitService materialUnitService) : base(BaseDal) |
| | | public OutboundOrderService(IRepository<Dt_OutboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository, ILogger<OutboundOrderService> logger, IMaterialUnitService materialUnitService, IMaterielInfoService materielInfoService) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _outboundOrderDetailRepository = outboundOrderDetailRepository; |
| | | _logger = logger; |
| | | _materialUnitService = materialUnitService; |
| | | _materielInfoService = materielInfoService; |
| | | } |
| | | |
| | | private int[] OrderTypes = new int[] { (int)InOrderTypeEnum.AllocatOutbound, (int)InOrderTypeEnum.InternalAllocat, (int)InOrderTypeEnum.ReCheck }; |
| | |
| | | |
| | | if (BaseDal.QueryFirst(x => x.UpperOrderNo == model.UpperOrderNo) != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"åºåºåå·éå¤"); |
| | | return WebResponseContent.Instance.Error($"{model.UpperOrderNo}åºåºåå·éå¤"); |
| | | } |
| | | |
| | | var materielCodes = model.Details.Select(x => x.MaterielCode).Distinct().ToList(); |
| | | var materielInfos = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().Where(x => materielCodes.Contains(x.MaterielCode)).ToList(); |
| | | |
| | | foreach (var item in model.Details) |
| | | { |
| | | var issueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeQty); |
| | |
| | | item.OrderQuantity = issueoStockResult.Quantity; |
| | | var moveissueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeMoveQty); |
| | | item.MoveQty = moveissueoStockResult.Quantity; |
| | | if (materielInfos.Any()) |
| | | { |
| | | item.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? ""; |
| | | } |
| | | |
| | | } |
| | | if (!OrderTypes.Contains(model.OrderType)) |
| | | { |
| | |
| | | List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>(); |
| | | List<Dt_OutboundOrderDetail> updateoutboundOrderDetails = new List<Dt_OutboundOrderDetail>(); |
| | | List<int> detailIds = new List<int>(); |
| | | |
| | | var materielCodes = model.Details.Select(x => x.MaterielCode).Distinct().ToList(); |
| | | var materielInfos = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().Where(x => materielCodes.Contains(x.MaterielCode)).ToList(); |
| | | |
| | | |
| | | foreach (var item in model.Details) |
| | | { |
| | | |
| | |
| | | var moveissueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeMoveQty); |
| | | item.MoveQty = moveissueoStockResult.Quantity; |
| | | |
| | | if (materielInfos.Any()) |
| | | { |
| | | outboundOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? ""; |
| | | } |
| | | |
| | | outboundOrderDetails.Add(outboundOrderDetail); |
| | | } |
| | | else |
| | |
| | | outboundOrderDetail.OrderQuantity = issueoStockResult.Quantity; |
| | | var moveissueoStockResult = await _materialUnitService.ConvertFromToStockAsync(item.MaterielCode, item.BarcodeUnit, item.BarcodeMoveQty); |
| | | outboundOrderDetail.MoveQty = moveissueoStockResult.Quantity; |
| | | |
| | | if (materielInfos.Any()) |
| | | { |
| | | outboundOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? ""; |
| | | } |
| | | |
| | | updateoutboundOrderDetails.Add(outboundOrderDetail); |
| | | detailIds.Add(outboundOrderDetail.Id); |
| | |
| | | /// </summary> |
| | | public class OutboundPickingService : ServiceBase<Dt_PickingRecord, IRepository<Dt_PickingRecord>>, IOutboundPickingService |
| | | { |
| | | #region æé 彿° |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | public IRepository<Dt_PickingRecord> Repository => BaseDal; |
| | | |
| | |
| | | _interfaceLog = interfaceLog; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region æ¥è¯¢æ¹æ³ |
| | | // è·åæªæ£éå表 |
| | |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | |
| | | #region è¾
婿¹æ³ |
| | | /// <summary> |
| | | /// ç»ä¸åææçç¶æ - è¿åæçç宿´ç¶æä¿¡æ¯ |
| | |
| | | |
| | | return result; |
| | | } |
| | | |
| | | |
| | | private async Task<string> GenerateNewBarcode() |
| | | { |
| | |
| | | } |
| | | return WebResponseContent.Instance.OK("æ£é确认æå", new { SplitResults = new List<SplitResult>() }); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region èæåºå
¥åº |
| | |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | |
| | | #region æ¯æç±»å®ä¹ |
| | |
| | | { |
| | | await Db.Deleteable(task).ExecuteCommandAsync(); |
| | | } |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum); |
| | | |
| | | _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, beforeQuantity, stockInfo.Details.Sum(x => x.StockQuantity) + beforeQuantity, WIDESEA_Common.StockEnum.StockChangeType.MaterielGroup); |
| | | try |
| | | { |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum); |
| | | |
| | | _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, beforeQuantity, stockInfo.Details.Sum(x => x.StockQuantity) + beforeQuantity, WIDESEA_Common.StockEnum.StockChangeType.MaterielGroup); |
| | | } |
| | | catch(Exception ex) |
| | | { |
| | | _logger.LogInformation($"InboundTaskCompleted AddLocationStatusChangeRecord : {ex.Message} " ); |
| | | } |
| | | try |
| | | { |
| | | foreach (var inboundOrder in inboundOrders) |
| | | { |
| | |
| | | { |
| | | await Db.Deleteable(task).ExecuteCommandAsync(); |
| | | } |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforelocationStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum); |
| | | |
| | | try |
| | | { |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforelocationStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum); |
| | | } |
| | | catch(Exception ex) |
| | | { |
| | | _logger.LogInformation($"InEmptyTaskCompleted AddLocationStatusChangeRecord : {ex.Message} "); |
| | | } |
| | | |
| | | if (outboundOrder != null) |
| | | { |
| | |
| | | { |
| | | await Db.Deleteable(task).ExecuteCommandAsync(); |
| | | } |
| | | // è®°å½è´§ä½ç¶æåæ´ |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord( |
| | | locationInfo, |
| | | beforelocationStatus, |
| | | StockChangeType.Inbound.ObjToInt(), |
| | | "", |
| | | task.TaskNum |
| | | ); |
| | | |
| | | await RecalculateOrderStatus(task.OrderNo); |
| | | |
| | | try |
| | | { |
| | | // è®°å½è´§ä½ç¶æåæ´ |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord( |
| | | locationInfo, |
| | | beforelocationStatus, |
| | | StockChangeType.Inbound.ObjToInt(), |
| | | "", |
| | | task.TaskNum |
| | | ); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _logger.LogInformation($"InPickTaskCompleted AddLocationStatusChangeRecord : {ex.Message} "); |
| | | } |
| | | |
| | | _logger.LogInformation($"æçååºå®æå¤çæå - ä»»å¡å·: {task.TaskNum}, æç: {task.PalletCode}, 订å: {task.OrderNo}"); |
| | | _ = Task.Run(async () => |
| | |
| | | _stockRepository.Db.Deleteable(stockInfo).ExecuteCommand(); |
| | | } |
| | | _stockService.StockInfoService.DeleteData(stockInfo); |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Outbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum); |
| | | |
| | | try |
| | | { |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Outbound.ObjToInt(), stockInfo?.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _logger.LogError($"TaskService OutEmptyTaskCompleted AddLocationStatusChangeRecord: {ex.Message} "); |
| | | } |
| | | return await Task.FromResult(WebResponseContent.Instance.OK()); |
| | | |
| | | } |
| | |
| | | .WriteTo.File( // é
ç½®è¾åºå°æä»¶ |
| | | path: "logs/log-.txt", // æ¥å¿æä»¶è·¯å¾ï¼ä¼èªå¨å建 logs æä»¶å¤¹ |
| | | rollingInterval: RollingInterval.Day, // æå¤©æ»å¨æ¥å¿æä»¶ |
| | | retainedFileCountLimit: 7, // æå¤ä¿ç7å¤©çæ¥å¿ |
| | | retainedFileCountLimit: 365, // æå¤ä¿ç7å¤©çæ¥å¿ |
| | | outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}" |
| | | ) |
| | | .CreateLogger(); |