diff --git a/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java index fc4ff9a..499253b 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/FinishedItemDAO.java @@ -34,7 +34,7 @@ public class FinishedItemDAO { private final String SELECT_BY_STITCHED_ITEM_IDS = String.format("SELECT * FROM %s WHERE stitched_item_id IN (:stitched_item_ids)", TABLE_NAME); private final String COUNT_TOTAL_FINISH_ITEM = String.format("SELECT COUNT(*) FROM %s WHERE job_card_id = :job_card_id AND is_segregated IS TRUE ", TABLE_NAME); private final String SELECT_BY_JOB_CARD_AND_DATE = String.format("SELECT * FROM %s WHERE job_card_id = :job_card_id AND (:start_date IS NULL OR :end_date IS NULL OR created_at BETWEEN :start_date AND :end_date)", TABLE_NAME); - private final String SELECT_BY_DATE_QA_STATUS = String.format( "SELECT COUNT(*) FROM %s WHERE (:start_date IS NULL OR operation_date >= :start_date) AND operation_date <= :end_date AND qa_status = :qa_status AND id in (:ids) AND is_packed = FALSE", TABLE_NAME ); + private final String SELECT_BY_DATE_QA_STATUS = String.format( "SELECT COUNT(*) FROM %s WHERE (:start_date IS NULL OR operation_date >= :start_date) AND operation_date <= :end_date AND qa_status = :qa_status AND id in (:ids) AND is_packed = FALSE AND is_qa = TRUE", TABLE_NAME ); public FinishedItemDAO(NamedParameterJdbcTemplate namedParameterJdbcTemplate) { this.namedParameterJdbcTemplate = namedParameterJdbcTemplate; diff --git a/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java b/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java index 839781d..e95e769 100644 --- a/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java +++ b/src/main/java/com/utopiaindustries/dao/ctp/InventoryTransactionLegDAO.java @@ -49,7 +49,8 @@ public class InventoryTransactionLegDAO { private final String SELECT_FIRST_TRANSACTION_PARENT_TYPE_PARENT_ID = String.format("SELECT * FROM %s WHERE parent_document_id IN (:parent_document_id) AND parent_document_type = :parent_document_type ORDER BY transaction_leg_datetime ASC LIMIT 1", TABLE_NAME); private final String SELECT_GROUP_By_TRANSACTION_PARENT_TYPE_PARENT_ID = String.format("SELECT * FROM %s WHERE parent_document_id IN (:parent_document_id) AND parent_document_type = :parent_document_type GROUP BY account_id", TABLE_NAME); private final String SELECT_TRANSACTIONS_REMAINING = String.format("SELECT parent_document_id as parentIds FROM %s WHERE account_id = :account_id AND parent_document_type = :parent_document_type AND type = 'IN' AND parent_document_id NOT IN (SELECT parent_document_id FROM %s WHERE account_id = :account_id AND parent_document_type = :parent_document_type AND type = 'OUT')", TABLE_NAME, TABLE_NAME); - private final String SELECT_PARENT_ID_BY_TYPE_GROUP = String.format("SELECT parent_document_id as parentIds FROM %s WHERE account_id = :account_id AND parent_document_type = :parent_document_type AND type = 'IN' GROUP BY parent_document_id", TABLE_NAME); + private final String SELECT_IN_PARENT_ID_BY_TYPE_GROUP = String.format("SELECT parent_document_id as parentIds FROM %s WHERE account_id = :account_id AND parent_document_type = :parent_document_type AND type = 'IN' GROUP BY parent_document_id", TABLE_NAME); + private final String SELECT_OUT_PARENT_ID_BY_TYPE_GROUP = String.format("SELECT parent_document_id as parentIds FROM %s WHERE account_id = :account_id AND parent_document_type = :parent_document_type AND type = 'OUT' GROUP BY parent_document_id", TABLE_NAME); private final String SELECT_JOB_CARD_DATES = String.format("SELECT * FROM %s WHERE job_card_id = :job_card_id AND (:start_date IS NULL OR :end_date IS NULL OR transaction_leg_datetime BETWEEN :start_date AND :end_date) AND type = :type ", TABLE_NAME); private final String SELECT_JOB_CARD_And_Date_Type_Account_Id = String.format("SELECT * FROM %s WHERE job_card_id = :job_card_id AND (:start_date IS NULL OR :end_date IS NULL OR transaction_leg_datetime BETWEEN :start_date AND :end_date) AND type = :type AND account_id IN (:account_ids)", TABLE_NAME); @@ -228,10 +229,16 @@ public class InventoryTransactionLegDAO { return namedParameterJdbcTemplate.queryForList( SELECT_TRANSACTIONS_REMAINING , params, Long.class ); } - public List getInParentIdIdByDate(String parentType, Integer accountId){ + public List getInParentIdByDate(String parentType, Integer accountId){ MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue("account_id", accountId ); params.addValue("parent_document_type", parentType ); - return namedParameterJdbcTemplate.queryForList( SELECT_PARENT_ID_BY_TYPE_GROUP , params, Long.class ); + return namedParameterJdbcTemplate.queryForList( SELECT_IN_PARENT_ID_BY_TYPE_GROUP , params, Long.class ); + } + public List getOutParentIdByDate(String parentType, Integer accountId){ + MapSqlParameterSource params = new MapSqlParameterSource(); + params.addValue("account_id", accountId ); + params.addValue("parent_document_type", parentType ); + return namedParameterJdbcTemplate.queryForList( SELECT_OUT_PARENT_ID_BY_TYPE_GROUP , params, Long.class ); } } \ No newline at end of file diff --git a/src/main/java/com/utopiaindustries/service/DashboardService.java b/src/main/java/com/utopiaindustries/service/DashboardService.java index b2da69c..700dbfc 100644 --- a/src/main/java/com/utopiaindustries/service/DashboardService.java +++ b/src/main/java/com/utopiaindustries/service/DashboardService.java @@ -35,6 +35,7 @@ public class DashboardService { public Map getPhasesProgressDayWise(String lineNo) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + HashMap progress = new HashMap<>(); String cuttingAccount = "CUTTING ACCOUNT " + lineNo; String stitchingAccount = "STITCHING ACCOUNT " + lineNo; @@ -42,20 +43,13 @@ public class DashboardService { String packagingAccount = "A GRADE ACCOUNT " + lineNo; LocalDateTime today = LocalDateTime.now().withHour(0).withMinute(0).withSecond(1); - String startDate1 = today.format(formatter); String endDate1 = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).format(formatter); - String startDateWithHour = LocalDateTime.now().minusHours(1).format(formatter); - String endDateWithHour = LocalDateTime.now().format(formatter); - - - HashMap progress = new HashMap<>(); + //set inventory accounts List inventoryAccounts = inventoryAccountDAO.findAll(); - InventoryAccount inventoryAccount = inventoryAccounts.stream() .filter(e -> cuttingAccount.equals(e.getTitle())).findFirst().orElse(new InventoryAccount()); - Map inventoryAccountMap = inventoryAccounts.stream() .filter(e -> cuttingAccount.equals(e.getTitle()) || stitchingAccount.equals(e.getTitle()) || @@ -63,49 +57,59 @@ public class DashboardService { packagingAccount.equals(e.getTitle())) .collect(Collectors.toMap(InventoryAccount::getTitle, e -> (int) e.getId())); - + //get all in remaining transaction stitching List stitchingItemIds = inventoryTransactionLegDAO.findRemainingByParentTypeAndAccountID("STITCHING_OFFLINE", inventoryAccountMap.get(stitchingAccount)); - List finishing = inventoryTransactionLegDAO.getInParentIdIdByDate("FINISHED_ITEM", inventoryAccountMap.get(finishingAccount)); + //get all out transaction stitching + List stitchingOutIds = inventoryTransactionLegDAO.getOutParentIdByDate("STITCHING_OFFLINE", inventoryAccountMap.get(stitchingAccount)); + + //get all in transaction finished + List finishing = inventoryTransactionLegDAO.getInParentIdByDate("FINISHED_ITEM", inventoryAccountMap.get(finishingAccount)); + + //get all in remaining transaction packaging List packagingItemIDs = inventoryTransactionLegDAO.findRemainingByParentTypeAndAccountID("PACKAGING", inventoryAccountMap.get(packagingAccount)); + //set stitching related details Long approvedStitchingOfflineItems = 0L; + Long approvedStitchingOfflineItemsThenReject = 0L; long qcReject = 0L; if (stitchingItemIds != null && !stitchingItemIds.isEmpty()) { approvedStitchingOfflineItems = stitchingOfflineItemDAO.findByQCOperationDateAndApproved(startDate1, endDate1, "APPROVED"); - qcReject = stitchingOfflineItemDAO.findByQCOperationDateAndIds(null, endDate1, "REJECT", stitchingItemIds); + qcReject = stitchingOfflineItemDAO.findByQCOperationDateAndIds(startDate1, endDate1, "REJECT", stitchingItemIds); + approvedStitchingOfflineItemsThenReject = stitchingOfflineItemDAO.findByQCOperationDateAndIds(startDate1, endDate1, "REJECT",stitchingOutIds); + } + //set finishing related details Long alterationPieceFinish = 0L; Long rejectFinishedItem = 0L; Long washFinishedItem = 0L; Long approved = 0L; Long operationNotPerformed = 0L; - if (finishing != null && !finishing.isEmpty()) { approved = finishedItemDAO.findByOperationDateAndIdsAndQaStatus(startDate1, endDate1, "APPROVED", finishing); - operationNotPerformed = finishedItemDAO.findByOperationDateAndIdsAndQaStatus(null, endDate1, "-", finishing); - rejectFinishedItem = finishedItemDAO.findByOperationDateAndIdsAndQaStatus(null, endDate1, "REJECT", finishing); + operationNotPerformed = finishedItemDAO.findByOperationDateAndIdsAndQaStatus(startDate1, endDate1, "-", finishing); + rejectFinishedItem = finishedItemDAO.findByOperationDateAndIdsAndQaStatus(startDate1, endDate1, "REJECT", finishing); washFinishedItem = finishedItemDAO.findByOperationDateAndIdsAndQaStatus(startDate1, endDate1, "WASHED", finishing); - alterationPieceFinish = finishedItemDAO.findByOperationDateAndIdsAndQaStatus(null, endDate1, "ALTER", finishing); + alterationPieceFinish = finishedItemDAO.findByOperationDateAndIdsAndQaStatus(startDate1, endDate1, "ALTER", finishing); } - + //set packaging details Long packagingItems = 0L; if (packagingItemIDs != null && !packagingItemIDs.isEmpty()) { packagingItems = packagingItemsDAO.findByDateAndIds(startDate1, endDate1, packagingItemIDs); } + //set shift wise details and time LocalDateTime statTime = LocalDateTime.now().withHour(9).withMinute(0).withSecond(0).withNano(0); LocalDateTime endTime = statTime.plusMinutes(inventoryAccount.getShiftMinutes()); - long minutesPassed = 0; - if (statTime.isBefore(LocalDateTime.now()) && LocalDateTime.now().isBefore(endTime)) { minutesPassed = Duration.between(statTime, LocalDateTime.now()).toMinutes(); } + //set efficiency long shiftTargetMinutesWise = getTargetShiftWiseOrHourlyWise(Math.max(0, minutesPassed), inventoryAccount); float efficiency; if (shiftTargetMinutesWise == 0) { @@ -113,9 +117,10 @@ public class DashboardService { } else { efficiency = (float) approvedStitchingOfflineItems / shiftTargetMinutesWise; } - progress.put("Stitching", (float) approvedStitchingOfflineItems + qcReject); + + progress.put("Stitching", (float) approvedStitchingOfflineItems + qcReject + approvedStitchingOfflineItemsThenReject); progress.put("totalWips", (float) stitchingItemIds.size() - qcReject); - progress.put("Alteration", (float) qcReject); + progress.put("Alteration", (float) qcReject + approvedStitchingOfflineItemsThenReject); progress.put("finishing", (float) approved + operationNotPerformed); progress.put("ALTER", (float) alterationPieceFinish);