|
|
package com.gcc_manpower.gcctonermanagement.service;
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Service;
@Servicepublic class TonerService {
private JdbcTemplate jdbcTemplate;
@Autowired public void setDataSource(@Qualifier("mysqlTonerManagementDataSource") DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); }
@jakarta.annotation.PostConstruct public void initTables() { try { jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS stock_register_details (" + "id INT AUTO_INCREMENT PRIMARY KEY, " + "company_name VARCHAR(30), " + "pid VARCHAR(20), " + "tid VARCHAR(30), " + "qty_registered VARCHAR(30), " + "dc_upload VARCHAR(250), " + "cdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " + "updated_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " + "order_by VARCHAR(45), " + "is_active TINYINT DEFAULT 1, " + "is_delete TINYINT DEFAULT 0" + ")");
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS department_requested_details (" + "id INT AUTO_INCREMENT PRIMARY KEY, " + "req_no VARCHAR(70), " + "company_name VARCHAR(30), " + "itcell_ref_no VARCHAR(45), " + "dept_id VARCHAR(30), " + "pid VARCHAR(20), " + "tid VARCHAR(30), " + "qty_registered VARCHAR(30), " + "qty_requested VARCHAR(30), " + "qty_delivered VARCHAR(30), " + "dc_upload VARCHAR(250), " + "user_request_upload VARCHAR(250), " + "final_delivered_upload VARCHAR(250), " + "cdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " + "updated_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " + "updated_by VARCHAR(45), " + "order_by VARCHAR(45), " + "is_active TINYINT DEFAULT 1, " + "is_delete TINYINT DEFAULT 0" + ")"); } catch (Exception e) { System.err.println("Error initializing tables: " + e.getMessage()); e.printStackTrace(); } }
public List<Map<String, Object>> getActivePrinters() { String sql = "SELECT id, printer_name FROM printer_model_list where is_active = 1 AND is_delete = 0 "; try { return jdbcTemplate.queryForList(sql); } catch (Exception e) { System.err.println("Error fetching printers list: " + e.getMessage()); return new ArrayList<>(); } }
public List<Map<String, Object>> getActiveTonersByPrinter(int pid) { String sql = "SELECT id, model_name FROM toner_model_list WHERE pid = ? AND is_active = 1 AND is_delete = 0 "; try { return jdbcTemplate.queryForList(sql, pid); } catch (Exception e) { System.err.println("Error fetching toners list: " + e.getMessage()); return new ArrayList<>(); } }
public String getTonerModelName(int tid) { String sql = "SELECT model_name FROM toner_model_list WHERE id = ?"; try { return jdbcTemplate.queryForObject(sql, String.class, tid); } catch (Exception e) { System.err.println("Error fetching toner model name for id " + tid + ": " + e.getMessage()); return "UNKNOWN"; } }
public boolean saveInwardRegister(String companyName, int pid, int tid, String qty, String dcUpload, String username) { String sql = "INSERT INTO stock_register_details " + "(company_name, pid, tid, qty_registered, dc_upload, cdate, updated_date, order_by, is_active, is_delete) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, 0)"; java.sql.Timestamp now = new java.sql.Timestamp(System.currentTimeMillis()); try { int rows = jdbcTemplate.update(sql, companyName, String.valueOf(pid), String.valueOf(tid), qty, dcUpload, now, now, username); return rows > 0; } catch (Exception e) { System.err.println("Error saving inward register: " + e.getMessage()); e.printStackTrace(); return false; } }
public int getMaxRequestId() { String sql = "SELECT COALESCE(MAX(id), 0) FROM department_requested_details"; try { return jdbcTemplate.queryForObject(sql, Integer.class); } catch (Exception e) { System.err.println("Error fetching max id from department_requested_details: " + e.getMessage()); return 0; } }
public String saveUserRequest(String itCellRefNo, String deptId, int pid, int tid, String qtyRequested, String userRequestUpload, String username) { String tonerModel = getTonerModelName(tid); String cleanModel = tonerModel.trim().replaceAll("\\s+", "-").replaceAll("[^a-zA-Z0-9-]", ""); int maxId = getMaxRequestId(); int seqNum = 1000 + maxId + 1; int year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR); String reqNo = String.format("%s-%d-%04d", cleanModel, year, seqNum);
String sql = "INSERT INTO department_requested_details " + "(req_no, itcell_ref_no, dept_id, pid, tid, qty_requested, qty_delivered, user_request_upload, cdate, updated_date, updated_by, is_active, is_delete) " + "VALUES (?, ?, ?, ?, ?, ?, '0', ?, ?, ?, ?, 1, 0)"; java.sql.Timestamp now = new java.sql.Timestamp(System.currentTimeMillis()); try { int rows = jdbcTemplate.update(sql, reqNo, itCellRefNo, deptId, String.valueOf(pid), String.valueOf(tid), qtyRequested, userRequestUpload, now, now, username); return rows > 0 ? reqNo : null; } catch (Exception e) { System.err.println("Error saving user request: " + e.getMessage()); e.printStackTrace(); return null; } }
public List<Map<String, Object>> getPendingRequests() { String sql = "SELECT r.id, r.req_no, r.dept_id, r.pid, r.tid, r.qty_requested, r.qty_delivered, " + "p.printer_name, t.model_name " + "FROM department_requested_details r " + "LEFT JOIN printer_model_list p ON r.pid = p.id " + "LEFT JOIN toner_model_list t ON r.tid = t.id " + "WHERE r.is_active = 1 AND r.is_delete = 0 " + "AND (r.qty_delivered IS NULL OR CAST(r.qty_delivered AS SIGNED) < CAST(r.qty_requested AS SIGNED)) " + "ORDER BY r.id DESC"; try { return jdbcTemplate.queryForList(sql); } catch (Exception e) { System.err.println("Error fetching pending requests: " + e.getMessage()); return new ArrayList<>(); } }
public boolean saveOutwardRegister(int id, String qtyIssued, String finalDeliveredUpload, String username) { String sql = "UPDATE department_requested_details " + "SET qty_delivered = ?, final_delivered_upload = ?, updated_date = ?, updated_by = ? " + "WHERE id = ?"; java.sql.Timestamp now = new java.sql.Timestamp(System.currentTimeMillis()); try { int rows = jdbcTemplate.update(sql, qtyIssued, finalDeliveredUpload, now, username, id); return rows > 0; } catch (Exception e) { System.err.println("Error updating outward register: " + e.getMessage()); e.printStackTrace(); return false; } }
public Map<String, Object> getDashboardMetrics() { Map<String, Object> metrics = new HashMap<>();
String sqlRaised = "SELECT COALESCE(SUM(CAST(qty_requested AS SIGNED)), 0) FROM department_requested_details WHERE is_active = 1 AND is_delete = 0"; String sqlDistributed = "SELECT COALESCE(SUM(CAST(qty_delivered AS SIGNED)), 0) FROM department_requested_details WHERE is_active = 1 AND is_delete = 0"; String sqlInward = "SELECT COALESCE(SUM(CAST(qty_registered AS SIGNED)), 0) FROM stock_register_details WHERE is_active = 1 AND is_delete = 0";
try { int totalRaised = jdbcTemplate.queryForObject(sqlRaised, Integer.class); int totalDistributed = jdbcTemplate.queryForObject(sqlDistributed, Integer.class); int inwardStock = jdbcTemplate.queryForObject(sqlInward, Integer.class); int availableStock = inwardStock - totalDistributed;
metrics.put("totalRaised", totalRaised); metrics.put("totalDistributed", totalDistributed); metrics.put("availableStock", availableStock); } catch (Exception e) { System.err.println("Error computing dashboard metrics: " + e.getMessage()); metrics.put("totalRaised", 0); metrics.put("totalDistributed", 0); metrics.put("availableStock", 0); } return metrics; }
public List<Map<String, Object>> getInventorySummary() { String safeSql = "SELECT p.printer_name, t.model_name, " + "COALESCE((SELECT SUM(CAST(sr.qty_registered AS SIGNED)) FROM stock_register_details sr WHERE CAST(sr.pid AS SIGNED) = t.pid AND CAST(sr.tid AS SIGNED) = t.id AND sr.is_active = 1 AND sr.is_delete = 0), 0) AS inward_qty, " + "COALESCE((SELECT SUM(CAST(dr.qty_delivered AS SIGNED)) FROM department_requested_details dr WHERE CAST(dr.pid AS SIGNED) = t.pid AND CAST(dr.tid AS SIGNED) = t.id AND dr.is_active = 1 AND dr.is_delete = 0), 0) AS outward_qty " + "FROM toner_model_list t " + "JOIN printer_model_list p ON t.pid = p.id " + "WHERE t.is_active = 1 AND t.is_delete = 0 " + "ORDER BY p.printer_name, t.model_name"; try { List<Map<String, Object>> list = jdbcTemplate.queryForList(safeSql); for (Map<String, Object> map : list) { Number inward = (Number) map.get("inward_qty"); Number outward = (Number) map.get("outward_qty"); long avail = (inward != null ? inward.longValue() : 0) - (outward != null ? outward.longValue() : 0); map.put("available_qty", avail); } return list; } catch (Exception e) { System.err.println("Error fetching inventory summary: " + e.getMessage()); e.printStackTrace(); return new ArrayList<>(); } }
public List<Map<String, Object>> getOutwardHistory() { String sql = "SELECT r.id, r.req_no, r.itcell_ref_no, r.dept_id, r.qty_requested, r.qty_delivered, r.final_delivered_upload, r.updated_date, " + "p.printer_name, t.model_name " + "FROM department_requested_details r " + "LEFT JOIN printer_model_list p ON r.pid = p.id " + "LEFT JOIN toner_model_list t ON r.tid = t.id " + "WHERE r.is_active = 1 AND r.is_delete = 0 " + "AND r.qty_delivered IS NOT NULL AND CAST(r.qty_delivered AS SIGNED) > 0 " + "ORDER BY r.updated_date DESC"; try { return jdbcTemplate.queryForList(sql); } catch (Exception e) { System.err.println("Error fetching outward history: " + e.getMessage()); return new ArrayList<>(); } }}
|