コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }