/// <summary> /// 生成收件清单 /// </summary> /// <param name="placeId">场所ID</param> /// <param name="objectId">流转对象ID</param> /// <param name="userId">用户ID</param> /// <param name="departmentId">收件单位ID</param> /// <returns></returns> public async Task <ResultEntity> CreateReceiveBill(int placeId, int objectId, int userId, int departmentId) { _logger.LogWarning($"--------------开始形成取件清单--------------"); var result = new ResultEntity(); var barcodeLogs = await _barcodeLogRepository.GetQueryable().Where(a => !a.IsSynBill && a.CurrentPlaceId == placeId && a.CurrentObjectId == objectId && a.BarcodeStatus == EnumBarcodeStatus.已签收).ToListAsync(); if (barcodeLogs.Count > 0) { var exchangeObject = await _exchangeObjectRepository.GetByIdAsync(objectId); var user = await _userRepository.GetByIdAsync(userId); var barcodeNumbers = barcodeLogs.Select(a => a.BarcodeNumber).ToList(); var letters = _letterRepository.GetQueryable().Include(a => a.ReceiveDepartment).Include(a => a.SendDepartment) .Where(a => barcodeNumbers.Contains(a.BarcodeNo)); //清单全局使用一个流水,防止串号 var serialNo = await _serialNumberManager.GetSerialNumber(0, EnumSerialNumberType.清单); var exchangeList = new ExchangeList { CreateBy = userId, CreateTime = DateTime.Now, DepartmentId = departmentId, ObjectName = exchangeObject.Name, ExchangeUserId = userId, ExchangeUserName = user.DisplayName, ObjectId = objectId, Printed = false, Type = EnumListType.收件清单 }; exchangeList.ListNo = exchangeList.GetListNo(serialNo); await _exchangeListRepository.AddAsync(exchangeList); await _unitOfWork.CommitAsync(); foreach (var letter in letters) { var barcodeLog = barcodeLogs.FirstOrDefault(a => a.BarcodeNumber == letter.BarcodeNo); if (barcodeLog != null) { var exchangeListDetail = new ExchangeListDetail { BarcodeNo = letter.LetterNo, CustomData = letter.CustomData, DetailType = barcodeLog.BarcodeSubStatus == EnumBarcodeSubStatus.退回 ? EnumListDetailType.收退件 : EnumListDetailType.收件, ExchangeListId = exchangeList.Id, ReceiveDepartmentName = letter.ReceiveDepartment.FullName, SendDepartmentName = letter.SendDepartment.FullName, SecSecretLevelText = letter.GetSecretLevel(letter.BarcodeNo).ToString(), UrgencyLevelText = letter.GetUrgencyLevel(letter.BarcodeNo).ToString(), Time = barcodeLog.LastOperationTime }; await _exchangeListDetailRepository.AddAsync(exchangeListDetail); barcodeLog.IsSynBill = true; } } result.Success = true; result.Data = exchangeList.Id; await _unitOfWork.CommitAsync(); } else { _logger.LogWarning($"暂无收件清单"); result.Message = "暂无收件清单"; } _logger.LogWarning($"--------------结束形成取件清单--------------"); return(result); }
public async Task <ResultEntity> GetCheckInfo(int userId, int placeId, DateTime beginTime, DateTime endTime) { var result = new ResultEntity(); var listInfo = new List <string>(); var managePlace = await _placeWardenRepository.GetQueryable().Include(a => a.Place).FirstOrDefaultAsync(a => a.UserId == userId); var place = await _placeRepository.GetQueryable().Include(a => a.Parent).FirstOrDefaultAsync(a => a.Id == placeId); if (managePlace == null) { result.Message = "非场所管理员,无法使用此功能"; return(result); } if (managePlace.PlaceId == placeId) { if (place.ParentId == null) { result.Message = "使用场所错误,无法核销"; } else { var objectIds = await _objectSignerRepository.GetQueryable().Where(a => a.UserId == userId) .Select(a => a.ExchangeObjectId).ToListAsync(); var receiveLogs = await _barcodeLogRepository.GetQueryable().Where(a => a.BarcodeStatus == EnumBarcodeStatus.已签收 && a.CurrentPlaceId == place.ParentId && a.OperationTime.Date >= beginTime.Date && a.OperationTime.Date <= endTime.Date && objectIds.Contains(a.CurrentObjectId)).Select(a => a.BarcodeNumber) .ToListAsync(); listInfo.Add($"场所【{place.Parent.Name}】取件【{receiveLogs.Count}】"); var sendLogs = await _barcodeLogRepository.GetQueryable().Where(a => a.BarcodeStatus == EnumBarcodeStatus.已投递 && a.CurrentPlaceId == placeId && a.OperationTime.Date >= beginTime.Date && a.OperationTime.Date <= endTime.Date && receiveLogs.Contains(a.BarcodeNumber)).Select(a => a.BarcodeNumber).ToListAsync(); listInfo.Add($"场所【{place.Name}】投件【{sendLogs.Count}】"); listInfo.Add(receiveLogs.Count == sendLogs.Count ? "成功!所有文件已成功投递" : $"警告!{receiveLogs.Count - sendLogs.Count}份文件尚未投递,请查看下方明细!"); } } else { var insideObjects = await _exchangeObjectRepository.GetQueryable() .Where(a => a.ObjectType == EnumObjectType.道).Select(a => a.Id).ToListAsync(); var receiveLogs = await _barcodeLogRepository.GetQueryable().Where(a => a.BarcodeStatus == EnumBarcodeStatus.已签收 && a.CurrentPlaceId == managePlace.PlaceId && a.OperationTime.Date >= beginTime.Date && a.OperationTime.Date <= endTime.Date && insideObjects.Contains(a.CurrentObjectId)).Select(a => a.BarcodeNumber) .ToListAsync(); listInfo.Add($"场所【{managePlace.Place.Name}】取件【{receiveLogs.Count}】"); var sendLogs = await _barcodeLogRepository.GetQueryable().Where(a => a.BarcodeStatus == EnumBarcodeStatus.已投递 && a.CurrentPlaceId == placeId && a.OperationTime.Date >= beginTime.Date && a.OperationTime.Date <= endTime.Date && receiveLogs.Contains(a.BarcodeNumber)).Select(a => a.BarcodeNumber).ToListAsync(); listInfo.Add($"场所【{place.Name}】投件【{sendLogs.Count}】"); listInfo.Add(receiveLogs.Count == sendLogs.Count ? "成功!所有文件已成功投递" : $"警告!{receiveLogs.Count - sendLogs.Count}份文件尚未投递,请查看下方明细!"); } result.Success = true; result.Data = listInfo; return(result); }
public async Task <int> SaveLetter(int placeId, string barCodeNo, int boxId, int fileCount, bool isJiaJi) { _logger.LogWarning($"--------------开始保存条码:{barCodeNo}--------------"); var place = await _placeRepository.GetByIdAsync(placeId); var letter = await _letterRepository.GetQueryable().Where(a => a.BarcodeNo == barCodeNo).FirstOrDefaultAsync(); if (letter == null) { //保存信件基本信息 letter = new Letter { BarcodeNo = barCodeNo }; letter.LetterNo = letter.GetLetterNo(barCodeNo); //本系统未登记过的信件,全部判定为收信 letter.LetterType = EnumLetterType.收信; letter.ReceiveDepartmentId = await _barcodeManager.GetReceiveDepartmentId(barCodeNo); letter.SendDepartmentId = await _barcodeManager.GetSendDepartmentId(barCodeNo); letter.SecretLevel = letter.GetSecretLevel(barCodeNo); letter.UrgencyLevel = letter.GetUrgencyLevel(barCodeNo); letter.CreateTime = DateTime.Now; letter.LetterNo = letter.GetLetterNo(barCodeNo); await _letterRepository.AddAsync(letter); } var barCode = await _barcodeRepository.GetQueryable().Where(a => a.BarcodeNo == barCodeNo) .FirstOrDefaultAsync(); var boxObject = await _boxObjectRepository.GetQueryable().Where(a => a.BoxId == boxId).FirstOrDefaultAsync(); if (barCode == null) { //添加条码记录 barCode = new Barcode { BarcodeNo = barCodeNo, Entity = EnumBarcodeEntity.信件, Souce = EnumBarcodeSouce.外部, Status = EnumBarcodeStatus.已投递, SubStatus = EnumBarcodeSubStatus.正常, CreateTime = DateTime.Now, CurrentObjectId = boxObject.ExchangeObjectId, CurrentPlaceId = placeId }; barCode.BarcodeType = barCode.AnalysisBarcodeType(barCodeNo); await _barcodeRepository.AddAsync(barCode); } barCode.CurrentObjectId = boxObject.ExchangeObjectId; barCode.CurrentPlaceId = placeId; barCode.UpdateTime = DateTime.Now; switch (barCode.Status) { case EnumBarcodeStatus.已就绪: case EnumBarcodeStatus.已签收: case EnumBarcodeStatus.已勘误: barCode.Status = EnumBarcodeStatus.已投递; break; case EnumBarcodeStatus.已投递: case EnumBarcodeStatus.已退回: break; case EnumBarcodeStatus.申请退回: barCode.Status = EnumBarcodeStatus.已投递; barCode.SubStatus = EnumBarcodeSubStatus.退回; break; } //添加条码日志记录 var preBarcodeLog = await _barcodeLogRepository.GetQueryable().Where(a => a.BarcodeNumber == barCodeNo) .OrderByDescending(a => a.Id).FirstOrDefaultAsync(); var barcodeLog = new BarcodeLog { BarcodeNumber = barCodeNo, BarcodeStatus = EnumBarcodeStatus.已投递, DepartmentId = preBarcodeLog?.DepartmentId ?? place.DepartmentId, OperationTime = DateTime.Now, OperatorId = null, CurrentObjectId = boxObject.ExchangeObjectId, CurrentPlaceId = placeId }; if (barCode.SubStatus == EnumBarcodeSubStatus.退回) { barcodeLog.Remark = "已投递申请退回的文件"; } await _barcodeLogRepository.AddAsync(barcodeLog); //更新箱格信息 var box = await _boxRepository.GetByIdAsync(boxId); box.FileCount += 1; box.HasUrgent = letter.UrgencyLevel != EnumUrgentLevel.普通 || isJiaJi; _logger.LogWarning($"--------------结束保存条码--------------"); return(1); }