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.
243 lines
12 KiB
243 lines
12 KiB
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;
|
|
|
|
@Service
|
|
public 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<>();
|
|
}
|
|
}
|
|
}
|