Removed PositEasy Referenecs

This commit is contained in:
Sidharth Prabhu
2026-04-17 12:09:49 +05:30
parent 90926256ca
commit e4bc89a6ca
13 changed files with 766 additions and 6 deletions

View File

@@ -0,0 +1,27 @@
package com.rit.canteen.sales.controller;
import com.rit.canteen.sales.service.ReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.Map;
@RestController
@RequestMapping("/api/reports")
public class ReportController {
@Autowired
private ReportService reportService;
@GetMapping("/monthly")
public Map<String, Object> getMonthlyReport(
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime from,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime to) {
return reportService.getMonthlyReport(from, to);
}
}

View File

@@ -44,4 +44,11 @@ public interface OrderRepository extends JpaRepository<Order, Long>, JpaSpecific
"GROUP BY HOUR(o.createdAt) " +
"ORDER BY HOUR(o.createdAt)")
List<Object[]> getHourlySales(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end);
@Query("SELECT i.productName, SUM(i.quantity), SUM(i.price * i.quantity) " +
"FROM Order o JOIN o.items i " +
"WHERE o.createdAt >= :start AND o.createdAt <= :end " +
"GROUP BY i.productName " +
"ORDER BY SUM(i.quantity) DESC")
List<Object[]> getTopSellingItems(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end);
}

View File

@@ -20,6 +20,15 @@ public interface PurchaseOrderRepository extends JpaRepository<PurchaseOrder, Lo
@org.springframework.data.jpa.repository.Query("SELECT COUNT(p) FROM PurchaseOrder p WHERE p.status != 'PAID'")
long countUnpaidBills();
@org.springframework.data.jpa.repository.Query("SELECT SUM(p.amount) FROM PurchaseOrder p WHERE p.date >= :start AND p.date <= :end")
java.math.BigDecimal getTotalPurchaseAmountInRange(@org.springframework.data.repository.query.Param("start") java.time.LocalDateTime start, @org.springframework.data.repository.query.Param("end") java.time.LocalDateTime end);
@org.springframework.data.jpa.repository.Query("SELECT p.vendor.name, SUM(p.amount), COUNT(p) FROM PurchaseOrder p WHERE p.date >= :start AND p.date <= :end GROUP BY p.vendor.name")
List<Object[]> getVendorSummary(@org.springframework.data.repository.query.Param("start") java.time.LocalDateTime start, @org.springframework.data.repository.query.Param("end") java.time.LocalDateTime end);
@org.springframework.data.jpa.repository.Query("SELECT p.date, SUM(p.amount) FROM PurchaseOrder p WHERE p.date >= :start AND p.date <= :end GROUP BY p.date ORDER BY p.date ASC")
List<Object[]> getPurchaseTrendInRange(@org.springframework.data.repository.query.Param("start") java.time.LocalDateTime start, @org.springframework.data.repository.query.Param("end") java.time.LocalDateTime end);
@org.springframework.data.jpa.repository.Query("SELECT p.date, SUM(p.amount) FROM PurchaseOrder p GROUP BY p.date ORDER BY p.date ASC")
List<Object[]> getPurchaseTrend();

View File

@@ -0,0 +1,83 @@
package com.rit.canteen.sales.service;
import com.rit.canteen.sales.repository.OrderRepository;
import com.rit.canteen.sales.repository.PurchaseOrderRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
@Service
public class ReportService {
@Autowired
private OrderRepository orderRepository;
@Autowired
private PurchaseOrderRepository purchaseOrderRepository;
public Map<String, Object> getMonthlyReport(LocalDateTime from, LocalDateTime to) {
Map<String, Object> report = new HashMap<>();
// 1. Sales Summary
BigDecimal totalSales = orderRepository.getRevenuePerPeriod(from, to);
report.put("totalSales", totalSales != null ? totalSales : BigDecimal.ZERO);
report.put("totalOrders", orderRepository.countByCreatedAtBetween(from, to));
// 2. Top Selling Items
List<Object[]> topItemsData = orderRepository.getTopSellingItems(from, to);
List<Map<String, Object>> topItems = new ArrayList<>();
for (int i = 0; i < Math.min(topItemsData.size(), 10); i++) {
Object[] row = topItemsData.get(i);
Map<String, Object> item = new HashMap<>();
item.put("name", row[0]);
item.put("quantity", row[1]);
item.put("revenue", row[2]);
topItems.add(item);
}
report.put("topSellingItems", topItems);
// 3. Purchase Summary
BigDecimal totalPurchases = purchaseOrderRepository.getTotalPurchaseAmountInRange(from, to);
report.put("totalPurchases", totalPurchases != null ? totalPurchases : BigDecimal.ZERO);
// 4. Vendor Summary
List<Object[]> vendorData = purchaseOrderRepository.getVendorSummary(from, to);
List<Map<String, Object>> vendorSummary = new ArrayList<>();
String topVendor = "N/A";
BigDecimal maxAmount = BigDecimal.ZERO;
for (Object[] row : vendorData) {
Map<String, Object> vendor = new HashMap<>();
String name = (String) row[0];
BigDecimal amount = (BigDecimal) row[1];
vendor.put("name", name);
vendor.put("amount", amount);
vendor.put("orderCount", row[2]);
vendorSummary.add(vendor);
if (amount.compareTo(maxAmount) > 0) {
maxAmount = amount;
topVendor = name;
}
}
report.put("vendorSummary", vendorSummary);
report.put("topVendor", topVendor);
// 5. Store/Stall Overview
List<Object[]> storeData = orderRepository.getStoreOverview(from, to);
List<Map<String, Object>> storeOverview = new ArrayList<>();
for (Object[] row : storeData) {
Map<String, Object> store = new HashMap<>();
store.put("name", row[0] != null ? row[0] : "Unknown Stall");
store.put("sale", row[1] != null ? row[1] : 0);
store.put("orders", row[2] != null ? row[2] : 0);
storeOverview.add(store);
}
report.put("storeOverview", storeOverview);
return report;
}
}