public async Task <ResultEntity> AddOrUpdateAsync(ExchangeObject exchangeObject) { var resultEntity = new ResultEntity(); var existQuery = _exchangeObjectRepository.GetQueryable().Where(a => a.Name == exchangeObject.Name); if (exchangeObject.Id > 0) { existQuery = existQuery.Where(a => a.Id != exchangeObject.Id); } if (await existQuery.CountAsync() > 0) { resultEntity.Message = "流转对象名称已存在"; } else { if (exchangeObject.Id > 0) { _exchangeObjectRepository.Update(exchangeObject); } else { await _exchangeObjectRepository.AddAsync(exchangeObject); } resultEntity.Success = true; } return(resultEntity); }
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); }
private async Task <CheckBarcodeModel> CheckBarcodeTypeCommon(Letter letter, int placeId) { _logger.LogWarning($"进入通用逻辑"); var checkBarcodeModel = new CheckBarcodeModel(); if (letter.SendDepartmentId == 0) { _logger.LogWarning($"发件单位错误"); return(checkBarcodeModel); } _logger.LogWarning($"信件类型:{letter.LetterType.ToString()}"); switch (letter.LetterType) { case EnumLetterType.收信: { var exchangeObject = await _objectRepository.GetQueryable().Where(a => a.ObjectType == EnumObjectType.机构 && a.Value == letter.ReceiveDepartmentId) .FirstOrDefaultAsync(); if (exchangeObject == null) { _logger.LogWarning($"不存在的收件流转对象"); checkBarcodeModel.Type = EnumCheckBarcodeType.无效; return(checkBarcodeModel); } var objectId = exchangeObject.Id; var boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && a.ExchangeObjectId == objectId && a.Box.Enabled && a.ExchangeObject.ObjectType != EnumObjectType.道) .Select(a => a.Box).ToListAsync(); if (boxs.Count > 0) { _logger.LogWarning($"结束:当前场所存在收件箱格"); checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = boxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }) .ToList(); } else { _logger.LogWarning($"递归上级流转对象在本场所有箱格"); var parentObject = exchangeObject; while (parentObject.ParentId != null) { var o = parentObject; var tempParentObject = await _objectRepository.GetQueryable().Where(a => a.Id == o.ParentId.Value) .FirstOrDefaultAsync(); boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && a.ExchangeObjectId == tempParentObject.Id && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); if (boxs.Count > 0) { _logger.LogWarning($"结束:存在上级流转对象箱格"); checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = boxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }) .ToList(); return(checkBarcodeModel); } parentObject = tempParentObject; } if (exchangeObject.IsVirtual) { _logger.LogWarning($"收件流转对象为虚拟对象"); var childBoxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && a.ExchangeObject.ParentId == exchangeObject.Id && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); if (childBoxs.Count > 0) { checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = childBoxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }) .ToList(); _logger.LogWarning($"结束:存在收件流转对象下级的箱格"); return(checkBarcodeModel); } boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && a.Box.Enabled && a.ExchangeObject.ObjectType != EnumObjectType.道) .Select(a => a.Box).ToListAsync(); checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = boxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }) .ToList(); _logger.LogWarning($"结束:除渠道箱外全部返回"); return(checkBarcodeModel); } } break; } case EnumLetterType.发信: { var receiveDepartment = await _departmentRepository.GetByIdAsync(letter.ReceiveDepartmentId); var receiveChannel = receiveDepartment.ReceiveChannel; if (letter.SecretLevel == EnumSecretLevel.绝密) { receiveChannel = EnumChannel.机要通信; } if (receiveChannel == EnumChannel.机要通信) { //2018.12.26添加机要通信渠道箱不允许投非密件 if (letter.SecretLevel == EnumSecretLevel.普通) { _logger.LogWarning($"结束:非密件不允许走机要通信渠道"); return(checkBarcodeModel); } //2019.2.12添加直接到部级的单位不允许投箱 if (letter.BarcodeNo.Contains("015000")) { _logger.LogWarning($"结束:直接到部级不允许投箱"); return(checkBarcodeModel); } } //同城渠道可以走直送 var allowChannels = new List <int>(); allowChannels.Add((int)receiveChannel); if (receiveChannel == EnumChannel.城交换) { allowChannels.Add((int)EnumChannel.直送); } var channelExchangeObjects = await _objectRepository.GetQueryable().Where(a => a.ObjectType == EnumObjectType.道 && allowChannels.Contains(a.Value)) .ToListAsync(); if (channelExchangeObjects.Count > 0) { var boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && channelExchangeObjects.Exists(b => b.Id == a.ExchangeObjectId) && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); if (boxs.Count > 0) { checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = boxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }).ToList(); _logger.LogWarning($"结束:存在对外的渠道箱"); return(checkBarcodeModel); } var currentSend = false; var place = await _placeRepository.GetByIdAsync(placeId); var sendDepartment = await _departmentRepository.GetByIdAsync(letter.SendDepartmentId); while (sendDepartment.ParentId != null) { if (place.DepartmentId == sendDepartment.Id) { currentSend = true; break; } sendDepartment = await _departmentRepository.GetByIdAsync(sendDepartment.ParentId.Value); } if (currentSend) { var insideExchangeObjects = await _objectRepository.GetQueryable().Where(a => a.ObjectType == EnumObjectType.道 && a.Value == (int)EnumChannel.内部) .ToListAsync(); List <ExchangeObject> matchExchangeObjects; if (receiveChannel == EnumChannel.城交换 && letter.SecretLevel != EnumSecretLevel.绝密) { matchExchangeObjects = insideExchangeObjects.Where(a => a.RestrictionCode.Contains("同城交换")).ToList(); } else { matchExchangeObjects = insideExchangeObjects.Where(a => a.RestrictionCode.Contains("机要通信")).ToList(); } if (matchExchangeObjects.Count > 0) { _logger.LogWarning($"结束:内部限制码渠道箱匹配成功"); boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && matchExchangeObjects.Any(b => b.Id == a.ExchangeObjectId) && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); if (boxs.Count == 0) { _logger.LogWarning($"结束:内部渠道箱匹配成功"); boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && insideExchangeObjects.Any(b => b.Id == a.ExchangeObjectId) && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); } } if (boxs.Count > 0) { checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = boxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }).ToList(); } } else { checkBarcodeModel.Type = EnumCheckBarcodeType.无效; } } } break; case EnumLetterType.内交换: { var exchangeObject = await _objectRepository.GetQueryable().Where(a => a.ObjectType == EnumObjectType.机构 && a.Value == letter.ReceiveDepartmentId) .FirstOrDefaultAsync(); if (exchangeObject == null) { _logger.LogWarning($"不存在的收件流转对象"); checkBarcodeModel.Type = EnumCheckBarcodeType.无效; return(checkBarcodeModel); } var tempObject = exchangeObject; var boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && a.ExchangeObjectId == tempObject.Id && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); if (boxs.Count > 0) { checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = boxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }) .ToList(); _logger.LogWarning($"结束:当前场所下存在收件流转对象箱格"); return(checkBarcodeModel); } var parentObject = exchangeObject; while (parentObject.ParentId != null) { var o = parentObject; var tempParentObject = await _objectRepository.GetQueryable().Where(a => a.Id == o.ParentId.Value) .FirstOrDefaultAsync(); boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && a.ExchangeObjectId == tempParentObject.Id && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); if (boxs.Count > 0) { checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = boxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }) .ToList(); _logger.LogWarning($"结束:存在流转对象上级对象箱格"); return(checkBarcodeModel); } parentObject = tempParentObject; } if (exchangeObject.IsVirtual) { _logger.LogWarning($"流转对象为虚拟流转对象"); var childBoxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && a.ExchangeObject.ParentId == exchangeObject.Id && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); if (childBoxs.Count > 0) { _logger.LogWarning($"结束:存在流转对象子对象箱格"); checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = childBoxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }) .ToList(); return(checkBarcodeModel); } } var currentSend = false; //判断是否是该场所下的单位发件 var place = await _placeRepository.GetByIdAsync(placeId); var sendDepartment = await _departmentRepository.GetByIdAsync(letter.SendDepartmentId); while (sendDepartment.ParentId != null) { if (place.DepartmentId == sendDepartment.Id) { currentSend = true; break; } sendDepartment = await _departmentRepository.GetByIdAsync(sendDepartment.ParentId.Value); } if (currentSend) { _logger.LogWarning($"当前场所下单位发件"); //当前场所下单位发件 var exchangeObjects = await _objectRepository.GetQueryable().Where(a => a.ObjectType == EnumObjectType.道 && a.Value == (int)EnumChannel.内部) .ToListAsync(); var receiveCode = letter.GetReceiveCode(letter.BarcodeNo); var matchExchangeObjects = exchangeObjects.Where(a => receiveCode.Contains(a.RestrictionCode)).ToList(); if (matchExchangeObjects.Count > 0) { if (matchExchangeObjects.Count > 1) { //匹配数量超过一个,排除限制码为空的对象 matchExchangeObjects = exchangeObjects.Where(a => receiveCode.Contains(a.RestrictionCode) && !string.IsNullOrWhiteSpace(a.RestrictionCode)).ToList(); } boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && matchExchangeObjects.Any(b => b.Id == a.ExchangeObjectId) && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); _logger.LogWarning($"结束:内部限制码渠道箱匹配成功"); } else { boxs = await _boxObjectRepository.GetQueryable() .Where(a => a.Box.PlaceId == placeId && exchangeObjects.Any(b => b.Id == a.ExchangeObjectId) && a.Box.Enabled) .Select(a => a.Box).ToListAsync(); _logger.LogWarning($"结束:内部渠道箱匹配成功"); } checkBarcodeModel.Type = EnumCheckBarcodeType.唯一指定; checkBarcodeModel.Record = boxs.Select(a => new CheckedBarcodeRecord { FileCount = 1, Message = "", No = a.Id }).ToList(); } else { checkBarcodeModel.Type = EnumCheckBarcodeType.无效; } } break; } return(checkBarcodeModel); }