public async Task <ResultEntity> AddReceiveLetter(ReceiveLetterEditDto receiveLetter) { var result = new ResultEntity(); var sendDepartmentCode = TextHelper.RepairZeroRight(await _departmentManager.GetDepartmentCode(receiveLetter.SendDepartmentId), 11); var receiveDepartmentCode = TextHelper.RepairZeroRight(await _departmentManager.GetDepartmentCode(receiveLetter.ReceiveDepartmentId), 11); var serialNumber = await _serialNumberManager.GetSerialNumber(receiveLetter.SendDepartmentId, EnumSerialNumberType.内部交换); var barcodeNo = _barcodeManager.MakeBarcodeLength33(sendDepartmentCode, receiveDepartmentCode, (EnumSecretLevel)receiveLetter.SecretLevel, (EnumUrgentLevel)receiveLetter.UrgencyLevel, serialNumber); if (barcodeNo == "") { result.Message = "条码生成失败"; return(result); } receiveLetter.BarcodeNo = barcodeNo; receiveLetter.LetterNo = barcodeNo.Substring(15, 7); var letter = Mapper.Map <Letter>(receiveLetter); await _letterRepository.AddAsync(letter); var barcode = new Barcode { BarcodeNo = barcodeNo, Entity = EnumBarcodeEntity.信件, Souce = EnumBarcodeSouce.本系统, Status = EnumBarcodeStatus.已就绪, SubStatus = EnumBarcodeSubStatus.正常, CreateTime = DateTime.Now, CreateBy = receiveLetter.CreateBy }; barcode.BarcodeType = barcode.AnalysisBarcodeType(barcodeNo); await _barcodeRepository.AddAsync(barcode); var baroceLog = new BarcodeLog { BarcodeNumber = barcodeNo, BarcodeStatus = EnumBarcodeStatus.已就绪, DepartmentId = letter.SendDepartmentId, OperationTime = DateTime.Now, OperatorId = receiveLetter.CreateBy, }; await _barcodeLogRepository.AddAsync(baroceLog); result.Success = true; await _unitOfWork.CommitAsync(); result.Data = letter.Id; return(result); }
public async Task <int> GetSerialNumber(int departmentId, EnumSerialNumberType type) { var serialNo = await _serialNumberManager.GetSerialNumber(departmentId, type); if (serialNo != 0) { await _unitOfWork.CommitAsync(); } return(serialNo); }
/// <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); }