You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
332 lines
14 KiB
332 lines
14 KiB
package com.gcc.communityHall.service.Impl;
|
|
|
|
import java.io.FileNotFoundException;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.time.LocalDate;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
import java.util.stream.Collectors;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
import com.gcc.communityHall.entity.HallDetails;
|
|
import com.gcc.communityHall.entity.HallImages;
|
|
import com.gcc.communityHall.repository.HallDetailsRepository;
|
|
import com.gcc.communityHall.repository.HallImagesRepository;
|
|
import com.gcc.communityHall.service.HallDetailService;
|
|
|
|
@Service
|
|
public class HallDetailServiceImpl implements HallDetailService {
|
|
|
|
// @Autowired
|
|
private HallDetailsRepository hallDetailsRepository;
|
|
private HallImagesRepository hallImagesRepository;
|
|
private final String hallDirectory;
|
|
private final String hallImageUrl;
|
|
@Autowired
|
|
HallDetailServiceImpl(HallDetailsRepository hallDetailsRepository, HallImagesRepository hallImagesRepository, @Value("${file.hall.upload.directory}") String hallDirectory, @Value("${file.hall.fullpath}") String hallImageUrl){
|
|
this.hallDetailsRepository=hallDetailsRepository;
|
|
this.hallDirectory=hallDirectory;
|
|
this.hallImageUrl=hallImageUrl;
|
|
this.hallImagesRepository = hallImagesRepository;
|
|
}
|
|
@Override
|
|
public HallDetails saveHallDetails(HallDetails hallDetails, List<MultipartFile> hallImages) {
|
|
if(hallImages.size()>0){
|
|
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public HallDetails getHallById(int hallId) {
|
|
Optional<HallDetails> hallDetails = hallDetailsRepository.findById(hallId);
|
|
if(hallDetails.isPresent()){
|
|
return hallDetails.get();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public HallDetails deActivateHallById(int hallId) {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public HallDetails saveHall(
|
|
String hallName,float depositAmount, float halfDayAmt,
|
|
float fullDayAmt, float gst,float hallArea, String ebNumber, float ebCostPerUnit,
|
|
int parkingCapacity, int seatingCapacity,
|
|
String doorNo, String street, String area, String zone,
|
|
String division, String landMark, String city, int pinCode,
|
|
String latitude, String longitude, String hallInchargeName,
|
|
long hallInchargeNo,String updatedId, MultipartFile[] hallImages) {
|
|
HallDetails hall = new HallDetails();
|
|
hall.setHallName(hallName);
|
|
hall.setDoorNo(doorNo);
|
|
hall.setHallArea(hallArea);
|
|
hall.setStreet(street);
|
|
hall.setArea(area);
|
|
hall.setCity(city);
|
|
hall.setPinCode(pinCode);
|
|
hall.setDivision(division);
|
|
hall.setZone(zone);
|
|
hall.setEbNumber(ebNumber);
|
|
hall.setEbCostPerUnit(ebCostPerUnit);
|
|
hall.setFullDayRent(fullDayAmt);
|
|
hall.setHalfDayRent(halfDayAmt);
|
|
hall.setDepositAmount(depositAmount);
|
|
hall.setGst(gst);
|
|
hall.setHallInchargeName(hallInchargeName);
|
|
hall.setHallInchargeMobno(hallInchargeNo);
|
|
hall.setSeatingCapacity(seatingCapacity);
|
|
hall.setParkingCapacity(String.valueOf(parkingCapacity));
|
|
hall.setLatitude(latitude);
|
|
hall.setLongitude(longitude);
|
|
hall.setLankMark(landMark);
|
|
hall.setUpdatedId(updatedId);
|
|
hall.setCreateddate(LocalDate.now());
|
|
HallDetails hallDetails = hallDetailsRepository.save(hall);
|
|
if(hallImages!=null && hallImages.length>0){
|
|
int i=0;
|
|
for (MultipartFile hallImage : hallImages) {
|
|
HallImages hallImages1 = new HallImages();
|
|
String filePath = hallDirectory+"/"+hallDetails.getHallId()+ "_"+i+"_" + hallImage.getOriginalFilename();
|
|
String imageUrl = hallImageUrl+"hallImages/"+hallDetails.getHallId()+ "_"+i+"_" + hallImage.getOriginalFilename();
|
|
try(FileOutputStream fos = new FileOutputStream(filePath)){
|
|
byte [] bytes = hallImage.getBytes();
|
|
fos.write(bytes);
|
|
hallImages1.setHallDetails(hallDetails);
|
|
hallImages1.setHallImage(imageUrl); // hall/imagename.jpg
|
|
hallImagesRepository.save(hallImages1);
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
public void updatenewHallImages(Integer hallId, MultipartFile[] newHallImages) {
|
|
// Fetch the existing hall details from the database
|
|
HallDetails hallDetails = hallDetailsRepository.findById(hallId)
|
|
.orElseThrow(() -> new RuntimeException("Hall not found with id: " + hallId));
|
|
|
|
if (newHallImages != null && newHallImages.length > 0) {
|
|
int i = hallDetails.getHallImagesList().size(); // Start index after existing images
|
|
for (MultipartFile hallImage : newHallImages) {
|
|
HallImages hallImageEntity = new HallImages();
|
|
String filePath = hallDirectory + "/" + hallDetails.getHallId() + "_" + i + "_" + hallImage.getOriginalFilename();
|
|
String imageUrl = hallImageUrl + "hallImages/" + hallDetails.getHallId() + "_" + i + "_" + hallImage.getOriginalFilename();
|
|
|
|
try (FileOutputStream fos = new FileOutputStream(filePath)) {
|
|
byte[] bytes = hallImage.getBytes();
|
|
fos.write(bytes);
|
|
|
|
hallImageEntity.setHallDetails(hallDetails);
|
|
hallImageEntity.setHallImage(imageUrl);
|
|
hallImagesRepository.save(hallImageEntity); // Save the new image in the database
|
|
|
|
} catch (IOException e) {
|
|
throw new RuntimeException("Failed to save hall image", e);
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
public String updateHallImage(Integer hallImageId, MultipartFile hallImage) throws IOException {
|
|
Optional<HallImages> optionalHallImage = hallImagesRepository.findById(hallImageId);
|
|
if (optionalHallImage.isPresent()) {
|
|
HallImages hallImages = optionalHallImage.get();
|
|
|
|
// Generate the new file path and URL
|
|
String filePath = hallDirectory + "/" + hallImageId + "_" + hallImage.getOriginalFilename();
|
|
String imageUrl = hallImageUrl + "hallImages/" + hallImageId + "_" + hallImage.getOriginalFilename();
|
|
|
|
// Save the new image file
|
|
try (FileOutputStream fos = new FileOutputStream(filePath)) {
|
|
byte[] bytes = hallImage.getBytes();
|
|
fos.write(bytes);
|
|
hallImages.setHallImage(imageUrl);
|
|
hallImagesRepository.save(hallImages);
|
|
}
|
|
|
|
return imageUrl;
|
|
} else {
|
|
throw new IllegalArgumentException("Hall image not found with ID: " + hallImageId);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public List<HallImages> getHallImages(int hallId) {
|
|
// TODO Auto-generated method stub
|
|
HallDetails hall = new HallDetails();
|
|
hall.setHallId(hallId);
|
|
|
|
return hallImagesRepository.findByHallDetails(hall);
|
|
}
|
|
|
|
@Override
|
|
public String updateHallDetail(HallDetails hallDetails, List<MultipartFile> images) {
|
|
HallDetails existingHall = hallDetailsRepository.findById(hallDetails.getHallId()).orElse(null);
|
|
|
|
if (existingHall != null) {
|
|
// Update hall details
|
|
existingHall.setZone(hallDetails.getZone());
|
|
existingHall.setDivision(hallDetails.getDivision());
|
|
existingHall.setHallName(hallDetails.getHallName());
|
|
existingHall.setDoorNo(hallDetails.getDoorNo());
|
|
existingHall.setStreet(hallDetails.getStreet());
|
|
existingHall.setArea(hallDetails.getArea());
|
|
existingHall.setCity(hallDetails.getCity());
|
|
existingHall.setPinCode(hallDetails.getPinCode());
|
|
existingHall.setHallInchargeName(hallDetails.getHallInchargeName());
|
|
existingHall.setHallInchargeMobno(hallDetails.getHallInchargeMobno());
|
|
existingHall.setLandMark(hallDetails.getLandMark());
|
|
existingHall.setLatitude(hallDetails.getLatitude());
|
|
existingHall.setLongitude(hallDetails.getLongitude());
|
|
existingHall.setDepositAmount(hallDetails.getDepositAmount());
|
|
existingHall.setFullDayRent(hallDetails.getFullDayRent());
|
|
existingHall.setHalfDayRent(hallDetails.getHalfDayRent());
|
|
existingHall.setParkingCapacity(hallDetails.getParkingCapacity());
|
|
existingHall.setSeatingCapacity(hallDetails.getSeatingCapacity());
|
|
existingHall.setGst(hallDetails.getGst());
|
|
existingHall.setEbCostPerUnit(hallDetails.getEbCostPerUnit());
|
|
existingHall.setActive(hallDetails.isActive());
|
|
existingHall.setEbNumber(hallDetails.getEbNumber());
|
|
|
|
// Update images
|
|
if (images != null) {
|
|
List<HallImages> hallImagesList = existingHall.getHallImagesList();
|
|
if (hallImagesList == null) {
|
|
hallImagesList = new ArrayList<>();
|
|
} else {
|
|
hallImagesList.clear(); // Clear existing images
|
|
}
|
|
int i=0;
|
|
for (MultipartFile image : images) {
|
|
HallImages hallImage = new HallImages();
|
|
try {
|
|
// Save image to storage location
|
|
String filePath = hallDirectory + "/" + existingHall.getHallId() + "_"+i+"_" + image.getOriginalFilename();
|
|
String imageUrl = hallImageUrl + "hall/" + existingHall.getHallId() + "_" +i+"_"+ image.getOriginalFilename();
|
|
try (FileOutputStream fos = new FileOutputStream(filePath)) {
|
|
byte[] bytes = image.getBytes();
|
|
fos.write(bytes);
|
|
}
|
|
|
|
hallImage.setHallImage(imageUrl);
|
|
hallImage.setHallDetails(existingHall);
|
|
hallImagesList.add(hallImage);
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
i++;
|
|
}
|
|
existingHall.setHallImagesList(hallImagesList);
|
|
}
|
|
|
|
hallDetailsRepository.save(existingHall);
|
|
return "success";
|
|
}
|
|
return "failed";
|
|
}
|
|
|
|
@Override
|
|
public List<HallDetails> removeHallById(HashSet<Integer> hallIds) {
|
|
if(hallIds.isEmpty()){
|
|
hallIds.add(0);
|
|
}
|
|
//System.out.println(hallIds);
|
|
return hallDetailsRepository.removeHallById(hallIds);
|
|
}
|
|
public List<HallDetails> getHallNames() {
|
|
List<HallDetails> halls = hallDetailsRepository.findAll();
|
|
return halls.stream()
|
|
.map(hall -> {
|
|
HallDetails hallDetails = new HallDetails();
|
|
hallDetails.setHallId(hall.getHallId());
|
|
hallDetails.setHallName(hall.getHallName());
|
|
return hallDetails;
|
|
})
|
|
.collect(Collectors.toList());
|
|
}
|
|
@Override
|
|
public void saveHallImage(Long hallId, MultipartFile file) throws IOException {
|
|
try {
|
|
HallDetails hallDetails = hallDetailsRepository.findById(Math.toIntExact(hallId))
|
|
.orElseThrow(() -> new IllegalArgumentException("Invalid hall ID"));
|
|
|
|
HallImages hallImage = new HallImages();
|
|
hallImage.setHallImage(Arrays.toString(file.getBytes())); // Check if this line needs adjustment based on file handling
|
|
hallImage.setHallDetails(hallDetails);
|
|
hallImagesRepository.save(hallImage);
|
|
} catch (Exception e) {
|
|
e.printStackTrace(); // Log the full stack trace for debugging
|
|
throw new RuntimeException("Failed to save hall image: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public List<HallImages> getHallImagesByHallId(Long hallId) {
|
|
return hallImagesRepository.findByHallDetails_HallId(hallId);
|
|
}
|
|
@Override
|
|
public List<HallDetails> getHallNamesbyzone(String zone) {
|
|
List<HallDetails> halls = hallDetailsRepository.findByZone(zone);
|
|
return halls.stream()
|
|
.map(hall -> {
|
|
HallDetails hallDetails = new HallDetails();
|
|
hallDetails.setHallId(hall.getHallId());
|
|
hallDetails.setHallName(hall.getHallName());
|
|
return hallDetails;
|
|
})
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
@Override
|
|
public Map<String, Object> getHallsDetailsByZone(String zone) {
|
|
// Get the total bookings and amount received by zone
|
|
Map<String, Object> halldetails = hallDetailsRepository.getTotalBookingsAndAmountReceivedByZone(zone);
|
|
|
|
// Create a new modifiable map and copy values from the unmodifiable map
|
|
Map<String, Object> modifiableHalldetails = new HashMap<>(halldetails);
|
|
|
|
// Get the details of each hall in the zone
|
|
List<Map<String, Object>> zonehalls = hallDetailsRepository.getHallDetailsByZone(zone);
|
|
|
|
// Add the list of hall details to the new modifiable map
|
|
modifiableHalldetails.put("zonehalls", zonehalls);
|
|
|
|
return modifiableHalldetails;
|
|
}
|
|
|
|
//officer dashboard
|
|
@Override
|
|
public Map<String, Object> getHallsDetailsForOfficer(String zone) {
|
|
// Get the total bookings and amount received by zone
|
|
Map<String, Object> halldetails = hallDetailsRepository.getTotalCountsForOfficer(zone);
|
|
|
|
// Create a new modifiable map and copy values from the unmodifiable map
|
|
Map<String, Object> modifiableHalldetails = new HashMap<>(halldetails);
|
|
|
|
// Get the details of each hall in the zone
|
|
List<Map<String, Object>> zonehalls = hallDetailsRepository.getHallCountsForOfficer(zone);
|
|
|
|
// Add the list of hall details to the new modifiable map
|
|
modifiableHalldetails.put("zonehalls", zonehalls);
|
|
|
|
return modifiableHalldetails;
|
|
}
|
|
}
|