commit
49c50b94b2
84 changed files with 21292 additions and 0 deletions
-
33.gitignore
-
259mvnw
-
149mvnw.cmd
-
94pom.xml
-
13src/main/java/com/gcc/restapiservices/RestapiservicesApplication.java
-
885src/main/java/com/gcc/restapiservices/birthanddeath/controller/BirthApiController.java
-
121src/main/java/com/gcc/restapiservices/birthanddeath/controller/ChildNameInclusionController.java
-
440src/main/java/com/gcc/restapiservices/birthanddeath/controller/DeathApiController.java
-
1095src/main/java/com/gcc/restapiservices/birthanddeath/service/BirthCertificateService.java
-
420src/main/java/com/gcc/restapiservices/birthanddeath/service/ChildNameInclusionService.java
-
789src/main/java/com/gcc/restapiservices/birthanddeath/service/DeathCertificateService.java
-
244src/main/java/com/gcc/restapiservices/cdwaste/controller/ApiController.java
-
157src/main/java/com/gcc/restapiservices/cdwaste/controller/DropDownApiController.java
-
70src/main/java/com/gcc/restapiservices/cdwaste/service/DropDownService.java
-
354src/main/java/com/gcc/restapiservices/cdwaste/service/RequestService.java
-
44src/main/java/com/gcc/restapiservices/cdwaste/util/ApiResponseUtil.java
-
35src/main/java/com/gcc/restapiservices/cdwaste/util/DateTimeUtil.java
-
96src/main/java/com/gcc/restapiservices/communityHall/configuration/PaymentConfig.java
-
95src/main/java/com/gcc/restapiservices/communityHall/controller/ReportController.java
-
992src/main/java/com/gcc/restapiservices/communityHall/controller/communityHallController.java
-
198src/main/java/com/gcc/restapiservices/communityHall/dto/PaymentWebhookPayload.java
-
83src/main/java/com/gcc/restapiservices/communityHall/dto/TransactionData.java
-
73src/main/java/com/gcc/restapiservices/communityHall/dto/TransactionRefundResponse.java
-
536src/main/java/com/gcc/restapiservices/communityHall/service/CHPaymentService.java
-
162src/main/java/com/gcc/restapiservices/communityHall/service/ReportService.java
-
41src/main/java/com/gcc/restapiservices/communityHall/service/WhatsappMsgServiceImpl.java
-
864src/main/java/com/gcc/restapiservices/communityHall/service/communityHallService.java
-
63src/main/java/com/gcc/restapiservices/communityHall/util/EncryptionUtils.java
-
37src/main/java/com/gcc/restapiservices/communityHall/util/TransactionNumberGenerator.java
-
64src/main/java/com/gcc/restapiservices/configuration/AppConfig.java
-
201src/main/java/com/gcc/restapiservices/configuration/DataSourceConfig.java
-
11src/main/java/com/gcc/restapiservices/coworkspace/constants/AppConstants.java
-
49src/main/java/com/gcc/restapiservices/coworkspace/controller/ApiResponse.java
-
389src/main/java/com/gcc/restapiservices/coworkspace/controller/CoworkspaceApiController.java
-
44src/main/java/com/gcc/restapiservices/coworkspace/exception/GlobalExceptionHandler.java
-
7src/main/java/com/gcc/restapiservices/coworkspace/exception/NoSlotAvailable.java
-
38src/main/java/com/gcc/restapiservices/coworkspace/service/AmountConfigService.java
-
33src/main/java/com/gcc/restapiservices/coworkspace/service/CalendarService.java
-
1447src/main/java/com/gcc/restapiservices/coworkspace/service/CoworkspaceApiService.java
-
193src/main/java/com/gcc/restapiservices/coworkspace/service/PaymentService.java
-
69src/main/java/com/gcc/restapiservices/coworkspace/service/SMSService.java
-
102src/main/java/com/gcc/restapiservices/coworkspace/service/WhatsAppService.java
-
264src/main/java/com/gcc/restapiservices/crslogs/controller/CrsLogsApiController.java
-
80src/main/java/com/gcc/restapiservices/crslogs/service/CrsLogsService.java
-
127src/main/java/com/gcc/restapiservices/feedback/controller/FeedbackController.java
-
125src/main/java/com/gcc/restapiservices/feedback/service/FeedbackService.java
-
108src/main/java/com/gcc/restapiservices/nearbyservices/controller/LocationController.java
-
94src/main/java/com/gcc/restapiservices/nearbyservices/controller/NearByController.java
-
633src/main/java/com/gcc/restapiservices/nearbyservices/service/NearByService.java
-
11src/main/java/com/gcc/restapiservices/petregistration/constants/AppConstants.java
-
76src/main/java/com/gcc/restapiservices/petregistration/controller/PetController.java
-
757src/main/java/com/gcc/restapiservices/petregistration/controller/PetRegistrationApiController.java
-
32src/main/java/com/gcc/restapiservices/petregistration/controller/SMSController.java
-
949src/main/java/com/gcc/restapiservices/petregistration/service/PetRegistrationApiService.java
-
603src/main/java/com/gcc/restapiservices/petregistration/service/PetSMSService.java
-
46src/main/java/com/gcc/restapiservices/petregistration/util/ApiResponseUtil.java
-
35src/main/java/com/gcc/restapiservices/petregistration/util/DateTimeUtil.java
-
324src/main/java/com/gcc/restapiservices/propertytax/controller/PropertyTaxOtpController.java
-
313src/main/java/com/gcc/restapiservices/propertytax/service/PropertyTaxOtpService.java
-
126src/main/java/com/gcc/restapiservices/servicesPdf/controller/ServicePdfController.java
-
47src/main/java/com/gcc/restapiservices/servicesPdf/service/ServicePdfService.java
-
59src/main/java/com/gcc/restapiservices/swimmingpool/constants/AppConfig.java
-
14src/main/java/com/gcc/restapiservices/swimmingpool/constants/AppConstants.java
-
380src/main/java/com/gcc/restapiservices/swimmingpool/controller/PoolApiController.java
-
485src/main/java/com/gcc/restapiservices/swimmingpool/controller/SwimmingPoolApiController.java
-
525src/main/java/com/gcc/restapiservices/swimmingpool/service/PoolService.java
-
778src/main/java/com/gcc/restapiservices/swimmingpool/service/SwimmingPoolService.java
-
49src/main/java/com/gcc/restapiservices/swimmingpool/util/ApiResponse.java
-
42src/main/java/com/gcc/restapiservices/townplanning/controller/BuildingApprovalApiController.java
-
53src/main/java/com/gcc/restapiservices/townplanning/service/BuildingApprovalService.java
-
96src/main/java/com/gcc/restapiservices/victoriaHallBooking/configuration/VPHPaymentConfig.java
-
992src/main/java/com/gcc/restapiservices/victoriaHallBooking/controller/VPHHallController.java
-
198src/main/java/com/gcc/restapiservices/victoriaHallBooking/dto/PaymentWebhookPayload.java
-
83src/main/java/com/gcc/restapiservices/victoriaHallBooking/dto/TransactionData.java
-
73src/main/java/com/gcc/restapiservices/victoriaHallBooking/dto/TransactionRefundResponse.java
-
536src/main/java/com/gcc/restapiservices/victoriaHallBooking/service/VPHPaymentService.java
-
41src/main/java/com/gcc/restapiservices/victoriaHallBooking/service/WhatsappMsgService.java
-
849src/main/java/com/gcc/restapiservices/victoriaHallBooking/service/victoriaHallService.java
-
63src/main/java/com/gcc/restapiservices/victoriaHallBooking/util/VPHEncryptionUtils.java
-
37src/main/java/com/gcc/restapiservices/victoriaHallBooking/util/VPHTransactionNumberGenerator.java
-
36src/main/resources/application-dev.properties
-
46src/main/resources/application-prod.properties
-
3src/main/resources/application.properties
-
15src/main/resources/paymentConfig.properties
@ -0,0 +1,33 @@ |
|||
HELP.md |
|||
target/ |
|||
.mvn/wrapper/maven-wrapper.jar |
|||
!**/src/main/**/target/ |
|||
!**/src/test/**/target/ |
|||
|
|||
### STS ### |
|||
.apt_generated |
|||
.classpath |
|||
.factorypath |
|||
.project |
|||
.settings |
|||
.springBeans |
|||
.sts4-cache |
|||
|
|||
### IntelliJ IDEA ### |
|||
.idea |
|||
*.iws |
|||
*.iml |
|||
*.ipr |
|||
|
|||
### NetBeans ### |
|||
/nbproject/private/ |
|||
/nbbuild/ |
|||
/dist/ |
|||
/nbdist/ |
|||
/.nb-gradle/ |
|||
build/ |
|||
!**/src/main/**/build/ |
|||
!**/src/test/**/build/ |
|||
|
|||
### VS Code ### |
|||
.vscode/ |
|||
@ -0,0 +1,259 @@ |
|||
#!/bin/sh |
|||
# ---------------------------------------------------------------------------- |
|||
# Licensed to the Apache Software Foundation (ASF) under one |
|||
# or more contributor license agreements. See the NOTICE file |
|||
# distributed with this work for additional information |
|||
# regarding copyright ownership. The ASF licenses this file |
|||
# to you under the Apache License, Version 2.0 (the |
|||
# "License"); you may not use this file except in compliance |
|||
# with the License. You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, |
|||
# software distributed under the License is distributed on an |
|||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
|||
# KIND, either express or implied. See the License for the |
|||
# specific language governing permissions and limitations |
|||
# under the License. |
|||
# ---------------------------------------------------------------------------- |
|||
|
|||
# ---------------------------------------------------------------------------- |
|||
# Apache Maven Wrapper startup batch script, version 3.3.2 |
|||
# |
|||
# Optional ENV vars |
|||
# ----------------- |
|||
# JAVA_HOME - location of a JDK home dir, required when download maven via java source |
|||
# MVNW_REPOURL - repo url base for downloading maven distribution |
|||
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven |
|||
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output |
|||
# ---------------------------------------------------------------------------- |
|||
|
|||
set -euf |
|||
[ "${MVNW_VERBOSE-}" != debug ] || set -x |
|||
|
|||
# OS specific support. |
|||
native_path() { printf %s\\n "$1"; } |
|||
case "$(uname)" in |
|||
CYGWIN* | MINGW*) |
|||
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" |
|||
native_path() { cygpath --path --windows "$1"; } |
|||
;; |
|||
esac |
|||
|
|||
# set JAVACMD and JAVACCMD |
|||
set_java_home() { |
|||
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched |
|||
if [ -n "${JAVA_HOME-}" ]; then |
|||
if [ -x "$JAVA_HOME/jre/sh/java" ]; then |
|||
# IBM's JDK on AIX uses strange locations for the executables |
|||
JAVACMD="$JAVA_HOME/jre/sh/java" |
|||
JAVACCMD="$JAVA_HOME/jre/sh/javac" |
|||
else |
|||
JAVACMD="$JAVA_HOME/bin/java" |
|||
JAVACCMD="$JAVA_HOME/bin/javac" |
|||
|
|||
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then |
|||
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 |
|||
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 |
|||
return 1 |
|||
fi |
|||
fi |
|||
else |
|||
JAVACMD="$( |
|||
'set' +e |
|||
'unset' -f command 2>/dev/null |
|||
'command' -v java |
|||
)" || : |
|||
JAVACCMD="$( |
|||
'set' +e |
|||
'unset' -f command 2>/dev/null |
|||
'command' -v javac |
|||
)" || : |
|||
|
|||
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then |
|||
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 |
|||
return 1 |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# hash string like Java String::hashCode |
|||
hash_string() { |
|||
str="${1:-}" h=0 |
|||
while [ -n "$str" ]; do |
|||
char="${str%"${str#?}"}" |
|||
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) |
|||
str="${str#?}" |
|||
done |
|||
printf %x\\n $h |
|||
} |
|||
|
|||
verbose() { :; } |
|||
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } |
|||
|
|||
die() { |
|||
printf %s\\n "$1" >&2 |
|||
exit 1 |
|||
} |
|||
|
|||
trim() { |
|||
# MWRAPPER-139: |
|||
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. |
|||
# Needed for removing poorly interpreted newline sequences when running in more |
|||
# exotic environments such as mingw bash on Windows. |
|||
printf "%s" "${1}" | tr -d '[:space:]' |
|||
} |
|||
|
|||
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties |
|||
while IFS="=" read -r key value; do |
|||
case "${key-}" in |
|||
distributionUrl) distributionUrl=$(trim "${value-}") ;; |
|||
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; |
|||
esac |
|||
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" |
|||
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" |
|||
|
|||
case "${distributionUrl##*/}" in |
|||
maven-mvnd-*bin.*) |
|||
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ |
|||
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in |
|||
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; |
|||
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;; |
|||
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;; |
|||
:Linux*x86_64*) distributionPlatform=linux-amd64 ;; |
|||
*) |
|||
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 |
|||
distributionPlatform=linux-amd64 |
|||
;; |
|||
esac |
|||
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" |
|||
;; |
|||
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; |
|||
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; |
|||
esac |
|||
|
|||
# apply MVNW_REPOURL and calculate MAVEN_HOME |
|||
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash> |
|||
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" |
|||
distributionUrlName="${distributionUrl##*/}" |
|||
distributionUrlNameMain="${distributionUrlName%.*}" |
|||
distributionUrlNameMain="${distributionUrlNameMain%-bin}" |
|||
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" |
|||
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" |
|||
|
|||
exec_maven() { |
|||
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : |
|||
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" |
|||
} |
|||
|
|||
if [ -d "$MAVEN_HOME" ]; then |
|||
verbose "found existing MAVEN_HOME at $MAVEN_HOME" |
|||
exec_maven "$@" |
|||
fi |
|||
|
|||
case "${distributionUrl-}" in |
|||
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; |
|||
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; |
|||
esac |
|||
|
|||
# prepare tmp dir |
|||
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then |
|||
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } |
|||
trap clean HUP INT TERM EXIT |
|||
else |
|||
die "cannot create temp dir" |
|||
fi |
|||
|
|||
mkdir -p -- "${MAVEN_HOME%/*}" |
|||
|
|||
# Download and Install Apache Maven |
|||
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." |
|||
verbose "Downloading from: $distributionUrl" |
|||
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" |
|||
|
|||
# select .zip or .tar.gz |
|||
if ! command -v unzip >/dev/null; then |
|||
distributionUrl="${distributionUrl%.zip}.tar.gz" |
|||
distributionUrlName="${distributionUrl##*/}" |
|||
fi |
|||
|
|||
# verbose opt |
|||
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' |
|||
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v |
|||
|
|||
# normalize http auth |
|||
case "${MVNW_PASSWORD:+has-password}" in |
|||
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; |
|||
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; |
|||
esac |
|||
|
|||
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then |
|||
verbose "Found wget ... using wget" |
|||
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" |
|||
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then |
|||
verbose "Found curl ... using curl" |
|||
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" |
|||
elif set_java_home; then |
|||
verbose "Falling back to use Java to download" |
|||
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" |
|||
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" |
|||
cat >"$javaSource" <<-END |
|||
public class Downloader extends java.net.Authenticator |
|||
{ |
|||
protected java.net.PasswordAuthentication getPasswordAuthentication() |
|||
{ |
|||
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); |
|||
} |
|||
public static void main( String[] args ) throws Exception |
|||
{ |
|||
setDefault( new Downloader() ); |
|||
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); |
|||
} |
|||
} |
|||
END |
|||
# For Cygwin/MinGW, switch paths to Windows format before running javac and java |
|||
verbose " - Compiling Downloader.java ..." |
|||
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" |
|||
verbose " - Running Downloader.java ..." |
|||
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" |
|||
fi |
|||
|
|||
# If specified, validate the SHA-256 sum of the Maven distribution zip file |
|||
if [ -n "${distributionSha256Sum-}" ]; then |
|||
distributionSha256Result=false |
|||
if [ "$MVN_CMD" = mvnd.sh ]; then |
|||
echo "Checksum validation is not supported for maven-mvnd." >&2 |
|||
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 |
|||
exit 1 |
|||
elif command -v sha256sum >/dev/null; then |
|||
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then |
|||
distributionSha256Result=true |
|||
fi |
|||
elif command -v shasum >/dev/null; then |
|||
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then |
|||
distributionSha256Result=true |
|||
fi |
|||
else |
|||
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 |
|||
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 |
|||
exit 1 |
|||
fi |
|||
if [ $distributionSha256Result = false ]; then |
|||
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 |
|||
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 |
|||
exit 1 |
|||
fi |
|||
fi |
|||
|
|||
# unzip and move |
|||
if command -v unzip >/dev/null; then |
|||
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" |
|||
else |
|||
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" |
|||
fi |
|||
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" |
|||
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" |
|||
|
|||
clean || : |
|||
exec_maven "$@" |
|||
@ -0,0 +1,149 @@ |
|||
<# : batch portion |
|||
@REM ---------------------------------------------------------------------------- |
|||
@REM Licensed to the Apache Software Foundation (ASF) under one |
|||
@REM or more contributor license agreements. See the NOTICE file |
|||
@REM distributed with this work for additional information |
|||
@REM regarding copyright ownership. The ASF licenses this file |
|||
@REM to you under the Apache License, Version 2.0 (the |
|||
@REM "License"); you may not use this file except in compliance |
|||
@REM with the License. You may obtain a copy of the License at |
|||
@REM |
|||
@REM http://www.apache.org/licenses/LICENSE-2.0 |
|||
@REM |
|||
@REM Unless required by applicable law or agreed to in writing, |
|||
@REM software distributed under the License is distributed on an |
|||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
|||
@REM KIND, either express or implied. See the License for the |
|||
@REM specific language governing permissions and limitations |
|||
@REM under the License. |
|||
@REM ---------------------------------------------------------------------------- |
|||
|
|||
@REM ---------------------------------------------------------------------------- |
|||
@REM Apache Maven Wrapper startup batch script, version 3.3.2 |
|||
@REM |
|||
@REM Optional ENV vars |
|||
@REM MVNW_REPOURL - repo url base for downloading maven distribution |
|||
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven |
|||
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output |
|||
@REM ---------------------------------------------------------------------------- |
|||
|
|||
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) |
|||
@SET __MVNW_CMD__= |
|||
@SET __MVNW_ERROR__= |
|||
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% |
|||
@SET PSModulePath= |
|||
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( |
|||
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) |
|||
) |
|||
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% |
|||
@SET __MVNW_PSMODULEP_SAVE= |
|||
@SET __MVNW_ARG0_NAME__= |
|||
@SET MVNW_USERNAME= |
|||
@SET MVNW_PASSWORD= |
|||
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) |
|||
@echo Cannot start maven from wrapper >&2 && exit /b 1 |
|||
@GOTO :EOF |
|||
: end batch / begin powershell #> |
|||
|
|||
$ErrorActionPreference = "Stop" |
|||
if ($env:MVNW_VERBOSE -eq "true") { |
|||
$VerbosePreference = "Continue" |
|||
} |
|||
|
|||
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties |
|||
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl |
|||
if (!$distributionUrl) { |
|||
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" |
|||
} |
|||
|
|||
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { |
|||
"maven-mvnd-*" { |
|||
$USE_MVND = $true |
|||
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" |
|||
$MVN_CMD = "mvnd.cmd" |
|||
break |
|||
} |
|||
default { |
|||
$USE_MVND = $false |
|||
$MVN_CMD = $script -replace '^mvnw','mvn' |
|||
break |
|||
} |
|||
} |
|||
|
|||
# apply MVNW_REPOURL and calculate MAVEN_HOME |
|||
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash> |
|||
if ($env:MVNW_REPOURL) { |
|||
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } |
|||
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" |
|||
} |
|||
$distributionUrlName = $distributionUrl -replace '^.*/','' |
|||
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' |
|||
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" |
|||
if ($env:MAVEN_USER_HOME) { |
|||
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" |
|||
} |
|||
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' |
|||
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" |
|||
|
|||
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { |
|||
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" |
|||
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" |
|||
exit $? |
|||
} |
|||
|
|||
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { |
|||
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" |
|||
} |
|||
|
|||
# prepare tmp dir |
|||
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile |
|||
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" |
|||
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null |
|||
trap { |
|||
if ($TMP_DOWNLOAD_DIR.Exists) { |
|||
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } |
|||
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } |
|||
} |
|||
} |
|||
|
|||
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null |
|||
|
|||
# Download and Install Apache Maven |
|||
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." |
|||
Write-Verbose "Downloading from: $distributionUrl" |
|||
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" |
|||
|
|||
$webclient = New-Object System.Net.WebClient |
|||
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { |
|||
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) |
|||
} |
|||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 |
|||
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null |
|||
|
|||
# If specified, validate the SHA-256 sum of the Maven distribution zip file |
|||
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum |
|||
if ($distributionSha256Sum) { |
|||
if ($USE_MVND) { |
|||
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." |
|||
} |
|||
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash |
|||
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { |
|||
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." |
|||
} |
|||
} |
|||
|
|||
# unzip and move |
|||
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null |
|||
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null |
|||
try { |
|||
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null |
|||
} catch { |
|||
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { |
|||
Write-Error "fail to move MAVEN_HOME" |
|||
} |
|||
} finally { |
|||
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } |
|||
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } |
|||
} |
|||
|
|||
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" |
|||
@ -0,0 +1,94 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|||
<modelVersion>4.0.0</modelVersion> |
|||
<parent> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-parent</artifactId> |
|||
<version>3.3.4</version> |
|||
<relativePath /> <!-- lookup parent from repository --> |
|||
</parent> |
|||
<groupId>com.gcc</groupId> |
|||
<artifactId>restapiservices</artifactId> |
|||
<version></version> |
|||
<name>restapiservices</name> |
|||
<description>GCC restapiservices</description> |
|||
<url/> |
|||
<licenses> |
|||
<license/> |
|||
</licenses> |
|||
<developers> |
|||
<developer/> |
|||
</developers> |
|||
<scm> |
|||
<connection /> |
|||
<developerConnection /> |
|||
<tag /> |
|||
<url /> |
|||
</scm> |
|||
<properties> |
|||
<java.version>17</java.version> |
|||
</properties> |
|||
<dependencies> |
|||
|
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-data-jdbc</artifactId> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-web</artifactId> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-devtools</artifactId> |
|||
<scope>runtime</scope> |
|||
<optional>true</optional> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>com.mysql</groupId> |
|||
<artifactId>mysql-connector-j</artifactId> |
|||
<scope>runtime</scope> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>com.oracle.database.jdbc</groupId> |
|||
<artifactId>ojdbc8</artifactId> |
|||
<scope>runtime</scope> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-test</artifactId> |
|||
<scope>test</scope> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.apache.commons</groupId> |
|||
<artifactId>commons-lang3</artifactId> |
|||
<version>3.14.0</version> <!-- you can use the latest version --> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>com.razorpay</groupId> |
|||
<artifactId>razorpay-java</artifactId> |
|||
<version>1.4.3</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>com.google.code.gson</groupId> |
|||
<artifactId>gson</artifactId> |
|||
<version>2.10.1</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-thymeleaf</artifactId> |
|||
</dependency> |
|||
</dependencies> |
|||
|
|||
<build> |
|||
<plugins> |
|||
<plugin> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-maven-plugin</artifactId> |
|||
</plugin> |
|||
</plugins> |
|||
</build> |
|||
|
|||
</project> |
|||
@ -0,0 +1,13 @@ |
|||
package com.gcc.restapiservices; |
|||
|
|||
import org.springframework.boot.SpringApplication; |
|||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
|||
|
|||
@SpringBootApplication |
|||
public class RestapiservicesApplication { |
|||
|
|||
public static void main(String[] args) { |
|||
SpringApplication.run(RestapiservicesApplication.class, args); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,885 @@ |
|||
package com.gcc.restapiservices.birthanddeath.controller; |
|||
|
|||
import java.time.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.time.format.DateTimeParseException; |
|||
import java.util.ArrayList; |
|||
import java.util.Base64; |
|||
import java.util.HashMap; |
|||
import java.util.LinkedHashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Random; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import com.fasterxml.jackson.databind.JsonNode; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
// import com.gcc.restapiservices.birthanddeath.service.BirthCertificateService; |
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
|
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
|
|||
@RequestMapping("/gccrestservices/api/birth-certificate") |
|||
@RestController |
|||
public class BirthApiController { |
|||
|
|||
// @Autowired |
|||
// private BirthCertificateService birthCertificateService; |
|||
|
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
|
|||
// // old from local db |
|||
// @PostMapping("/by-registration") |
|||
// public ResponseEntity<?> getByRegistration(@RequestParam("registration_number") String regNo) { |
|||
// try { |
|||
|
|||
// // Validate presence |
|||
// if (regNo == null || regNo.trim().isEmpty()) { |
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", "Registration number is required"); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); |
|||
// } |
|||
|
|||
// String formattedRegNo = regNo.trim().toUpperCase(); |
|||
|
|||
// // Map<String, Object> result = |
|||
// // birthCertificateService.getByRegistrationNumber(regNo); |
|||
// Map<String, Object> result = birthCertificateService.getBirthByRegistrationNumber(formattedRegNo); |
|||
|
|||
|
|||
|
|||
// if (result.containsKey("certificate_details")) { |
|||
// // Check for empty pdf_url and set message if needed |
|||
// Object pdfUrl = result.get("pdf_url"); |
|||
// if (pdfUrl == null || pdfUrl.toString().isEmpty()) { |
|||
// result.put("message", "Awaiting for eSign"); |
|||
// } else { |
|||
// result.put("message", "Record fetched successfully"); |
|||
// } |
|||
// result.put("status", "success"); |
|||
// result.put("status_code", 200); |
|||
// return ResponseEntity.ok(result); |
|||
// } else { |
|||
// return ResponseEntity.ok(result); |
|||
// } |
|||
|
|||
|
|||
// } catch (EmptyResultDataAccessException ex) { |
|||
// Map<String, Object> response = new LinkedHashMap<>(); |
|||
// response.put("status", "not_found"); |
|||
// response.put("message", |
|||
// "no data found for given registration number.Please ensure registration number is exactly as on the certificate."); |
|||
// response.put("status_code", 404); |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); |
|||
|
|||
// } catch (Exception ex) { |
|||
// ex.printStackTrace(); |
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
// error.put("status", "error"); |
|||
// error.put("message", "An unexpected error occurred " + ex); |
|||
// error.put("status_code", 500); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
|||
// } |
|||
// } |
|||
|
|||
// @PostMapping("/by-mobile") |
|||
// public ResponseEntity<?> getByMobile(@RequestParam(value = "mobile_number") String mobile) { |
|||
// try { |
|||
// // Validate presence |
|||
// if (mobile == null || mobile.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_request", "message", |
|||
// "Mobile number is required", "status_code", 400)); |
|||
// } |
|||
|
|||
// mobile = mobile.trim(); |
|||
|
|||
// // Validate format: 10 digits |
|||
// if (!mobile.matches("^\\d{10}$")) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_format", "message", |
|||
// "Invalid mobile number format. Expected: 10-digit number", "status_code", 400)); |
|||
// } |
|||
|
|||
// // List<Map<String, Object>> results = |
|||
// // birthCertificateService.getByMobile(mobile); |
|||
|
|||
// List<Map<String, Object>> results = birthCertificateService.getBirthByMobile(mobile); |
|||
|
|||
// //System.out.println("results mobile " + results); |
|||
|
|||
// if (results.isEmpty()) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of("status", "not_found", "message", |
|||
// "No records found for the given mobile number or some other district", "status_code", 404)); |
|||
// } |
|||
|
|||
// // Inject status and status_code into each record |
|||
// List<Map<String, Object>> finalResults = new ArrayList<>(); |
|||
// for (Map<String, Object> record : results) { |
|||
// if(record.get("pdf_url") == null || record.get("pdf_url").toString().isEmpty()) { |
|||
// record.put("message", "Awaiting for eSign"); |
|||
// } else { |
|||
// record.put("message", "Record fetched successfully"); |
|||
// } |
|||
// record.put("status", "success"); |
|||
// record.put("status_code", 200); |
|||
// finalResults.add(record); |
|||
// } |
|||
|
|||
// return ResponseEntity.ok(finalResults); |
|||
|
|||
// } catch (Exception ex) { |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("status", "error", "message", |
|||
// "An unexpected error occurred: " + ex.getMessage(), "status_code", 500)); |
|||
// } |
|||
// } |
|||
|
|||
// @PostMapping("/by-details") |
|||
// public ResponseEntity<?> getBirthDetailsMysql(@RequestParam(name = "incident_date") String dob, |
|||
// @RequestParam(name = "gender") String gender, @RequestParam(name = "father_name") String fatherName, |
|||
// @RequestParam(name = "mother_name") String motherName, |
|||
// @RequestParam(required = false, name = "child_name") String childName) { |
|||
|
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
|
|||
// // Validate |
|||
// List<String> missing = new ArrayList<>(); |
|||
// if (dob == null || dob.trim().isEmpty()) |
|||
// missing.add("birth_date"); |
|||
// if (fatherName == null || fatherName.trim().isEmpty()) |
|||
// missing.add("father_name"); |
|||
// if (motherName == null || motherName.trim().isEmpty()) |
|||
// missing.add("mother_name"); |
|||
// if (gender == null || gender.trim().isEmpty()) |
|||
// missing.add("gender"); |
|||
|
|||
// if (!missing.isEmpty()) { |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", "Missing required fields: " + String.join(", ", missing)); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// String formattedDob; |
|||
|
|||
// // ✅ Format gender like "Male"/"Female" to "M"/"F" |
|||
// String formattedGender = formatGender(gender); |
|||
|
|||
// try { |
|||
// DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
// DateTimeFormatter oracleFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
|
|||
// LocalDate incidentDate = LocalDate.parse(dob.trim(), inputFormat); |
|||
// LocalDate today = LocalDate.now(); |
|||
|
|||
// if (incidentDate.isAfter(today)) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "future_date_not_allowed", "message", |
|||
// "incident_date cannot be a future date", "status_code", 400)); |
|||
// } |
|||
|
|||
// formattedDob = LocalDate.parse(dob.trim(), inputFormat).format(oracleFormat); |
|||
// } catch (DateTimeParseException e) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_format", "message", |
|||
// "incident_date must be in yyyy-MM-dd format", "status_code", 400)); |
|||
// } |
|||
|
|||
// try { |
|||
// // System.out.println("DOB : " + formattedDob); |
|||
// // System.out.println("Father : " + fatherName); |
|||
// // System.out.println("Mother : " + motherName); |
|||
// // System.out.println("Gender : " + formattedGender); |
|||
// // System.out.println("Child : " + (childName != null ? childName : "[EMPTY]")); |
|||
|
|||
// Map<String, Object> result = birthCertificateService.getByDetailsOracleOldAndNew(formattedDob, fatherName, |
|||
// motherName, childName, formattedGender); |
|||
|
|||
// if (result == null || result.isEmpty() || "not_found".equals(result.get("status"))) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of("status", "not_found", "message", |
|||
// "No matching birth certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// "status_code", 404)); |
|||
// } |
|||
|
|||
// result.put("status_code", 200); |
|||
// result.put("message", "Record fetched successfully"); |
|||
// return ResponseEntity.ok(result); |
|||
|
|||
// } catch (Exception ex) { |
|||
// ex.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("status", "error", "message", |
|||
// "An unexpected error occurred: " + ex.getMessage(), "status_code", 500)); |
|||
// } |
|||
// } |
|||
|
|||
/* ///////////////// otp configuration ///////////////////// */ |
|||
|
|||
@GetMapping(value = "/sendOTP") |
|||
public String sendOtp(HttpServletRequest request, @RequestParam String mobile) { |
|||
|
|||
// Create an ObjectMapper instance |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
|
|||
Map<String, Object> response = new HashMap<>(); |
|||
|
|||
String MobileNo = mobile; |
|||
System.out.print("\n MobileNo---:" + mobile); |
|||
Random rand = new Random(); |
|||
int otp = rand.nextInt(90000) + 10000; |
|||
|
|||
System.out.print("\n otp---:" + otp); |
|||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy%20HH:mm"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
System.out.println(dtf.format(now)); |
|||
|
|||
String generatedToken = "Welcome to GCC! Your OTP for Birth and Death Certificate login is " + otp; |
|||
String key = "pfTEYN6H"; |
|||
String urlString = appConfig.getGetOtpUrl() + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + generatedToken + "&entityid=1401572690000011081&templateid=1407174687453240990"; |
|||
System.out.print("\n urlString---: " + urlString); |
|||
String bodyMessage = ""; |
|||
|
|||
if (mobile == null || mobile.trim().isEmpty()) { |
|||
throw new IllegalArgumentException("Mobile number is required"); |
|||
} |
|||
|
|||
// Validate mobile number is exactly 10 digits |
|||
if (!mobile.matches("\\d{10}")) { |
|||
throw new IllegalArgumentException("Mobile number must be exactly 10 digits"); |
|||
} |
|||
|
|||
try { |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String Response = restTemplate.getForObject(urlString, String.class); |
|||
|
|||
ObjectNode jsonResponse = (ObjectNode) objectMapper.readTree(Response); |
|||
|
|||
// Add mobileNo and otp to the response JSON |
|||
jsonResponse.put("MobileNo", MobileNo); |
|||
jsonResponse.put("otp", otp); |
|||
|
|||
bodyMessage = jsonResponse.toString(); |
|||
System.out.println("\n bodyMessage" + bodyMessage); |
|||
|
|||
System.out.println("OTP sent successfully!"); |
|||
|
|||
} catch (Exception e) { |
|||
System.out.print("ERROR---: " + e); |
|||
bodyMessage = "Error"; |
|||
} |
|||
HttpSession session = request.getSession(); |
|||
session.setAttribute("otp", otp); |
|||
return bodyMessage; |
|||
|
|||
} |
|||
|
|||
// Helper method for 400 error |
|||
// private ResponseEntity<Map<String, Object>> badRequest(String message) { |
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", message); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); |
|||
// } |
|||
|
|||
// public static String formatGender(String gender) { |
|||
// if (gender == null) |
|||
// return null; |
|||
|
|||
// gender = gender.trim().toLowerCase(); |
|||
|
|||
// if (gender.equals("male")) { |
|||
// return "M"; |
|||
// } else if (gender.equals("female")) { |
|||
// return "F"; |
|||
// } else { |
|||
// // Fallback: capitalize first letter only |
|||
// return gender.substring(0, 1).toUpperCase() + gender.substring(1); |
|||
// } |
|||
// } |
|||
|
|||
// /// dizo |
|||
|
|||
// // Child Name Inclusion Send OTP |
|||
|
|||
// @PostMapping("/ciotp") |
|||
// public ResponseEntity<JsonNode> sendCiOtp(@RequestParam("MOB") String MOB, |
|||
// @RequestParam(value = "ServiceID", defaultValue = "CI") String ServiceID) { |
|||
|
|||
// ObjectMapper mapper = new ObjectMapper(); |
|||
|
|||
// try { |
|||
// // 🔒 Validate mobile number |
|||
// if (MOB == null || MOB.trim().isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Enter the Mobile No"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// if (!MOB.matches("\\d{10}")) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Enter a valid 10-digit Mobile No"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // ✅ Prepare JSON payload for service |
|||
// ObjectNode payload = mapper.createObjectNode(); |
|||
// payload.put("MOB", MOB); |
|||
|
|||
// // ✅ Call service |
|||
// JsonNode externalResponse = birthCertificateService.sendCiOtp(ServiceID, payload.toString()); |
|||
|
|||
// // ❌ Handle missing OTP |
|||
// if (externalResponse == null || !externalResponse.has("OTP")) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Failed to send OTP"); |
|||
// error.put("Mobile", MOB); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
|||
// } |
|||
|
|||
// // ✅ Success response |
|||
// ObjectNode success = mapper.createObjectNode(); |
|||
// success.put("Message", "Sending Success"); |
|||
// success.put("Mobile", MOB); |
|||
// success.put("OTP", externalResponse.get("OTP").asText()); |
|||
// success.put("ResultStatus", "True"); |
|||
|
|||
// return ResponseEntity.ok(success); |
|||
|
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Server Error"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
|||
// } |
|||
// } |
|||
|
|||
// // Child Name Inclusion Register |
|||
|
|||
// @PostMapping("/ciRegisterData") |
|||
// public ResponseEntity<JsonNode> ciRegisterData(@RequestParam String MOB, @RequestParam String OTP, |
|||
// @RequestParam String REGNO, @RequestParam(required = false, defaultValue = "CI") String ISBD) { |
|||
|
|||
// ObjectMapper mapper = new ObjectMapper(); |
|||
|
|||
// try { |
|||
// // 🔒 Validate mobile number |
|||
// if (MOB == null || MOB.trim().isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Enter the Mobile No"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// if (!MOB.matches("\\d{10}")) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Enter a valid 10-digit Mobile No"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // 🔒 Validate OTP |
|||
// if (OTP == null || OTP.trim().isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Enter OTP"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // 🔒 Validate REGNO |
|||
// if (REGNO == null || REGNO.trim().isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Enter REG No"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // ✅ Create SetInput payload |
|||
// ObjectNode payload = mapper.createObjectNode(); |
|||
// payload.put("MOB", MOB); |
|||
// payload.put("OTP", OTP); |
|||
// payload.put("REGNO", REGNO); |
|||
// payload.put("ISBD", ISBD); // optional |
|||
|
|||
// // ✅ Call external service |
|||
// JsonNode externalResponse = birthCertificateService.CiRegisterData("CI", payload.toString()); |
|||
|
|||
// // ❌ Handle failure |
|||
// if (externalResponse == null || !externalResponse.has("ResultStatus") |
|||
// || !"True".equalsIgnoreCase(externalResponse.get("ResultStatus").asText())) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Failed to fetch birth certificate data"); |
|||
// error.put("Mobile", MOB); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
|||
// } |
|||
|
|||
// // ✅ Add default DeclarationForm value to the response |
|||
// if (externalResponse instanceof ObjectNode) { |
|||
// ((ObjectNode) externalResponse).put("DeclarationForm", |
|||
// "https://chennaicorporation.gov.in/images/Name%20Declaration%20Form.pdf"); |
|||
// } |
|||
|
|||
// return ResponseEntity.ok(externalResponse); |
|||
|
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Server Error"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
|||
// } |
|||
// } |
|||
|
|||
// // Child Name Inclusion Name Added To submit |
|||
|
|||
// @PostMapping("/saveCiName") |
|||
// public ResponseEntity<JsonNode> saveCiName(@RequestParam String MOB, @RequestParam String REGNO, |
|||
// @RequestParam String ISBD, @RequestParam String PAR_ID, @RequestParam String PAR_DCL, |
|||
// @RequestParam("AFFT_LTR") MultipartFile afftLtrFile, |
|||
// @RequestParam("PAR_ID_SIGN") MultipartFile paridsignFile, |
|||
// @RequestParam("PAR_DCL_SIGN") MultipartFile pardecsignFile, @RequestParam("DOB_Doc") MultipartFile dobFile, |
|||
// // @RequestParam("ANY_Doc") MultipartFile anyotherFile, |
|||
// @RequestParam String DOB, @RequestParam String CHILD_NAME) { |
|||
|
|||
// ObjectMapper mapper = new ObjectMapper(); |
|||
|
|||
// try { |
|||
// // Validate mobile number |
|||
|
|||
// if (MOB == null || MOB.trim().isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Enter the Mobile No"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// if (!MOB.matches("\\d{10}")) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Enter a valid 10-digit Mobile No"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // Validate REGNO |
|||
// if (REGNO == null || REGNO.isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Please fill the REG No"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // Validate PAR_ID |
|||
// if (PAR_ID == null || PAR_ID.isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Please fill the PAR_ID"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // Validate PAR_DCL |
|||
// if (PAR_DCL == null || PAR_DCL.isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Please fill the PAR_DCL"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // Validate DOB |
|||
// if (DOB == null || DOB.isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Please fill the DOB"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // Validate CHILD_NAME |
|||
// if (CHILD_NAME == null || CHILD_NAME.isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Please fill the CHILD_NAME"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // Validate AFFT_LTR and convert PDF file to Base64 |
|||
// if (afftLtrFile == null || afftLtrFile.isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Please upload AFFIDAVIT LETTER File"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// if (!afftLtrFile.getOriginalFilename().toLowerCase().endsWith(".pdf")) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Only PDF file is allowed for AFFIDAVIT LETTER File"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// byte[] fileBytes = afftLtrFile.getBytes(); |
|||
// String afftLtrBase64 = Base64.getEncoder().encodeToString(fileBytes); |
|||
|
|||
// // Validate PAR_ID_SIGN and convert PDF file to Base64 |
|||
// if (paridsignFile == null || paridsignFile.isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Please upload PARENT ID SIGN File"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// if (!paridsignFile.getOriginalFilename().toLowerCase().endsWith(".pdf")) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Only PDF file is allowed for PARENT ID SIGN File"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// byte[] paridfileBytes = paridsignFile.getBytes(); |
|||
// String paridsignBase64 = Base64.getEncoder().encodeToString(paridfileBytes); |
|||
|
|||
// // Validate PAR_DCL_SIGN and convert PDF file to Base64 |
|||
// if (pardecsignFile == null || pardecsignFile.isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Please upload PARENT DECLARATION SIGN File"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// if (!pardecsignFile.getOriginalFilename().toLowerCase().endsWith(".pdf")) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Only PDF file is allowed for PARENT DECLARATION SIGN File"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// byte[] pardclfileBytes = pardecsignFile.getBytes(); |
|||
// String pardclsignBase64 = Base64.getEncoder().encodeToString(pardclfileBytes); |
|||
|
|||
// // Validate DOB_Doc and convert PDF file to Base64 |
|||
// if (dobFile == null || dobFile.isEmpty()) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Please upload DOB CERTIFICATE"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// if (!dobFile.getOriginalFilename().toLowerCase().endsWith(".pdf")) { |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Only PDF file is allowed for DOB CERTIFICATE"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// byte[] dobfileBytes = dobFile.getBytes(); |
|||
// String dobBase64 = Base64.getEncoder().encodeToString(dobfileBytes); |
|||
|
|||
// // Validate ANY_Doc and convert PDF file to Base64 |
|||
// // if (anyotherFile == null || anyotherFile.isEmpty() ) { |
|||
// // ObjectNode error = mapper.createObjectNode(); |
|||
// // error.put("Message", "Please upload ANY OTHER DOCUMENT File"); |
|||
// // error.put("ResultStatus", "False"); |
|||
// // return ResponseEntity.badRequest().body(error); |
|||
// // } |
|||
// // |
|||
// // if (!anyotherFile.getOriginalFilename().toLowerCase().endsWith(".pdf")) { |
|||
// // ObjectNode error = mapper.createObjectNode(); |
|||
// // error.put("Message", "Only PDF file is allowed for ANY OTHER DOCUMENT File"); |
|||
// // error.put("ResultStatus", "False"); |
|||
// // return ResponseEntity.badRequest().body(error); |
|||
// // } |
|||
// // |
|||
// // byte[] anyotherfileBytes = anyotherFile.getBytes(); |
|||
// // String anyotherBase64 = Base64.getEncoder().encodeToString(anyotherfileBytes); |
|||
|
|||
// // Construct SetInput JSON |
|||
// ObjectNode payload = mapper.createObjectNode(); |
|||
// payload.put("MOB", MOB); |
|||
// payload.put("REGNO", REGNO); |
|||
// payload.put("ISBD", ISBD); |
|||
// payload.put("PAR_ID", PAR_ID); |
|||
// payload.put("PAR_DCL", PAR_DCL); |
|||
// payload.put("AFFT_LTR", afftLtrBase64); |
|||
// payload.put("PAR_ID_SIGN", paridsignBase64); |
|||
// payload.put("PAR_DCL_SIGN", pardclsignBase64); |
|||
// payload.put("DOB_Doc", dobBase64); |
|||
// // payload.put("ANY_Doc", anyotherBase64); |
|||
// payload.put("DOB", DOB); |
|||
// payload.put("CHILD_NAME", CHILD_NAME); |
|||
|
|||
// // Send to external service |
|||
// JsonNode externalResponse = birthCertificateService.saveCiName(payload); |
|||
|
|||
// // Prepare cleaned response |
|||
// ObjectNode cleanResponse = mapper.createObjectNode(); |
|||
// cleanResponse.put("Message", externalResponse.path("Message").asText()); |
|||
// cleanResponse.put("Mobile", externalResponse.path("Mobile").asText()); |
|||
// cleanResponse.put("ResultStatus", externalResponse.path("ResultStatus").asText()); |
|||
|
|||
// return ResponseEntity.ok(cleanResponse); |
|||
|
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// ObjectNode error = mapper.createObjectNode(); |
|||
// error.put("Message", "Server Error"); |
|||
// error.put("ResultStatus", "False"); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
|||
// } |
|||
// } |
|||
|
|||
// // added by hariprasath |
|||
|
|||
// @PostMapping("/by-detailsnew") |
|||
// public ResponseEntity<?> getBirthDetailsMysqlnew(@RequestParam(name = "incident_date") String dob, |
|||
// @RequestParam(name = "gender") String gender, @RequestParam(name = "father_name") String fatherName, |
|||
// @RequestParam(name = "mother_name") String motherName, |
|||
// @RequestParam(required = false, name = "child_name") String childName) { |
|||
|
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
|
|||
// // Validate |
|||
// List<String> missing = new ArrayList<>(); |
|||
// if (dob == null || dob.trim().isEmpty()) |
|||
// missing.add("incident_date"); |
|||
// if (fatherName == null || fatherName.trim().isEmpty()) |
|||
// missing.add("father_name"); |
|||
// if (motherName == null || motherName.trim().isEmpty()) |
|||
// missing.add("mother_name"); |
|||
// if (gender == null || gender.trim().isEmpty()) |
|||
// missing.add("gender"); |
|||
|
|||
// if (!missing.isEmpty()) { |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", "Missing required fields: " + String.join(", ", missing)); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// String formattedDob; |
|||
|
|||
// String formattedGender = formatGender(gender); |
|||
|
|||
// try { |
|||
// DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
// DateTimeFormatter oracleFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
|
|||
// LocalDate incidentDate = LocalDate.parse(dob.trim(), inputFormat); |
|||
// LocalDate today = LocalDate.now(); |
|||
|
|||
// if (incidentDate.isAfter(today)) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "future_date_not_allowed", "message", |
|||
// "incident_date cannot be a future date", "status_code", 400)); |
|||
// } |
|||
|
|||
// formattedDob = LocalDate.parse(dob.trim(), inputFormat).format(oracleFormat); |
|||
// } catch (DateTimeParseException e) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_format", "message", |
|||
// "incident_date must be in yyyy-MM-dd format", "status_code", 400)); |
|||
// } |
|||
|
|||
// try { |
|||
|
|||
// Map<String, Object> result = birthCertificateService.getByNewDetailsOracleOldAndNew(formattedDob, |
|||
// fatherName, motherName, childName, formattedGender); |
|||
|
|||
// if (result == null || result.isEmpty() || "not_found".equals(result.get("status"))) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(result); |
|||
// } |
|||
|
|||
// //System.out.println("result===="+result); |
|||
// Object certDetailsObj = result.get("certificate_details"); |
|||
// if (certDetailsObj instanceof List<?>) { |
|||
// List<?> certDetailsList = (List<?>) certDetailsObj; |
|||
// for (Object certObj : certDetailsList) { |
|||
// if (certObj instanceof Map<?, ?>) { |
|||
// Map<String, Object> certMap = (Map<String, Object>) certObj; |
|||
// Object pdfUrlObj = certMap.get("pdf_url"); |
|||
// if (pdfUrlObj == null || pdfUrlObj.toString().trim().isEmpty()) { |
|||
// certMap.put("message", "Awaiting for eSign"); |
|||
// } else { |
|||
// certMap.put("message", "Record fetched successfully"); |
|||
// } |
|||
// } |
|||
// } |
|||
// } |
|||
// result.put("status_code", 200); |
|||
// return ResponseEntity.ok(result); |
|||
|
|||
// } catch (Exception ex) { |
|||
// ex.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("status", "error", "message", |
|||
// "An unexpected error occurred: " + ex.getMessage(), "status_code", 500)); |
|||
// } |
|||
// } |
|||
|
|||
|
|||
|
|||
|
|||
// // added by yoganandhan for web crslogs |
|||
|
|||
// @PostMapping("/by-detailsnewforWeb") |
|||
// public ResponseEntity<?> getBirthDetailsMysqlnewforWeb(@RequestParam(name = "incident_date") String dob, |
|||
// @RequestParam(name = "gender") String gender, @RequestParam(required = false,name = "father_name") String fatherName, |
|||
// @RequestParam(required = false, name = "mother_name") String motherName, |
|||
// @RequestParam(required = false, name = "child_name") String childName) { |
|||
|
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
|
|||
// // Validate |
|||
// List<String> missing = new ArrayList<>(); |
|||
// if (dob == null || dob.trim().isEmpty()) |
|||
// missing.add("incident_date"); |
|||
// if (gender == null || gender.trim().isEmpty()) |
|||
// missing.add("gender"); |
|||
|
|||
// if (!missing.isEmpty()) { |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", "Missing required fields: " + String.join(", ", missing)); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// String formattedDob; |
|||
|
|||
// String formattedGender = formatGender(gender); |
|||
|
|||
// try { |
|||
// DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
// DateTimeFormatter oracleFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
|
|||
// LocalDate incidentDate = LocalDate.parse(dob.trim(), inputFormat); |
|||
// LocalDate today = LocalDate.now(); |
|||
|
|||
// if (incidentDate.isAfter(today)) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "future_date_not_allowed", "message", |
|||
// "incident_date cannot be a future date", "status_code", 400)); |
|||
// } |
|||
|
|||
// formattedDob = LocalDate.parse(dob.trim(), inputFormat).format(oracleFormat); |
|||
// } catch (DateTimeParseException e) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_format", "message", |
|||
// "incident_date must be in yyyy-MM-dd format", "status_code", 400)); |
|||
// } |
|||
|
|||
// try { |
|||
|
|||
// Map<String, Object> result = birthCertificateService.getByNewDetailsOracleOldAndNewForWeb(formattedDob, |
|||
// fatherName, motherName, childName, formattedGender); |
|||
|
|||
// if (result == null || result.isEmpty() || "not_found".equals(result.get("status"))) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(result); |
|||
// } |
|||
|
|||
// //System.out.println("result===="+result); |
|||
// Object certDetailsObj = result.get("certificate_details"); |
|||
// if (certDetailsObj instanceof List<?>) { |
|||
// List<?> certDetailsList = (List<?>) certDetailsObj; |
|||
// for (Object certObj : certDetailsList) { |
|||
// if (certObj instanceof Map<?, ?>) { |
|||
// Map<String, Object> certMap = (Map<String, Object>) certObj; |
|||
// Object pdfUrlObj = certMap.get("pdf_url"); |
|||
// if (pdfUrlObj == null || pdfUrlObj.toString().trim().isEmpty()) { |
|||
// certMap.put("message", "Awaiting for eSign"); |
|||
// } else { |
|||
// certMap.put("message", "Record fetched successfully"); |
|||
// } |
|||
// } |
|||
// } |
|||
// } |
|||
// result.put("status_code", 200); |
|||
// return ResponseEntity.ok(result); |
|||
|
|||
// } catch (Exception ex) { |
|||
// ex.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("status", "error", "message", |
|||
// "An unexpected error occurred: " + ex.getMessage(), "status_code", 500)); |
|||
// } |
|||
// } |
|||
|
|||
|
|||
// //add by yogi for all adoption child details to get |
|||
|
|||
// @GetMapping("/alladoptionbirthdetails") |
|||
// public ResponseEntity<Map<String, Object>> getAllAdoptionBirthDetails() { |
|||
// List<Map<String, Object>> result = birthCertificateService.getAllAdoptionBirthDetails(); |
|||
|
|||
// if (result.isEmpty()) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
// .body(Map.of( |
|||
// "status", "not_found", |
|||
// "message", "No adoption birth records found.", |
|||
// "status_code", 404 |
|||
// )); |
|||
// } |
|||
|
|||
// return ResponseEntity.ok(Map.of( |
|||
// "status", "success", |
|||
// "count", result.size(), |
|||
// "data", result |
|||
// )); |
|||
// } |
|||
|
|||
|
|||
|
|||
// @GetMapping("/getolddetails") |
|||
// public ResponseEntity<Map<String, Object>> getoldDetails(String dob, String gender) { |
|||
// // Pass the date of death to the service |
|||
// List<Map<String, Object>> result = birthCertificateService.getOldBirthDetails(dob,gender); |
|||
|
|||
// if (result.isEmpty()) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
// .body(Map.of( |
|||
// "status", "not_found", |
|||
// "message", "No death records found for the given date.", |
|||
// "status_code", 404 |
|||
// )); |
|||
// } |
|||
|
|||
// return ResponseEntity.ok(Map.of( |
|||
// "status", "success", |
|||
// "count", result.size(), |
|||
// "data", result |
|||
// )); |
|||
// } |
|||
|
|||
|
|||
|
|||
// @GetMapping("/getolddetailsstatic") |
|||
// public ResponseEntity<Map<String, Object>> getOldBirthDetailsStatic() { |
|||
// // Pass the date of death to the service |
|||
// Map<String, Object> result = birthCertificateService.getOldBirthDetailsStatic(); |
|||
|
|||
// if (result.isEmpty()) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
// .body(Map.of( |
|||
// "status", "not_found", |
|||
// "message", "No death records found for the given date.", |
|||
// "status_code", 404 |
|||
// )); |
|||
// } |
|||
|
|||
// return ResponseEntity.ok(Map.of( |
|||
// "status", "success", |
|||
// "count", result.size(), |
|||
// "data", result |
|||
// )); |
|||
// } |
|||
|
|||
} |
|||
@ -0,0 +1,121 @@ |
|||
// package com.gcc.restapiservices.birthanddeath.controller; |
|||
|
|||
// import com.gcc.restapiservices.birthanddeath.service.ChildNameInclusionService; |
|||
|
|||
// import org.springframework.beans.factory.annotation.Autowired; |
|||
// import org.springframework.http.ResponseEntity; |
|||
// import org.springframework.web.bind.annotation.*; |
|||
// import org.springframework.web.multipart.MultipartFile; |
|||
// import java.io.IOException; |
|||
// import java.nio.file.Files; |
|||
// import java.nio.file.Path; |
|||
// import java.nio.file.Paths; |
|||
// import java.nio.file.StandardCopyOption; |
|||
// import java.util.HashMap; |
|||
// import java.util.List; |
|||
// import java.util.Map; |
|||
|
|||
// @RequestMapping("/gccrestservices/api/childnameinclusion") |
|||
// @RestController |
|||
// public class ChildNameInclusionController { |
|||
// private ChildNameInclusionService childNameInclusionService; |
|||
|
|||
// @Autowired |
|||
// public ChildNameInclusionController(ChildNameInclusionService childNameInclusionService) { |
|||
// this.childNameInclusionService = childNameInclusionService; |
|||
// } |
|||
|
|||
// @GetMapping("/getByRegNo") |
|||
// public Map<String, Object> getByRegNo(@RequestParam String regNo, @RequestParam String mobile) { |
|||
// return childNameInclusionService.getByRegNo(regNo, mobile); |
|||
// } |
|||
|
|||
// @GetMapping("/getDetailsByMobNo") |
|||
// public Map<String,Object> getDetailsByMobNo(@RequestParam String mobile){ |
|||
// return childNameInclusionService.getDetailsByMobNo(mobile); |
|||
// } |
|||
|
|||
|
|||
|
|||
// // @PostMapping("/save") |
|||
// // public ResponseEntity<Map<String, Object>> saveBirthDeath( |
|||
// // @RequestParam Map<String, String> formFields, |
|||
// // @RequestParam("fle_par_dcl") MultipartFile fleParDcl, |
|||
// // @RequestParam("fle_par_id") MultipartFile fleParId, |
|||
// // @RequestParam("fle_afft_ltr") MultipartFile fleAfftLtr, |
|||
// // @RequestParam("fle_dob") MultipartFile fleDob |
|||
// // ) { |
|||
// // Map<String, Object> response = new HashMap<>(); |
|||
// // try { |
|||
// // // ✅ Required text fields |
|||
// // String[] requiredTextFields = { |
|||
// // "reg_no", "isBD", "txt_mob", "rd_birth_corr", "m_child" |
|||
// // }; |
|||
// // for (String field : requiredTextFields) { |
|||
// // if (!formFields.containsKey(field) || formFields.get(field).trim().isEmpty()) { |
|||
// // response.put("statusCode", 400); |
|||
// // response.put("message", "Missing or empty required field: " + field); |
|||
// // return ResponseEntity.badRequest().body(response); |
|||
// // } |
|||
// // } |
|||
// // |
|||
// // // ✅ Validate files |
|||
// // checkFileRequired(fleParDcl, "fle_par_dcl"); |
|||
// // checkFileRequired(fleParId, "fle_par_id"); |
|||
// // checkFileRequired(fleAfftLtr, "fle_afft_ltr"); |
|||
// // checkFileRequired(fleDob, "fle_dob"); |
|||
// // |
|||
// // // ✅ Build files map for service |
|||
// // Map<String, MultipartFile> filesMap = new HashMap<>(); |
|||
// // filesMap.put("fle_par_dcl", fleParDcl); |
|||
// // filesMap.put("fle_par_id", fleParId); |
|||
// // filesMap.put("fle_afft_ltr", fleAfftLtr); |
|||
// // filesMap.put("fle_dob", fleDob); |
|||
// // |
|||
// // // ✅ Call service with BOTH parameters |
|||
// // String ackNo = childNameInclusionService.saveChildNameInclusion(formFields, filesMap); |
|||
// // |
|||
// // response.put("statusCode", 200); |
|||
// // response.put("message", "Your request for birth child name inclusion has been received successfully"); |
|||
// // response.put("acknowledgementNumber", ackNo); |
|||
// // return ResponseEntity.ok(response); |
|||
// // |
|||
// // } catch (IOException e) { |
|||
// // response.put("statusCode", 400); |
|||
// // response.put("message", "File saving error: " + e.getMessage()); |
|||
// // return ResponseEntity.badRequest().body(response); |
|||
// // } catch (IllegalArgumentException e) { |
|||
// // response.put("statusCode", 400); |
|||
// // response.put("message", e.getMessage()); |
|||
// // return ResponseEntity.badRequest().body(response); |
|||
// // } catch (Exception e) { |
|||
// // response.put("statusCode", 500); |
|||
// // response.put("message", "Server error: " + e.getMessage()); |
|||
// // return ResponseEntity.status(500).body(response); |
|||
// // } |
|||
// // } |
|||
// // |
|||
// // private void checkFileRequired(MultipartFile file, String name) { |
|||
// // if (file == null || file.isEmpty()) { |
|||
// // throw new IllegalArgumentException("Missing required file: " + name); |
|||
// // } |
|||
// // } |
|||
// // |
|||
// // |
|||
// // |
|||
// // |
|||
// // |
|||
// // private String saveFileLocally(MultipartFile file, String regNo) throws IOException { |
|||
// // String uploadDir = System.getProperty("user.dir") + "/uploads/" + regNo; |
|||
// // Files.createDirectories(Paths.get(uploadDir)); |
|||
// // |
|||
// // String fileName = System.currentTimeMillis() + "_" + file.getOriginalFilename(); |
|||
// // Path filePath = Paths.get(uploadDir, fileName); |
|||
// // |
|||
// // Files.copy(file.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING); |
|||
// // |
|||
// // // returning relative path for DB storage |
|||
// // return "/uploads/" + regNo + "/" + fileName; |
|||
// // } |
|||
|
|||
// } |
|||
@ -0,0 +1,440 @@ |
|||
// package com.gcc.restapiservices.birthanddeath.controller; |
|||
|
|||
// import java.time.LocalDate; |
|||
// import java.time.format.DateTimeFormatter; |
|||
// import java.time.format.DateTimeParseException; |
|||
// import java.util.ArrayList; |
|||
// import java.util.LinkedHashMap; |
|||
// import java.util.List; |
|||
// import java.util.Map; |
|||
|
|||
// import org.springframework.beans.factory.annotation.Autowired; |
|||
// import org.springframework.dao.EmptyResultDataAccessException; |
|||
// import org.springframework.http.HttpStatus; |
|||
// import org.springframework.http.ResponseEntity; |
|||
// import org.springframework.web.bind.annotation.GetMapping; |
|||
// import org.springframework.web.bind.annotation.PostMapping; |
|||
// import org.springframework.web.bind.annotation.RequestMapping; |
|||
// import org.springframework.web.bind.annotation.RequestParam; |
|||
// import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
// import com.gcc.restapiservices.birthanddeath.service.DeathCertificateService; |
|||
|
|||
// @RequestMapping("/gccrestservices/api/death-certificate") |
|||
// @RestController |
|||
// public class DeathApiController { |
|||
|
|||
// @Autowired |
|||
// private DeathCertificateService deathCertificateService; |
|||
|
|||
// @PostMapping("/by-registration") |
|||
// public ResponseEntity<?> getByRegistration(@RequestParam("registration_number") String regNo) { |
|||
// try { |
|||
|
|||
// // Validate presence |
|||
// if (regNo == null || regNo.trim().isEmpty()) { |
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", "Registration number is required"); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); |
|||
// } |
|||
|
|||
// // Map<String, Object> result = |
|||
// // deathCertificateService.getByRegistrationNumber(regNo); |
|||
|
|||
// String formattedRegNo = regNo.trim().toUpperCase(); |
|||
|
|||
// Map<String, Object> result = deathCertificateService.getDeathByRegistrationNumber(formattedRegNo); |
|||
|
|||
// // Inject status and status code into response |
|||
// if (result.containsKey("certificate_details")) { |
|||
// Object pdfUrl = result.get("pdf_url"); |
|||
// if (pdfUrl == null || pdfUrl.toString().isEmpty()) { |
|||
// result.put("message", "Awaiting for eSign"); |
|||
// } else { |
|||
// result.put("message", "Record fetched successfully"); |
|||
// } |
|||
// result.put("status", "success"); |
|||
// result.put("status_code", 200); |
|||
// //result.put("message", "Record fetched successfully"); |
|||
// return ResponseEntity.ok(result); |
|||
// } else { |
|||
// return ResponseEntity.ok(result); |
|||
// } |
|||
|
|||
// } catch (EmptyResultDataAccessException ex) { |
|||
// Map<String, Object> response = new LinkedHashMap<>(); |
|||
// response.put("status", "not_found"); |
|||
// response.put("message", "no data found for given registration number"); |
|||
// response.put("status_code", 404); |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); |
|||
|
|||
// } catch (Exception ex) { |
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
// error.put("status", "error"); |
|||
// error.put("message", "An unexpected error occurred " + ex); |
|||
// error.put("status_code", 500); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
|||
// } |
|||
// } |
|||
|
|||
// @PostMapping("/by-mobile") |
|||
// public ResponseEntity<?> getByMobile(@RequestParam(value = "mobile_number") String mobile) { |
|||
// try { |
|||
// // Validate presence |
|||
// if (mobile == null || mobile.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_request", "message", |
|||
// "Mobile number is required", "status_code", 400)); |
|||
// } |
|||
|
|||
// mobile = mobile.trim(); |
|||
|
|||
// // Validate format: 10 digits |
|||
// if (!mobile.matches("^\\d{10}$")) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_format", "message", |
|||
// "Invalid mobile number format. Expected: 10-digit number", "status_code", 400)); |
|||
// } |
|||
|
|||
// List<Map<String, Object>> results = deathCertificateService.getByMobile(mobile); |
|||
|
|||
// // List<Map<String, Object>> results = |
|||
// // deathCertificateService.getDeathByMobile(mobile.trim()); |
|||
|
|||
// if (results.isEmpty()) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of("status", "not_found", "message", |
|||
// "No records found for the given mobile number", "status_code", 404)); |
|||
// } |
|||
|
|||
// // Inject status and status_code into each record |
|||
// List<Map<String, Object>> finalResults = new ArrayList<>(); |
|||
// for (Map<String, Object> record : results) { |
|||
// if(record.get("pdf_url") == null || record.get("pdf_url").toString().isEmpty()) { |
|||
// record.put("message", "Awaiting for eSign"); |
|||
// } else { |
|||
// record.put("message", "Record fetched successfully"); |
|||
// } |
|||
// record.put("status", "success"); |
|||
// record.put("status_code", 200); |
|||
// finalResults.add(record); |
|||
// } |
|||
|
|||
// return ResponseEntity.ok(finalResults); |
|||
|
|||
// } catch (Exception ex) { |
|||
// ex.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("status", "error", "message", |
|||
// "An unexpected error occurred: " + ex.getMessage(), "status_code", 500)); |
|||
// } |
|||
// } |
|||
|
|||
// // oracle working |
|||
|
|||
// @PostMapping("/by-details") |
|||
// public ResponseEntity<?> getDeathDetailsOracle(@RequestParam(name = "incident_date") String dod, |
|||
// @RequestParam(name = "gender") String gender, @RequestParam(name = "father_name") String fatherName, |
|||
// @RequestParam(name = "mother_name") String motherName, |
|||
// @RequestParam(required = false, name = "person_name") String personName) { |
|||
|
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
|
|||
// // Validate required fields |
|||
// List<String> missing = new ArrayList<>(); |
|||
// if (dod == null || dod.trim().isEmpty()) |
|||
// missing.add("death_date"); |
|||
// if (fatherName == null || fatherName.trim().isEmpty()) |
|||
// missing.add("father_name"); |
|||
// if (motherName == null || motherName.trim().isEmpty()) |
|||
// missing.add("mother_name"); |
|||
// if (gender == null || gender.trim().isEmpty()) |
|||
// missing.add("gender"); |
|||
|
|||
// if (!missing.isEmpty()) { |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", "Missing required fields: " + String.join(", ", missing)); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // ✅ Format gender like "Male"/"Female" to "M"/"F" |
|||
// String formattedGender = formatGender(gender); |
|||
|
|||
// // ✅ Format DoD to dd-MM-yyyy for Oracle |
|||
// String formattedDod; |
|||
// try { |
|||
// DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
// DateTimeFormatter oracleFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
// formattedDod = LocalDate.parse(dod.trim(), inputFormat).format(oracleFormat); |
|||
// LocalDate incidentDate = LocalDate.parse(dod.trim(), inputFormat); |
|||
// LocalDate today = LocalDate.now(); |
|||
|
|||
// if (incidentDate.isAfter(today)) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "future_date_not_allowed", "message", |
|||
// "incident_date cannot be a future date", "status_code", 400)); |
|||
// } |
|||
|
|||
// } catch (DateTimeParseException e) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_format", "message", |
|||
// "incident_date must be in yyyy-MM-dd format", "status_code", 400)); |
|||
// } |
|||
|
|||
// try { |
|||
// // System.out.println("📥 DOD : " + formattedDod); |
|||
// // System.out.println("📥 Father : " + fatherName); |
|||
// // System.out.println("📥 Mother : " + motherName); |
|||
// // System.out.println("📥 Gender : " + formattedGender); |
|||
// // System.out.println("📥 Person : " + (personName != null ? personName : "[EMPTY]")); |
|||
|
|||
// Map<String, Object> result = deathCertificateService.getByDetailsOracleOldAndNewForDeath(formattedDod, |
|||
// fatherName, motherName, personName, formattedGender); |
|||
|
|||
// if (result.isEmpty() || "not_found".equals(result.get("status"))) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of("status", "not_found", "message", |
|||
// "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// "status_code", 404)); |
|||
// } |
|||
|
|||
// result.put("status_code", 200); |
|||
// result.put("message", "Record fetched successfully"); |
|||
// return ResponseEntity.ok(result); |
|||
|
|||
// } catch (Exception ex) { |
|||
// ex.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("status", "error", "message", |
|||
// "An unexpected error occurred: " + ex.getMessage(), "status_code", 500)); |
|||
// } |
|||
// } |
|||
|
|||
// // Helper method for 400 error |
|||
// private ResponseEntity<Map<String, Object>> badRequest(String message) { |
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", message); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); |
|||
// } |
|||
|
|||
// public static String formatGender(String gender) { |
|||
// if (gender == null) |
|||
// return null; |
|||
|
|||
// gender = gender.trim().toLowerCase(); |
|||
|
|||
// if (gender.equals("male")) { |
|||
// return "M"; |
|||
// } else if (gender.equals("female")) { |
|||
// return "F"; |
|||
// } else { |
|||
// // Fallback: capitalize first letter |
|||
// return gender.substring(0, 1).toUpperCase() + gender.substring(1); |
|||
// } |
|||
// } |
|||
|
|||
// // added by hariprasath |
|||
|
|||
// @PostMapping("/by-detailsnew") |
|||
// public ResponseEntity<?> getDeathDetailsOraclenew(@RequestParam(name = "incident_date") String dod, |
|||
// @RequestParam(name = "gender") String gender, @RequestParam(name = "father_name") String fatherName, |
|||
// @RequestParam(name = "mother_name") String motherName, |
|||
// @RequestParam(required = false, name = "person_name") String personName) { |
|||
|
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
|
|||
// // Validate required fields |
|||
// List<String> missing = new ArrayList<>(); |
|||
// if (dod == null || dod.trim().isEmpty()) |
|||
// missing.add("incident_date"); |
|||
// if (fatherName == null || fatherName.trim().isEmpty()) |
|||
// missing.add("father_name"); |
|||
// if (motherName == null || motherName.trim().isEmpty()) |
|||
// missing.add("mother_name"); |
|||
// if (gender == null || gender.trim().isEmpty()) |
|||
// missing.add("gender"); |
|||
|
|||
// if (!missing.isEmpty()) { |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", "Missing required fields: " + String.join(", ", missing)); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // ✅ Format gender like "Male"/"Female" to "M"/"F" |
|||
// String formattedGender = formatGender(gender); |
|||
|
|||
// // ✅ Format DoD to dd-MM-yyyy for Oracle |
|||
// String formattedDod; |
|||
// try { |
|||
// DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
// DateTimeFormatter oracleFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
// formattedDod = LocalDate.parse(dod.trim(), inputFormat).format(oracleFormat); |
|||
// LocalDate incidentDate = LocalDate.parse(dod.trim(), inputFormat); |
|||
// LocalDate today = LocalDate.now(); |
|||
|
|||
// if (incidentDate.isAfter(today)) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "future_date_not_allowed", "message", |
|||
// "incident_date cannot be a future date", "status_code", 400)); |
|||
// } |
|||
|
|||
// } catch (DateTimeParseException e) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_format", "message", |
|||
// "incident_date must be in yyyy-MM-dd format", "status_code", 400)); |
|||
// } |
|||
|
|||
// try { |
|||
|
|||
// Map<String, Object> result = deathCertificateService.getBynewDetailsOracleOldAndNewForDeath(formattedDod, |
|||
// fatherName, motherName, personName, formattedGender); |
|||
|
|||
// if (result.isEmpty() || "not_found".equals(result.get("status"))) { |
|||
// // return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of( |
|||
// // "status", "not_found", |
|||
// // "message", "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// // "status_code", 404 |
|||
// // )); |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(result); |
|||
// } |
|||
|
|||
// Object certDetailsObj = result.get("certificate_details"); |
|||
// if (certDetailsObj instanceof List<?>) { |
|||
// List<?> certDetailsList = (List<?>) certDetailsObj; |
|||
// for (Object certObj : certDetailsList) { |
|||
// if (certObj instanceof Map<?, ?>) { |
|||
// Map<String, Object> certMap = (Map<String, Object>) certObj; |
|||
// Object pdfUrlObj = certMap.get("pdf_url"); |
|||
// if (pdfUrlObj == null || pdfUrlObj.toString().trim().isEmpty()) { |
|||
// certMap.put("message", "Awaiting for eSign"); |
|||
// } else { |
|||
// certMap.put("message", "Record fetched successfully"); |
|||
// } |
|||
// } |
|||
// } |
|||
// } |
|||
// result.put("status_code", 200); |
|||
// //result.put("message", "Record fetched successfully"); |
|||
// return ResponseEntity.ok(result); |
|||
|
|||
// } catch (Exception ex) { |
|||
// ex.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("status", "error", "message", |
|||
// "An unexpected error occurred: " + ex.getMessage(), "status_code", 500)); |
|||
// } |
|||
// } |
|||
|
|||
|
|||
|
|||
// // added by yogi for web crslogs |
|||
|
|||
// @PostMapping("/by-detailsnewforWeb") |
|||
// public ResponseEntity<?> getDeathDetailsOraclenewforWeb(@RequestParam(name = "incident_date") String dod, |
|||
// @RequestParam(name = "gender") String gender, @RequestParam(required = false,name = "father_name") String fatherName, |
|||
// @RequestParam(required = false, name = "mother_name") String motherName, |
|||
// @RequestParam(required = false, name = "person_name") String personName) { |
|||
|
|||
// Map<String, Object> error = new LinkedHashMap<>(); |
|||
|
|||
// // Validate required fields |
|||
// List<String> missing = new ArrayList<>(); |
|||
// if (dod == null || dod.trim().isEmpty()) |
|||
// missing.add("incident_date"); |
|||
// if (gender == null || gender.trim().isEmpty()) |
|||
// missing.add("gender"); |
|||
|
|||
// if (!missing.isEmpty()) { |
|||
// error.put("status", "invalid_request"); |
|||
// error.put("message", "Missing required fields: " + String.join(", ", missing)); |
|||
// error.put("status_code", 400); |
|||
// return ResponseEntity.badRequest().body(error); |
|||
// } |
|||
|
|||
// // ✅ Format gender like "Male"/"Female" to "M"/"F" |
|||
// String formattedGender = formatGender(gender); |
|||
|
|||
// // ✅ Format DoD to dd-MM-yyyy for Oracle |
|||
// String formattedDod; |
|||
// try { |
|||
// DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
// DateTimeFormatter oracleFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
// formattedDod = LocalDate.parse(dod.trim(), inputFormat).format(oracleFormat); |
|||
// LocalDate incidentDate = LocalDate.parse(dod.trim(), inputFormat); |
|||
// LocalDate today = LocalDate.now(); |
|||
|
|||
// if (incidentDate.isAfter(today)) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "future_date_not_allowed", "message", |
|||
// "incident_date cannot be a future date", "status_code", 400)); |
|||
// } |
|||
|
|||
// } catch (DateTimeParseException e) { |
|||
// return ResponseEntity.badRequest().body(Map.of("status", "invalid_format", "message", |
|||
// "incident_date must be in yyyy-MM-dd format", "status_code", 400)); |
|||
// } |
|||
|
|||
// try { |
|||
|
|||
// Map<String, Object> result = deathCertificateService.getBynewDetailsOracleOldAndNewForWeb(formattedDod, |
|||
// fatherName, motherName, personName, formattedGender); |
|||
|
|||
// if (result.isEmpty() || "not_found".equals(result.get("status"))) { |
|||
// // return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of( |
|||
// // "status", "not_found", |
|||
// // "message", "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// // "status_code", 404 |
|||
// // )); |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(result); |
|||
// } |
|||
|
|||
// //System.out.println(" " + dod + " " + fatherName + " " + motherName + " " + personName); |
|||
// //System.out.println("deathdetails:" + result); |
|||
|
|||
// Object certDetailsObj = result.get("certificate_details"); |
|||
// if (certDetailsObj instanceof List<?>) { |
|||
// List<?> certDetailsList = (List<?>) certDetailsObj; |
|||
// for (Object certObj : certDetailsList) { |
|||
// if (certObj instanceof Map<?, ?>) { |
|||
// Map<String, Object> certMap = (Map<String, Object>) certObj; |
|||
// Object pdfUrlObj = certMap.get("pdf_url"); |
|||
// if (pdfUrlObj == null || pdfUrlObj.toString().trim().isEmpty()) { |
|||
// certMap.put("message", "Awaiting for eSign"); |
|||
// } else { |
|||
// certMap.put("message", "Record fetched successfully"); |
|||
// } |
|||
// } |
|||
// } |
|||
// } |
|||
|
|||
// //System.out.println("deathdetailscontroller:" + result); |
|||
// result.put("status_code", 200); |
|||
// //result.put("message", "Record fetched successfully"); |
|||
// return ResponseEntity.ok(result); |
|||
|
|||
|
|||
// } catch (Exception ex) { |
|||
// ex.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("status", "error", "message", |
|||
// "An unexpected error occurred: " + ex.getMessage(), "status_code", 500)); |
|||
// } |
|||
// } |
|||
|
|||
// // old details for testing |
|||
|
|||
// @GetMapping("/getolddetails") |
|||
// public ResponseEntity<Map<String, Object>> getoldDetails(String dod, String gender) { |
|||
// // Pass the date of death to the service |
|||
// List<Map<String, Object>> result = deathCertificateService.getOldDeathDetails(dod,gender); |
|||
|
|||
// if (result.isEmpty()) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
// .body(Map.of( |
|||
// "status", "not_found", |
|||
// "message", "No death records found for the given date.", |
|||
// "status_code", 404 |
|||
// )); |
|||
// } |
|||
|
|||
// return ResponseEntity.ok(Map.of( |
|||
// "status", "success", |
|||
// "count", result.size(), |
|||
// "data", result |
|||
// )); |
|||
// } |
|||
|
|||
// } |
|||
1095
src/main/java/com/gcc/restapiservices/birthanddeath/service/BirthCertificateService.java
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,420 @@ |
|||
// package com.gcc.restapiservices.birthanddeath.service; |
|||
|
|||
// import org.springframework.beans.factory.annotation.Autowired; |
|||
// import org.springframework.beans.factory.annotation.Qualifier; |
|||
// import org.springframework.dao.DataAccessException; |
|||
// import org.springframework.jdbc.core.JdbcTemplate; |
|||
// import org.springframework.stereotype.Service; |
|||
// import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
// import javax.sql.DataSource; |
|||
// import java.io.File; |
|||
// import java.io.IOException; |
|||
// import java.nio.file.Files; |
|||
// import java.nio.file.Path; |
|||
// import java.nio.file.Paths; |
|||
// import java.nio.file.StandardCopyOption; |
|||
// import java.util.HashMap; |
|||
// import java.util.List; |
|||
// import java.util.Map; |
|||
|
|||
// @Service |
|||
// public class ChildNameInclusionService { |
|||
// private JdbcTemplate jdbcTemplate; |
|||
|
|||
// @Autowired |
|||
// public ChildNameInclusionService(JdbcTemplate jdbcTemplate) { |
|||
// this.jdbcTemplate = jdbcTemplate; |
|||
// } |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
// // private final RestTemplate restTemplate; |
|||
|
|||
// // public ChildNameInclusionService(@Qualifier("sslBypassRestTemplate") RestTemplate restTemplate) { |
|||
// // this.restTemplate = restTemplate; |
|||
// // } |
|||
|
|||
// //birth and death new live db connection |
|||
// @Autowired |
|||
// @Qualifier("oracleBirthNewDataSourceItCell") |
|||
// private DataSource newBirthDataSource; |
|||
|
|||
// //birth and death old live db connection |
|||
// @Autowired |
|||
// @Qualifier("oracleBirthOldDataSourceItCell") |
|||
// private DataSource oldBirthDataSource; |
|||
|
|||
|
|||
// public Map<String, Object> getByRegNo(String regNo, String mobile) { |
|||
// JdbcTemplate newJdbc = new JdbcTemplate(newBirthDataSource); |
|||
// JdbcTemplate oldJdbc = new JdbcTemplate(oldBirthDataSource); |
|||
// Map<String, Object> response = new HashMap<>(); |
|||
// Map<String, Object> result = new HashMap<>(); |
|||
// if (regNo.isEmpty() || regNo == null) { |
|||
// result.put("Message", "Please provide Registration Number"); |
|||
// response.put("Response", result); |
|||
// return response; |
|||
// } |
|||
// String newSql = "Select case when ceil (months_between(sysdate,date_of_birth)/12)>=5 then 1 else 0 end age_5," + |
|||
// " (select zone_code||'-'||zone_name from tbl_zone z where z.zone_id=x.zone_id) zone_name, " + |
|||
// " (select division_name from tbl_division d where d.divison_id=x.divison_id) division_name, " + |
|||
// " to_char(DATE_OF_BIRTH,'dd/mm/yyyy') DATE_OF_BIRTH , TO_CHAR(CREATED_DATE,'DD/MM/RRRR') CREATED_DATE, NVL(SEX,' ') SEX ," + |
|||
// " nvl(CHILD_NAME,' ') CHILD_NAME , nvl(FATHER_NAME,' ') FATHER_NAME , nvl(MOTHER_NAME,' ') MOTHER_NAME, nvl(FATH_MOB_NO, ' ') FATH_MOB_NO, nvl(MOTH_MOB_NO, ' ') MOTH_MOB_NO, " + |
|||
// " nvl(X.PERMANENT_ADDRESS1,' ') ||' '|| nvl(X.PERMANENT_ADDRESS2,' ') ||' '|| " + |
|||
// " case when nvl(X.PERMANENT_ADDRESS3,'NULL') not like 'NULL%' then X.PERMANENT_ADDRESS3 else ' ' end ||' '|| replace( " + |
|||
// " (CASE WHEN trim(X.PERMTBLDGNO) IS NOT NULL THEN X.PERMTBLDGNO ||', ' ELSE ' ' END || " + |
|||
// " CASE WHEN trim(X.PERMTHOUSENO) IS NOT NULL THEN X.PERMTHOUSENO ||', ' ELSE ' 'END || " + |
|||
// "CASE WHEN INSTR(X.PERMTADDR1,'_')>=0 THEN SUBSTR(X.PERMTADDR1,1,INSTR(X.PERMTADDR1,'_')-1)||', ' ELSE X.PERMTADDR1||', ' END|| " + |
|||
// " CASE WHEN nvl(X.PERMTVLG,'NL') not in ('NL','NULL_NULL') THEN X.PERMTVLG ||', ' ELSE '' END || " + |
|||
// " CASE WHEN INSTR(X.PERMTADDR1,'_')>=0 THEN SUBSTR(X.PERMTADDR1,INSTR(X.PERMTADDR1,'_')+1)||', ' ELSE X.PERMTADDR1||', ' END || " + |
|||
// " CASE WHEN INSTR(X.PERMTSUBDIST,'_')>0 THEN SUBSTR(X.PERMTSUBDIST,1,INSTR(X.PERMTSUBDIST,'_')-1) ELSE X.PERMTSUBDIST END ||', '|| " + |
|||
// " CASE WHEN INSTR(X.PERMTDIST,'_')>0 THEN SUBSTR(X.PERMTDIST,1,INSTR(X.PERMTDIST,'_')-1) ELSE X.PERMTDIST END ||', '|| " + |
|||
// " CASE WHEN X.PERMTSTATE IS NOT NULL THEN X.PERMTSTATE ELSE ' ' END || " + |
|||
// " CASE WHEN TO_CHAR(X.PERMTPIN) IS NOT NULL THEN '-'||X.PERMTPIN ||' ' ELSE ' 'END),', ', ', ') || " + |
|||
// " case nvl(X.PERMANENT_PIN,'0') when '0' then ' ' else ' '||X.PERMANENT_PIN end PERM_ADDR, " + |
|||
// " CASE WHEN X.PARENTBLDGNO IS NOT NULL THEN X.PARENTBLDGNO||', ' ELSE ' ' END || " + |
|||
// " CASE WHEN X.PARENTHOUSENO IS NOT NULL THEN X.PARENTHOUSENO||', ' ELSE ' ' END || " + |
|||
// " CASE WHEN nvl(X.PARENTADDRESS,'_') not in ('_','NULL_NULL') THEN nvl(substr(X.PARENTADDRESS,1,instr(X.PARENTADDRESS,'_')-1),' ') ||' , ' ELSE ' ' END || " + |
|||
// " CASE WHEN X.PARENTVLG IS NOT NULL THEN X.PARENTVLG||', ' ELSE ' ' END || " + |
|||
// " CASE WHEN nvl(X.PARENTADDRESS,'_') not in ('_','NULL_NULL') THEN nvl(substr(X.PARENTADDRESS,instr(X.PARENTADDRESS,'_')+1),' ') ||' , ' ELSE ' ' END || " + |
|||
// " CASE WHEN INSTR(X.PARENTSUBDIST,'_') >0 THEN SUBSTR(X.PARENTSUBDIST,1,INSTR(X.PARENTSUBDIST,'_')-1 ) ELSE X.PARENTSUBDIST END ||', '||" + |
|||
// " CASE WHEN INSTR(X.PARENTDIST,'_') >0 THEN SUBSTR(X.PARENTDIST,1,INSTR(X.PARENTDIST,'_')-1 ) ELSE X.PARENTDIST END ||', '|| " + |
|||
// " CASE WHEN X.PARENTSTATE IS NOT NULL AND X.PARENTSTATE IN ('1','2') THEN X.PARENTSTATE ELSE X.PARENTSTATE END || " + |
|||
// " nvl(X.CURRENT_ADDRESS1,' ') ||' '||nvl(X.CURRENT_ADDRESS2,' ') ||' '||nvl(X.CURRENT_ADDRESS3,' ') ||' '|| nvl(X.cnt_name,' ') ||' '|| " + |
|||
// " CASE WHEN PARENTPIN IS NOT NULL THEN '- '|| PARENTPIN ELSE ' ' END currentAddress ," + |
|||
// " CASE WHEN BIRTH_PLACE !=1 THEN " + |
|||
// " BIRTH_PLACE||' '||PLACE_OF_BIRTH_ADD1||' '||PLACE_OF_BIRTH_ADD2||' '||PLACE_OF_BIRTH_ADD3||' '||PLACE_OF_BIRTH_PIN " + |
|||
// " ELSE " + |
|||
// " (SELECT HOSPITAL_NAME||chr(13) ||HOSPITAL_ADDRESS1||' '||HOSPITAL_ADDRESS2||' ' ||HOSPITAL_ADDRESS3||' '||HOSPITAL_PIN " + |
|||
// " FROM TBL_HOSPITAL H WHERE H.HOSPITAL_ID=X.HOSPITAL_ID) END PLACE_BIRTH ,'COC' COC " + |
|||
// " from TBL_BIRTH_DETAILS X where registration_number= ? and child_name is null " + |
|||
// " and zone_id between 501 and 515 "; |
|||
|
|||
// String oldSql = "Select case when ceil (months_between(sysdate,date_of_birth)/12)>=5 then 1 else 0 end age_5," + |
|||
// " (select zone_code||'-'||zone_name from tbl_zone z where z.zone_id=x.zone_id) zone_name, " + |
|||
// " (select division_name from tbl_division d where d.divison_id=x.divison_id) division_name, " + |
|||
// " to_char(DATE_OF_BIRTH,'dd/mm/yyyy') DATE_OF_BIRTH , TO_CHAR(CREATED_DATE,'DD/MM/RRRR') CREATED_DATE, NVL(SEX,' ') SEX ," + |
|||
// " nvl(CHILD_NAME,' ') CHILD_NAME , nvl(FATHER_NAME,' ') FATHER_NAME , nvl(MOTHER_NAME,' ') MOTHER_NAME, registration_number, " + |
|||
// " nvl(PERMANENT_ADDRESS1,' ') ||'<br>'||nvl(PERMANENT_ADDRESS2,' ')||'<br>' || " + |
|||
// " nvl(PERMANENT_ADDRESS3,' ')||'-' || PERMANENT_PIN PERM_ADDR, " + |
|||
// " " + |
|||
// " nvl(CURRENT_ADDRESS1,' ') ||'<br>'||nvl(CURRENT_ADDRESS2,' ')||'<br>' || " + |
|||
// " nvl(CURRENT_ADDRESS3,' ')||'-' || CURRENT_PIN PERM_ADDR, " + |
|||
// " " + |
|||
// " CASE WHEN BIRTH_PLACE !=1 THEN " + |
|||
// " BIRTH_PLACE||' '||PLACE_OF_BIRTH_ADD1||' '||PLACE_OF_BIRTH_ADD2||' '||PLACE_OF_BIRTH_ADD3||' '||PLACE_OF_BIRTH_PIN " + |
|||
// " ELSE " + |
|||
// " (SELECT HOSPITAL_NAME||chr(13) ||HOSPITAL_ADDRESS1||' '||HOSPITAL_ADDRESS2||' ' ||HOSPITAL_ADDRESS3||' '||HOSPITAL_PIN " + |
|||
// " FROM TBL_HOSPITAL H WHERE H.HOSPITAL_ID=X.HOSPITAL_ID) END PLACE_BIRTH ,'COC' COC " + |
|||
// " from TBL_BIRTH_DETAILS X where registration_number= ? and " + |
|||
// " zone_id between 54 and 68 and child_name is null "; |
|||
|
|||
// try { |
|||
// System.out.println("check 12"); |
|||
// List<Map<String, Object>> newResults = newJdbc.queryForList(newSql, regNo); |
|||
// System.out.println("check 11"); |
|||
// // System.out.println("mob no.."+newResults.get("FATH_MOB_NO")+"\n"+newResults.get("MOTH_MOB_NO")+"\nsize:"+newResults.size()); |
|||
// if (!newResults.isEmpty()) { |
|||
// System.out.println("check 1"); |
|||
// String father = (newResults.get(0).get("FATH_MOB_NO") != null && !newResults.get(0).get("FATH_MOB_NO").toString().trim().isEmpty()) |
|||
// ? newResults.get(0).get("FATH_MOB_NO").toString().trim() |
|||
// : ""; |
|||
// String mother = (newResults.get(0).get("MOTH_MOB_NO") != null && !newResults.get(0).get("MOTH_MOB_NO").toString().trim().isEmpty()) |
|||
// ? newResults.get(0).get("MOTH_MOB_NO").toString().trim() |
|||
// : ""; |
|||
|
|||
// if (mobile.equalsIgnoreCase(father) || mobile.equalsIgnoreCase(mother) || father.isEmpty() || mother.isEmpty()) { |
|||
// result.put("Status", "Sucess"); |
|||
// result.put("Status Code", 200); |
|||
// result.put("Message", "Child Data fetched successfully"); |
|||
// result.put("Data", newResults); |
|||
// response.put("Response", result); |
|||
// return response; |
|||
// } else { |
|||
// result.put("Message", "Kindly check through your registered mobile number"); |
|||
// response.put("Response", result); |
|||
// return response; |
|||
// } |
|||
|
|||
// } |
|||
// List<Map<String, Object>> oldResults = oldJdbc.queryForList(oldSql, regNo); |
|||
// // List<Map<String, Object>> oldResults = oldJdbc.queryForList(oldSql); |
|||
// if (!oldResults.isEmpty()) { |
|||
// result.put("Status", "Sucess"); |
|||
// result.put("Status Code", 200); |
|||
// result.put("Message", "Child Data fetched successfully"); |
|||
// result.put("Data", oldResults); |
|||
// response.put("Response", result); |
|||
// return response; |
|||
// } |
|||
// if (newResults.isEmpty() && oldResults.isEmpty()) { |
|||
// result.put("Status", "Not Found"); |
|||
// result.put("Message", "Child Data Not Found"); |
|||
// result.put("Status Code", 404); |
|||
// response.put("Response", result); |
|||
// return response; |
|||
// } |
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// result.put("Status", "Error"); |
|||
// result.put("Message", "Error in fetching Child Data :" + e); |
|||
// result.put("Status Code", 500); |
|||
// response.put("Response", result); |
|||
// } |
|||
// return response; |
|||
// } |
|||
|
|||
// public Map<String, Object> getDetailsByMobNo(String mobile) { |
|||
// JdbcTemplate newJdbc = new JdbcTemplate(newBirthDataSource); |
|||
// JdbcTemplate oldJdbc = new JdbcTemplate(oldBirthDataSource); |
|||
// Map<String, Object> response = new HashMap<>(); |
|||
// Map<String, Object> result = new HashMap<>(); |
|||
// if (mobile.isEmpty() || mobile == null) { |
|||
// result.put("Message", "Please provide Registration Number"); |
|||
// response.put("Response", result); |
|||
// return response; |
|||
// } |
|||
// String newSql = "Select case when ceil (months_between(sysdate,date_of_birth)/12)>=5 then 1 else 0 end age_5," + |
|||
// " (select zone_code||'-'||zone_name from tbl_zone z where z.zone_id=x.zone_id) zone_name, " + |
|||
// " (select division_name from tbl_division d where d.divison_id=x.divison_id) division_name, " + |
|||
// " to_char(DATE_OF_BIRTH,'dd/mm/yyyy') DATE_OF_BIRTH , TO_CHAR(CREATED_DATE,'DD/MM/RRRR') CREATED_DATE, NVL(SEX,' ') SEX ," + |
|||
// " nvl(CHILD_NAME,' ') CHILD_NAME , nvl(FATHER_NAME,' ') FATHER_NAME , nvl(MOTHER_NAME,' ') MOTHER_NAME, nvl(FATH_MOB_NO, ' ') FATH_MOB_NO, nvl(MOTH_MOB_NO, ' ') MOTH_MOB_NO, " + |
|||
// " nvl(X.PERMANENT_ADDRESS1,' ') ||' '|| nvl(X.PERMANENT_ADDRESS2,' ') ||' '|| " + |
|||
// " case when nvl(X.PERMANENT_ADDRESS3,'NULL') not like 'NULL%' then X.PERMANENT_ADDRESS3 else ' ' end ||' '|| replace( " + |
|||
// " (CASE WHEN trim(X.PERMTBLDGNO) IS NOT NULL THEN X.PERMTBLDGNO ||', ' ELSE ' ' END || " + |
|||
// " CASE WHEN trim(X.PERMTHOUSENO) IS NOT NULL THEN X.PERMTHOUSENO ||', ' ELSE ' 'END || " + |
|||
// " CASE WHEN INSTR(X.PERMTADDR1,'_')>=0 THEN SUBSTR(X.PERMTADDR1,1,INSTR(X.PERMTADDR1,'_')-1)||', ' ELSE X.PERMTADDR1||', ' END|| " + |
|||
// " CASE WHEN nvl(X.PERMTVLG,'NL') not in ('NL','NULL_NULL') THEN X.PERMTVLG ||', ' ELSE '' END || " + |
|||
// " CASE WHEN INSTR(X.PERMTADDR1,'_')>=0 THEN SUBSTR(X.PERMTADDR1,INSTR(X.PERMTADDR1,'_')+1)||', ' ELSE X.PERMTADDR1||', ' END || " + |
|||
// " CASE WHEN INSTR(X.PERMTSUBDIST,'_')>0 THEN SUBSTR(X.PERMTSUBDIST,1,INSTR(X.PERMTSUBDIST,'_')-1) ELSE X.PERMTSUBDIST END ||', '|| " + |
|||
// " CASE WHEN INSTR(X.PERMTDIST,'_')>0 THEN SUBSTR(X.PERMTDIST,1,INSTR(X.PERMTDIST,'_')-1) ELSE X.PERMTDIST END ||', '|| " + |
|||
// " CASE WHEN X.PERMTSTATE IS NOT NULL THEN X.PERMTSTATE ELSE ' ' END || " + |
|||
// " CASE WHEN TO_CHAR(X.PERMTPIN) IS NOT NULL THEN '-'||X.PERMTPIN ||' ' ELSE ' 'END),', ', ', ') || " + |
|||
// " case nvl(X.PERMANENT_PIN,'0') when '0' then ' ' else ' '||X.PERMANENT_PIN end PERM_ADDR, " + |
|||
// " " + |
|||
// " CASE WHEN X.PARENTBLDGNO IS NOT NULL THEN X.PARENTBLDGNO||', ' ELSE ' ' END || " + |
|||
// " CASE WHEN X.PARENTHOUSENO IS NOT NULL THEN X.PARENTHOUSENO||', ' ELSE ' ' END || " + |
|||
// " CASE WHEN nvl(X.PARENTADDRESS,'_') not in ('_','NULL_NULL') THEN nvl(substr(X.PARENTADDRESS,1,instr(X.PARENTADDRESS,'_')-1),' ') ||' , ' ELSE ' ' END || " + |
|||
// " CASE WHEN X.PARENTVLG IS NOT NULL THEN X.PARENTVLG||', ' ELSE ' ' END || " + |
|||
// " CASE WHEN nvl(X.PARENTADDRESS,'_') not in ('_','NULL_NULL') THEN nvl(substr(X.PARENTADDRESS,instr(X.PARENTADDRESS,'_')+1),' ') ||' , ' ELSE ' ' END || " + |
|||
// " CASE WHEN INSTR(X.PARENTSUBDIST,'_') >0 THEN SUBSTR(X.PARENTSUBDIST,1,INSTR(X.PARENTSUBDIST,'_')-1 ) ELSE X.PARENTSUBDIST END ||', '||" + |
|||
// " CASE WHEN INSTR(X.PARENTDIST,'_') >0 THEN SUBSTR(X.PARENTDIST,1,INSTR(X.PARENTDIST,'_')-1 ) ELSE X.PARENTDIST END ||', '|| " + |
|||
// " CASE WHEN X.PARENTSTATE IS NOT NULL AND X.PARENTSTATE IN ('1','2') THEN X.PARENTSTATE ELSE X.PARENTSTATE END || " + |
|||
// " nvl(X.CURRENT_ADDRESS1,' ') ||' '||nvl(X.CURRENT_ADDRESS2,' ') ||' '||nvl(X.CURRENT_ADDRESS3,' ') ||' '|| nvl(X.cnt_name,' ') ||' '|| " + |
|||
// " CASE WHEN PARENTPIN IS NOT NULL THEN '- '|| PARENTPIN ELSE ' ' END currentAddress ," + |
|||
// " " + |
|||
// " " + |
|||
// " CASE WHEN BIRTH_PLACE !=1 THEN " + |
|||
// " BIRTH_PLACE||' '||PLACE_OF_BIRTH_ADD1||' '||PLACE_OF_BIRTH_ADD2||' '||PLACE_OF_BIRTH_ADD3||' '||PLACE_OF_BIRTH_PIN " + |
|||
// " ELSE " + |
|||
// " (SELECT HOSPITAL_NAME||chr(13) ||HOSPITAL_ADDRESS1||' '||HOSPITAL_ADDRESS2||' ' ||HOSPITAL_ADDRESS3||' '||HOSPITAL_PIN " + |
|||
// " FROM TBL_HOSPITAL H WHERE H.HOSPITAL_ID=X.HOSPITAL_ID) END PLACE_BIRTH ,'COC' COC " + |
|||
// " from TBL_BIRTH_DETAILS X where child_name is null and (FATH_MOB_NO= ? OR MOTH_MOB_NO = ?) " + |
|||
// " and zone_id between 501 and 515 "; |
|||
// try { |
|||
// List<Map<String, Object>> newResults = newJdbc.queryForList(newSql, mobile, mobile); |
|||
// if (!newResults.isEmpty()) { |
|||
// result.put("Status", "Sucess"); |
|||
// result.put("Status Code", 200); |
|||
// result.put("Message", "Child Data fetched successfully"); |
|||
// result.put("Data", newResults); |
|||
// response.put("Response", result); |
|||
// } else { |
|||
// result.put("Status", "Not Found"); |
|||
// result.put("Message", "Child Data Not Found"); |
|||
// result.put("Status Code", 404); |
|||
// response.put("Response", result); |
|||
// } |
|||
// } catch (DataAccessException e) { |
|||
// e.printStackTrace(); |
|||
// result.put("Status", "Error"); |
|||
// result.put("Message", "Error in fetching Child Data :" + e); |
|||
// result.put("Status Code", 500); |
|||
// response.put("Response", result); |
|||
// } |
|||
// return response; |
|||
// } |
|||
|
|||
|
|||
|
|||
// // public String saveChildNameInclusion(Map<String, String> formFields, |
|||
// // Map<String, MultipartFile> files) throws IOException { |
|||
// // |
|||
// // JdbcTemplate newJdbc = new JdbcTemplate(newBirthDataSource); |
|||
// // |
|||
// // // 1. Get sequence values |
|||
// // Map<String, Object> seqData = newJdbc.queryForMap( |
|||
// // "SELECT birth_death_tn.file_seq.NEXTVAL AS stg_id, birth_death_tn.id.NEXTVAL AS id FROM dual" |
|||
// // ); |
|||
// // String stagId = seqData.get("stg_id").toString(); |
|||
// // String sId = seqData.get("id").toString(); |
|||
// // |
|||
// // // 2. Handle file uploads |
|||
// // if (files != null) { |
|||
// // for (Map.Entry<String, MultipartFile> entry : files.entrySet()) { |
|||
// // MultipartFile file = entry.getValue(); |
|||
// // if (!file.isEmpty()) { |
|||
// // if (file.getSize() > MAX_FILE_SIZE) { |
|||
// // throw new IOException("File size exceeds 4MB: " + entry.getKey()); |
|||
// // } |
|||
// // String originalFileName = file.getOriginalFilename(); |
|||
// // String ext = originalFileName.substring(originalFileName.lastIndexOf(".") + 1).toLowerCase(); |
|||
// // if (!ext.equals("jpg") && !ext.equals("jpeg") && !ext.equals("pdf")) { |
|||
// // throw new IOException("Invalid file type for: " + entry.getKey()); |
|||
// // } |
|||
// // String newFileName = stagId + "_" + originalFileName; |
|||
// // File dest = new File(FILE_PATH, newFileName); |
|||
// // file.transferTo(dest); |
|||
// // formFields.put(entry.getKey(), newFileName); |
|||
// // } |
|||
// // } |
|||
// // } |
|||
// // |
|||
// // // 3. Insert into main table |
|||
// // String insertCtzn = """ |
|||
// // INSERT INTO birth_death_tn.tbl_birth_death_corr_ctzn |
|||
// // (id, reg_no, isBD, txt_mob, s_user_id, cr_date, ack_no, status, rd_birth_corr) |
|||
// // VALUES (?, ?, ?, ?, ?, SYSDATE, NULL, 'P', ?) |
|||
// // """; |
|||
// // newJdbc.update(insertCtzn, |
|||
// // sId, |
|||
// // formFields.get("reg_no"), |
|||
// // formFields.get("isBD"), |
|||
// // formFields.get("txt_mob"), |
|||
// // "0", |
|||
// // formFields.get("rd_birth_corr") |
|||
// // ); |
|||
// // |
|||
// // // 4. Insert into birth correction table |
|||
// // String insertBirth = """ |
|||
// // INSERT INTO birth_death_tn.tbl_birth_corr_fle |
|||
// // (id, fle_par_dcl, fle_par_id, fle_afft_ltr, fle_dob, m_child) |
|||
// // VALUES (?, ?, ?, ?, ?, ?) |
|||
// // """; |
|||
// // newJdbc.update(insertBirth, |
|||
// // sId, |
|||
// // formFields.get("fle_par_dcl"), |
|||
// // formFields.get("fle_par_id"), |
|||
// // formFields.get("fle_afft_ltr"), |
|||
// // formFields.get("fle_dob"), |
|||
// // formFields.get("m_child") |
|||
// // ); |
|||
// // |
|||
// // // 5. Generate and update acknowledgement number |
|||
// // String ackNo = "P/" + formFields.get("isBD") + "/" + sId; |
|||
// // newJdbc.update( |
|||
// // "UPDATE birth_death_tn.tbl_birth_death_corr_ctzn SET ack_no=? WHERE id=?", |
|||
// // ackNo, sId |
|||
// // ); |
|||
// // |
|||
// // return ackNo; |
|||
// // } |
|||
|
|||
|
|||
|
|||
// // |
|||
// // public String saveChildNameInclusion(Map<String, String> formFields, |
|||
// // Map<String, MultipartFile> files) throws IOException { |
|||
// // |
|||
// // JdbcTemplate newJdbc = new JdbcTemplate(newBirthDataSource); |
|||
// // |
|||
// // // 1. Get sequence values |
|||
// // Map<String, Object> seqData = newJdbc.queryForMap( |
|||
// // "SELECT birth_death_tn.file_seq.NEXTVAL AS stg_id, birth_death_tn.id.NEXTVAL AS id FROM dual" |
|||
// // ); |
|||
// // String stagId = seqData.get("stg_id").toString(); |
|||
// // String sId = seqData.get("id").toString(); |
|||
// // |
|||
// // // 2. Folder mapping for each file field |
|||
// // Map<String, String> folderMapping = Map.of( |
|||
// // "fle_par_dcl", "parentDeclarations", |
|||
// // "fle_par_id", "parentIDs", |
|||
// // "fle_afft_ltr", "affidavitLetters", |
|||
// // "fle_dob", "dobProofs" |
|||
// // ); |
|||
// // |
|||
// // // 3. Handle file uploads |
|||
// // if (files != null) { |
|||
// // for (Map.Entry<String, MultipartFile> entry : files.entrySet()) { |
|||
// // MultipartFile file = entry.getValue(); |
|||
// // String fieldName = entry.getKey(); |
|||
// // |
|||
// // if (!file.isEmpty()) { |
|||
// // if (file.getSize() > MAX_FILE_SIZE) { |
|||
// // throw new IOException("File size exceeds 4MB: " + fieldName); |
|||
// // } |
|||
// // |
|||
// // String originalFileName = file.getOriginalFilename(); |
|||
// // String ext = originalFileName.substring(originalFileName.lastIndexOf(".") + 1).toLowerCase(); |
|||
// // if (!ext.equals("jpg") && !ext.equals("jpeg") && !ext.equals("pdf")) { |
|||
// // throw new IOException("Invalid file type for: " + fieldName); |
|||
// // } |
|||
// // |
|||
// // // Determine folder for the file |
|||
// // String folderName = folderMapping.getOrDefault(fieldName, "misc"); |
|||
// // String uploadDir = System.getProperty("user.dir") + "/uploads/childname/" + folderName; |
|||
// // Files.createDirectories(Paths.get(uploadDir)); |
|||
// // |
|||
// // // Create new file name |
|||
// // String newFileName = stagId + "_" + originalFileName; |
|||
// // Path filePath = Paths.get(uploadDir, newFileName); |
|||
// // |
|||
// // // Save file locally |
|||
// // Files.copy(file.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING); |
|||
// // |
|||
// // // Store relative path in DB |
|||
// // String relativePath = "/uploads/childname/" + folderName + "/" + newFileName; |
|||
// // formFields.put(fieldName, relativePath); |
|||
// // } |
|||
// // } |
|||
// // } |
|||
// // |
|||
// // // 4. Insert into main table |
|||
// //// String insertCtzn = """ |
|||
// //// INSERT INTO tbl_birth_death_corr_ctzn |
|||
// //// (id, reg_no, isbd, mob, s_user_id, cdate, ack_no, status, corr) |
|||
// //// VALUES (tbl_birth_death_corr_ctzn_seq.NEXTVAL, ?, ?, ?, ?, SYSDATE, NULL, 'P', ?) |
|||
// ////"""; |
|||
// //// |
|||
// //// newJdbc.update(insertCtzn, |
|||
// //// formFields.get("reg_no"), // reg_no |
|||
// //// formFields.get("isbd"), // isbd |
|||
// //// formFields.get("mob"), // mob |
|||
// //// "0", // s_user_id |
|||
// //// formFields.get("corr") // corr |
|||
// //// ); |
|||
// // |
|||
// // |
|||
// // |
|||
// // |
|||
// // // 5. Insert into birth correction table |
|||
// // String insertBirth = """ |
|||
// // INSERT INTO tbl_birth_corr_fle |
|||
// // (id, fle_par_dcl, fle_par_id, fle_afft_ltr, fle_dob, m_child) |
|||
// // VALUES (?, ?, ?, ?, ?, ?) |
|||
// // """; |
|||
// // newJdbc.update(insertBirth, |
|||
// // sId, |
|||
// // formFields.get("fle_par_dcl"), |
|||
// // formFields.get("fle_par_id"), |
|||
// // formFields.get("fle_afft_ltr"), |
|||
// // formFields.get("fle_dob"), |
|||
// // formFields.get("m_child") |
|||
// // ); |
|||
// // |
|||
// // // 6. Generate and update acknowledgement number |
|||
// // String ackNo = "P/" + formFields.get("isBD") + "/" + sId; |
|||
// // newJdbc.update( |
|||
// // "UPDATE birth_death_tn.tbl_birth_death_corr_ctzn SET ack_no=? WHERE id=?", |
|||
// // ackNo, sId |
|||
// // ); |
|||
// // |
|||
// // return ackNo; |
|||
// // } |
|||
|
|||
|
|||
|
|||
// } |
|||
@ -0,0 +1,789 @@ |
|||
// package com.gcc.restapiservices.birthanddeath.service; |
|||
|
|||
// import java.time.LocalDate; |
|||
// import java.time.ZoneId; |
|||
// import java.time.format.DateTimeFormatter; |
|||
// import java.util.ArrayList; |
|||
// import java.util.Comparator; |
|||
// import java.util.LinkedHashMap; |
|||
// 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.dao.EmptyResultDataAccessException; |
|||
// import org.springframework.http.HttpStatus; |
|||
// import org.springframework.http.ResponseEntity; |
|||
// import org.springframework.jdbc.core.JdbcTemplate; |
|||
// import org.springframework.stereotype.Service; |
|||
// import org.springframework.web.bind.annotation.GetMapping; |
|||
|
|||
// @Service |
|||
// public class DeathCertificateService { |
|||
|
|||
// private JdbcTemplate jdbcTemplate; |
|||
|
|||
// // MYSQL CONNECTION |
|||
// // @Autowired |
|||
// // public void setDataSource(@Qualifier("mysqlGccRestServicesDataSource") DataSource dataSource) { |
|||
// // this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
// // } |
|||
|
|||
// // ORACLE CONNECTION |
|||
// // @Autowired |
|||
// // public void setDataSource(@Qualifier("oracleDataSourceItCell") DataSource dataSource) { |
|||
// // this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
// // } |
|||
|
|||
// @Autowired |
|||
// @Qualifier("oracleBirthNewDataSourceItCell") |
|||
// private DataSource newBirthDataSource; |
|||
|
|||
// @Autowired |
|||
// @Qualifier("oracleBirthOldDataSourceItCell") |
|||
// private DataSource oldBirthDataSource; |
|||
|
|||
// // old local db |
|||
|
|||
// private static final String SELECT_FIELDS = """ |
|||
// regno, person_name, dod, gender, father_name, mother_name, english_url |
|||
// """; |
|||
|
|||
// public Map<String, Object> getByRegistrationNumber(String regNo) { |
|||
// String sql = "SELECT " + SELECT_FIELDS + " FROM death_certificates WHERE regno = ?"; |
|||
// return formatResult(jdbcTemplate.queryForMap(sql, regNo)); |
|||
// } |
|||
|
|||
// // records from live db field names and tables |
|||
|
|||
// private static final String DEATH_SELECT_FIELDS = """ |
|||
// REGISTRATION_NUMBER AS regno, DATE_OF_DEATH AS dod, SEX AS gender, |
|||
// FATHER_NAME AS father_name, MOTHER_NAME AS mother_name, PERSON_NAME AS person_name, '' AS english_url |
|||
// """; |
|||
|
|||
// private static final String eSign_CERTIFICATE_URL_PREFIX = "http://gccapp.chennaicorporation.gov.in/birth_death_tn/CORPBIRTHTAMIL/esign/"; |
|||
// private static final String CERTIFICATE_URL_PREFIX = "http://gccapp.chennaicorporation.gov.in/birth_death_tn/CORPBIRTHTAMIL/GccDeathCertAvail.jsp?RegNo="; |
|||
// private static final String OLD_CERTIFICATE_URL_PREFIX="https://chennaicorporation.gov.in/online-civic-services/deathCertificate.do?do=DeathCertificate®istrationNumber="; |
|||
|
|||
// private static final String CRS_CERTIFICATE_URL_PREFIX="https://chennaicorporation.gov.in/online-civic-services/deathCertificateCRS.do?do=DeathCertificate®istrationNumber="; |
|||
|
|||
|
|||
|
|||
// public Map<String, Object> getDeathByRegistrationNumber(String regNo) { |
|||
// JdbcTemplate newJdbc = new JdbcTemplate(newBirthDataSource); |
|||
// JdbcTemplate oldJdbc = new JdbcTemplate(oldBirthDataSource); |
|||
|
|||
// // Query new schema |
|||
// String newSql = """ |
|||
// SELECT |
|||
// dd.REGISTRATION_NUMBER AS regno, |
|||
// TO_CHAR(dd.DATE_OF_DEATH , 'DD-MM-YYYY') AS dod, |
|||
// TO_CHAR(dd.created_date , 'DD-MM-YYYY') AS created_date, |
|||
// dd.SEX AS gender, |
|||
// dd.FATHER_NAME AS father_name, |
|||
// dd.MOTHER_NAME AS mother_name, |
|||
// dd.PERSON_NAME AS person_name, |
|||
// CASE |
|||
// WHEN (dd.verified_date >= TO_DATE('2019-06-19', 'YYYY-MM-DD') |
|||
// OR dd.registration_date >= TO_DATE('2019-06-01', 'YYYY-MM-DD')) THEN 1 |
|||
// ELSE 0 |
|||
// END AS reg_val, |
|||
// NVL(bec.status, 'NA') AS status, |
|||
// bec.cert_file |
|||
// FROM tbl_death_details dd |
|||
// LEFT JOIN tbl_birth_esign_cert bec ON bec.reg_no = dd.REGISTRATION_NUMBER |
|||
// WHERE dd.ZONE_ID IN (501,502,503,504,505,506,507,508,509,510,511,512,513,514,515) |
|||
// AND dd.REGISTRATION_NUMBER = ? |
|||
// AND ROWNUM = 1 |
|||
// """; |
|||
|
|||
// List<Map<String, Object>> newResults = newJdbc.queryForList(newSql, regNo); |
|||
// if (!newResults.isEmpty()) { |
|||
// return formatResult(newResults.get(0)); |
|||
// } |
|||
|
|||
// // Query old schema if not found in new |
|||
// String oldSql = """ |
|||
// SELECT |
|||
// ddo.REGISTRATION_NUMBER AS regno, |
|||
// TO_CHAR(ddo.DATE_OF_DEATH, 'DD-MM-YYYY') AS dod, |
|||
// TO_CHAR(ddo.created_date , 'DD-MM-YYYY') AS created_date, |
|||
// ddo.SEX AS gender, |
|||
// ddo.FATHER_NAME AS father_name, |
|||
// ddo.MOTHER_NAME AS mother_name, |
|||
// ddo.PERSON_NAME AS person_name, |
|||
// CASE |
|||
// WHEN (ddo.verified_date < TO_DATE('2019-06-19', 'YYYY-MM-DD')) THEN 1 |
|||
// ELSE 0 |
|||
// END AS reg_val, |
|||
// NVL(beco.status, 'NA') AS status, |
|||
// beco.cert_file |
|||
// FROM tbl_death_details ddo |
|||
// LEFT JOIN tbl_birth_esign_cert beco |
|||
// ON (beco.reg_no = ddo.REGISTRATION_NUMBER |
|||
// OR beco.reg_no = 'GCC_D_' || ddo.REGISTRATION_NUMBER) |
|||
// WHERE ddo.REGISTRATION_NUMBER = ? |
|||
// AND ROWNUM = 1 |
|||
// """; |
|||
|
|||
// List<Map<String, Object>> oldResults = oldJdbc.queryForList(oldSql, regNo); |
|||
// if (!oldResults.isEmpty()) { |
|||
// return formatResult(oldResults.get(0)); |
|||
// } |
|||
|
|||
// // return Map.of("status", "not_found", "message", "No record found for the |
|||
// // given registration number"); |
|||
|
|||
// Map<String, Object> notFound = new LinkedHashMap<>(); |
|||
// notFound.put("status", "not_found"); |
|||
// notFound.put("message", |
|||
// "No record found for the given registration number.Please ensure registration number is exactly as on the certificate."); |
|||
// notFound.put("status_code", 404); |
|||
// return notFound; |
|||
// } |
|||
|
|||
// // |
|||
|
|||
// // public List<Map<String, Object>> getDeathByMobile(String mobile) { |
|||
// // String sql = "SELECT " + DEATH_SELECT_FIELDS + |
|||
// // " FROM tbl_death_details WHERE FATH_MOB_NO = ? OR MOTH_MOB_NO = ? " ; |
|||
// // List<Map<String, Object>> results = jdbcTemplate.queryForList(sql, mobile, mobile); |
|||
// // return results.stream().map(this::formatResult).toList(); |
|||
// // } |
|||
|
|||
// public List<Map<String, Object>> getByMobile(String mobile) { |
|||
// JdbcTemplate newJdbc = new JdbcTemplate(newBirthDataSource); |
|||
// String sql = """ |
|||
// SELECT |
|||
// dd.REGISTRATION_NUMBER AS regno, |
|||
// TO_CHAR(dd.DATE_OF_DEATH , 'DD-MM-YYYY') AS dod, |
|||
// TO_CHAR(dd.created_date , 'DD-MM-YYYY') AS created_date, |
|||
// dd.SEX AS gender, |
|||
// dd.FATHER_NAME AS father_name, |
|||
// dd.MOTHER_NAME AS mother_name, |
|||
// dd.PERSON_NAME AS person_name, |
|||
// CASE |
|||
// WHEN (dd.verified_date >= TO_DATE('2019-06-19', 'YYYY-MM-DD') |
|||
// OR dd.registration_date >= TO_DATE('2019-06-01', 'YYYY-MM-DD')) THEN 1 |
|||
// ELSE 0 |
|||
// END AS reg_val, |
|||
// NVL(bec.status, 'NA') AS status, |
|||
// bec.cert_file |
|||
// FROM tbl_death_details dd |
|||
// LEFT JOIN tbl_birth_esign_cert bec ON bec.reg_no = dd.REGISTRATION_NUMBER |
|||
// WHERE dd.ZONE_ID IN (501,502,503,504,505,506,507,508,509,510,511,512,513,514,515) |
|||
// AND dd.FATH_MOB_NO = ? OR dd.MOTH_MOB_NO = ? |
|||
// """; |
|||
|
|||
// List<Map<String, Object>> results = newJdbc.queryForList(sql, mobile, mobile); |
|||
// return results.stream().map(this::formatResult).toList(); |
|||
// } |
|||
|
|||
|
|||
|
|||
// public Map<String, Object> getByDetailsOracleOldAndNewForDeath(String dod, String father, String mother, |
|||
// String person, String gender) { |
|||
|
|||
// JdbcTemplate newJdbc = new JdbcTemplate(newBirthDataSource); |
|||
// JdbcTemplate oldJdbc = new JdbcTemplate(oldBirthDataSource); |
|||
// // Prepare query and params for NEW data |
|||
// StringBuilder newSql = new StringBuilder(""" |
|||
// SELECT |
|||
// dd.REGISTRATION_NUMBER AS regno, |
|||
// dd.DATE_OF_DEATH AS dod, |
|||
// dd.SEX AS gender, |
|||
// dd.FATHER_NAME AS father_name, |
|||
// dd.MOTHER_NAME AS mother_name, |
|||
// dd.PERSON_NAME AS person_name, |
|||
// CASE |
|||
// WHEN (dd.verified_date >= TO_DATE('19-06-2019', 'DD-MM-YYYY') |
|||
// OR dd.registration_date >= TO_DATE('01-06-2019', 'DD-MM-YYYY')) THEN 1 |
|||
// ELSE 0 |
|||
// END AS reg_val, |
|||
// NVL(dec.status, 'NA') AS status, |
|||
// dec.cert_file |
|||
// FROM tbl_death_details dd |
|||
// LEFT JOIN tbl_birth_esign_cert dec ON dec.reg_no = dd.REGISTRATION_NUMBER |
|||
// WHERE dd.ZONE_ID IN (501,502,503,504,505,506,507,508,509,510,511,512,513,514,515) |
|||
// AND TRIM(UPPER(dd.FATHER_NAME)) = ? |
|||
// AND TRIM(UPPER(dd.MOTHER_NAME)) = ? |
|||
// AND TRIM(UPPER(dd.SEX)) = ? |
|||
// """); |
|||
|
|||
// List<Object> newParams = new ArrayList<>(); |
|||
// newParams.add(father.toUpperCase().trim()); |
|||
// newParams.add(mother.toUpperCase().trim()); |
|||
// newParams.add(gender.toUpperCase().trim()); |
|||
|
|||
// if (person != null && !person.trim().isEmpty()) { |
|||
// newSql.append(" AND TRIM(UPPER(dd.PERSON_NAME)) = ? "); |
|||
// newParams.add(person.toUpperCase().trim()); |
|||
// } |
|||
|
|||
// if (dod != null && !dod.trim().isEmpty()) { |
|||
// newSql.append(" AND TRUNC(dd.DATE_OF_DEATH) = TO_DATE(?, 'DD-MM-YYYY') "); |
|||
// newParams.add(dod.trim()); |
|||
// } |
|||
|
|||
// newSql.append(" AND ROWNUM = 1"); |
|||
|
|||
// // Try fetching from NEW data |
|||
// try { |
|||
// Map<String, Object> result = newJdbc.queryForMap(newSql.toString(), newParams.toArray()); |
|||
// return formatResult(result); |
|||
// } catch (EmptyResultDataAccessException e) { |
|||
// // Fallback to OLD data |
|||
// } |
|||
|
|||
// // Prepare query and params for OLD data |
|||
// StringBuilder oldSql = new StringBuilder(""" |
|||
// SELECT |
|||
// ddo.REGISTRATION_NUMBER AS regno, |
|||
// ddo.DATE_OF_DEATH AS dod, |
|||
// ddo.SEX AS gender, |
|||
// ddo.FATHER_NAME AS father_name, |
|||
// ddo.MOTHER_NAME AS mother_name, |
|||
// ddo.PERSON_NAME AS person_name, |
|||
// CASE |
|||
// WHEN (ddo.verified_date < TO_DATE('2019-06-19', 'YYYY-MM-DD')) THEN 1 |
|||
// ELSE 0 |
|||
// END AS reg_val, |
|||
// NVL(deco.status, 'NA') AS status, |
|||
// deco.cert_file |
|||
// FROM tbl_death_details ddo |
|||
// LEFT JOIN tbl_birth_esign_cert deco ON deco.reg_no = ddo.REGISTRATION_NUMBER |
|||
// WHERE TRIM(UPPER(ddo.FATHER_NAME)) = ? |
|||
// AND TRIM(UPPER(ddo.MOTHER_NAME)) = ? |
|||
// AND TRIM(UPPER(ddo.SEX)) = ? |
|||
// """); |
|||
|
|||
// List<Object> oldParams = new ArrayList<>(); |
|||
// oldParams.add(father.toUpperCase().trim()); |
|||
// oldParams.add(mother.toUpperCase().trim()); |
|||
// oldParams.add(gender.toUpperCase().trim()); |
|||
|
|||
// if (person != null && !person.trim().isEmpty()) { |
|||
// oldSql.append(" AND TRIM(UPPER(ddo.PERSON_NAME)) = ? "); |
|||
// oldParams.add(person.toUpperCase().trim()); |
|||
// } |
|||
|
|||
// if (dod != null && !dod.trim().isEmpty()) { |
|||
// oldSql.append(" AND TRUNC(ddo.DATE_OF_DEATH) = TO_DATE(?, 'DD-MM-YYYY') "); |
|||
// oldParams.add(dod.trim()); |
|||
// } |
|||
|
|||
// oldSql.append(" AND ROWNUM = 1"); |
|||
|
|||
// try { |
|||
// Map<String, Object> result = oldJdbc.queryForMap(oldSql.toString(), oldParams.toArray()); |
|||
// return formatResult(result); |
|||
// } catch (EmptyResultDataAccessException e) { |
|||
// return Map.of("status", "not_found", "message", |
|||
// "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// "status_code", 404); |
|||
// } catch (Exception e) { |
|||
// // Return "not_found" with message instead of throwing exception |
|||
// return Map.of("status", "not_found", "message", |
|||
// "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// "status_code", 404); |
|||
// } |
|||
// } |
|||
|
|||
|
|||
// // oracle |
|||
// private Map<String, Object> formatResult(Map<String, Object> row) { |
|||
// Map<String, Object> response = new LinkedHashMap<>(); |
|||
// response.put("status", "success"); |
|||
|
|||
// // System.out.println("row="+row); |
|||
|
|||
// Map<String, Object> deathresponse = new LinkedHashMap<>(); |
|||
// // birthresponse.put("name", row.get("child_name")); |
|||
|
|||
// deathresponse.put("regno", row.get("regno") != null ? row.get("regno").toString() : ""); |
|||
|
|||
// deathresponse.put("name", row.get("person_name") != null ? row.get("person_name").toString() : " "); |
|||
// deathresponse.put("dod", row.get("dod")!= null ? row.get("dod").toString() : "" ); |
|||
|
|||
// String gender = row.get("gender") != null ? row.get("gender").toString().trim().toUpperCase() : ""; |
|||
// if ("M".equals(gender)) { |
|||
// deathresponse.put("gender", "Male"); |
|||
// } else if ("F".equals(gender)) { |
|||
// deathresponse.put("gender", "FeMale"); |
|||
// } else if( "G".equals(gender)) { |
|||
// deathresponse.put("gender", "Transgender"); |
|||
// }else { |
|||
// deathresponse.put("gender", "other"); |
|||
// } |
|||
|
|||
// deathresponse.put("father_name", row.get("father_name")); |
|||
// deathresponse.put("mother_name", row.get("mother_name")); |
|||
// response.put("certificate_details", deathresponse); |
|||
|
|||
|
|||
// String regNo = row.get("regno") != null ? row.get("regno").toString() : ""; |
|||
// //System.out.println("regNo " + regNo); |
|||
|
|||
// Integer regVal = row.get("reg_val") instanceof Number ? ((Number) row.get("reg_val")).intValue() : 0; |
|||
// String status = String.valueOf(row.getOrDefault("status", "NA")); |
|||
// String certFile = row.get("cert_file") != null ? row.get("cert_file").toString() : ""; |
|||
// String createdDateStr = (row.get("created_date") != null) ? row.get("created_date").toString().trim() : ""; |
|||
|
|||
// //System.out.println("certFile=" + certFile); |
|||
|
|||
// // Build PDF URL if valid |
|||
// String pdfUrl = ""; |
|||
// if ("S".equalsIgnoreCase(status)) { |
|||
// pdfUrl = eSign_CERTIFICATE_URL_PREFIX + certFile; |
|||
// } |
|||
// else if ("P".equalsIgnoreCase(status)) { |
|||
// pdfUrl = ""; |
|||
// if (!createdDateStr.isEmpty()) { |
|||
// try { |
|||
// LocalDate createdDate = LocalDate.parse(createdDateStr, DateTimeFormatter.ofPattern("dd-MM-yyyy")); |
|||
// if (createdDate.isBefore(LocalDate.of(2012, 1, 1))) { |
|||
// pdfUrl = OLD_CERTIFICATE_URL_PREFIX + regNo; |
|||
// } else { |
|||
// pdfUrl = ""; // newer pending — no link |
|||
// } |
|||
// } catch (Exception e) { |
|||
// pdfUrl = ""; // fallback |
|||
// } |
|||
// } |
|||
// } |
|||
// else { |
|||
// if (!createdDateStr.isEmpty()) { |
|||
// try { |
|||
// LocalDate createdDate = LocalDate.parse(createdDateStr, DateTimeFormatter.ofPattern("dd-MM-yyyy")); |
|||
// if (createdDate.isAfter(LocalDate.of(2018, 1, 1))) { |
|||
// pdfUrl = OLD_CERTIFICATE_URL_PREFIX + regNo; |
|||
// } else { |
|||
// pdfUrl = OLD_CERTIFICATE_URL_PREFIX + regNo; |
|||
// } |
|||
// } catch (Exception e) { |
|||
// pdfUrl = ""; // fallback |
|||
// } |
|||
// } |
|||
// } |
|||
|
|||
// response.put("pdf_url", pdfUrl); |
|||
// if (pdfUrl == null || pdfUrl.isEmpty()) { |
|||
// response.put("message", "Awaiting for eSign"); |
|||
// } |
|||
// return response; |
|||
// } |
|||
|
|||
|
|||
|
|||
// // added by hariprasath |
|||
|
|||
// public Map<String, Object> getBynewDetailsOracleOldAndNewForDeath(String dod, String father, String mother, |
|||
// String person, String gender) { |
|||
|
|||
// JdbcTemplate newJdbc = new JdbcTemplate(newBirthDataSource); |
|||
// JdbcTemplate oldJdbc = new JdbcTemplate(oldBirthDataSource); |
|||
// // Prepare query and params for NEW data |
|||
// StringBuilder newSql = new StringBuilder(""" |
|||
// SELECT |
|||
// dd.REGISTRATION_NUMBER AS regno, |
|||
// TO_CHAR(dd.DATE_OF_DEATH , 'DD-MM-YYYY') AS dod, |
|||
// TO_CHAR(dd.created_date , 'DD-MM-YYYY') AS created_date, |
|||
// dd.SEX AS gender, |
|||
// dd.FATHER_NAME AS father_name, |
|||
// dd.MOTHER_NAME AS mother_name, |
|||
// dd.PERSON_NAME AS person_name, |
|||
// CASE |
|||
// WHEN (dd.verified_date >= TO_DATE('19-06-2019', 'DD-MM-YYYY') |
|||
// OR dd.registration_date >= TO_DATE('01-06-2019', 'DD-MM-YYYY')) THEN 1 |
|||
// ELSE 0 |
|||
// END AS reg_val, |
|||
// NVL(dec.status, 'NA') AS status, |
|||
// dec.cert_file |
|||
// FROM tbl_death_details dd |
|||
// LEFT JOIN tbl_birth_esign_cert dec ON dec.reg_no = dd.REGISTRATION_NUMBER |
|||
// WHERE dd.ZONE_ID IN (501,502,503,504,505,506,507,508,509,510,511,512,513,514,515) |
|||
// AND TRIM(UPPER(dd.SEX)) = ? |
|||
// AND UPPER(dd.FATHER_NAME) LIKE ? |
|||
// AND UPPER(dd.MOTHER_NAME) LIKE ? |
|||
// """); |
|||
|
|||
// List<Object> newParams = new ArrayList<>(); |
|||
// newParams.add(gender.toUpperCase().trim()); |
|||
// newParams.add("%" + father.toUpperCase().trim() + "%"); |
|||
// newParams.add("%" + mother.toUpperCase().trim() + "%"); |
|||
|
|||
// if (person != null && !person.trim().isEmpty()) { |
|||
// newSql.append(" AND UPPER(dd.PERSON_NAME) LIKE ? "); |
|||
// newParams.add("%" + person.toUpperCase().trim() + "%"); |
|||
// } |
|||
|
|||
// if (dod != null && !dod.trim().isEmpty()) { |
|||
// newSql.append(" AND dd.DATE_OF_DEATH = TO_DATE(?, 'DD-MM-YYYY') "); |
|||
// newParams.add(dod.trim()); |
|||
// } |
|||
|
|||
// // Try fetching from NEW data |
|||
// try { |
|||
// List<Map<String, Object>> result = newJdbc.queryForList(newSql.toString(), newParams.toArray()); |
|||
// if (!result.isEmpty()) { |
|||
// return formatResultnew(result); |
|||
// } |
|||
// } catch (EmptyResultDataAccessException e) { |
|||
// // Fallback to OLD data |
|||
// } |
|||
|
|||
// // Prepare query and params for OLD data |
|||
// StringBuilder oldSql = new StringBuilder(""" |
|||
// SELECT |
|||
// ddo.REGISTRATION_NUMBER AS regno, |
|||
// TO_CHAR(ddo.DATE_OF_DEATH , 'DD-MM-YYYY') AS dod, |
|||
// TO_CHAR(ddo.created_date , 'DD-MM-YYYY') AS created_date, |
|||
// ddo.FATHER_NAME AS father_name, |
|||
// ddo.MOTHER_NAME AS mother_name, |
|||
// ddo.PERSON_NAME AS person_name, |
|||
// CASE |
|||
// WHEN (ddo.verified_date < TO_DATE('2019-06-19', 'YYYY-MM-DD')) THEN 1 |
|||
// ELSE 0 |
|||
// END AS reg_val, |
|||
// NVL(deco.status, 'NA') AS status, |
|||
// deco.cert_file |
|||
// FROM tbl_death_details ddo |
|||
// LEFT JOIN tbl_birth_esign_cert deco |
|||
// ON (deco.reg_no = ddo.REGISTRATION_NUMBER |
|||
// OR deco.reg_no = 'GCC_D_' || ddo.REGISTRATION_NUMBER) |
|||
// WHERE TRIM(UPPER(ddo.SEX)) = ? |
|||
// AND UPPER(ddo.FATHER_NAME) LIKE ? |
|||
// AND UPPER(ddo.MOTHER_NAME) LIKE ? |
|||
// """); |
|||
|
|||
// List<Object> oldParams = new ArrayList<>(); |
|||
// oldParams.add(gender.toUpperCase().trim()); |
|||
// oldParams.add("%" + father.toUpperCase().trim() + "%"); |
|||
// oldParams.add("%" + mother.toUpperCase().trim() + "%"); |
|||
|
|||
// if (person != null && !person.trim().isEmpty()) { |
|||
// oldSql.append(" AND UPPER(ddo.PERSON_NAME) LIKE ? "); |
|||
// oldParams.add("%" + person.toUpperCase().trim() + "%"); |
|||
|
|||
// } |
|||
|
|||
// if (dod != null && !dod.trim().isEmpty()) { |
|||
// oldSql.append(" AND ddo.DATE_OF_DEATH = TO_DATE(?, 'DD-MM-YYYY') "); |
|||
// oldParams.add(dod.trim()); |
|||
// } |
|||
|
|||
// // oldSql.append(" AND ROWNUM = 1"); |
|||
|
|||
// try { |
|||
// List<Map<String, Object>> result = oldJdbc.queryForList(oldSql.toString(), oldParams.toArray()); |
|||
// if (!result.isEmpty()) { |
|||
// return formatResultnew(result); |
|||
// } |
|||
// } catch (EmptyResultDataAccessException e) { |
|||
// return Map.of("status", "not_found", "message", |
|||
// "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// "status_code", 404); |
|||
// } catch (Exception e) { |
|||
// // Return "not_found" with message instead of throwing exception |
|||
// return Map.of("status", "not_found", "message", |
|||
// "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// "status_code", 404); |
|||
// } |
|||
// return Map.of("status", "not_found", "message", |
|||
// "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// "status_code", 404); |
|||
// } |
|||
|
|||
|
|||
|
|||
// private Map<String, Object> formatResultnew(List<Map<String, Object>> rows) { |
|||
|
|||
// //System.out.println("row1="+rows); |
|||
|
|||
// if (rows == null || rows.isEmpty()) { |
|||
// return Map.of("status", "not_found", "message", |
|||
// "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// "status_code", 404); |
|||
// } |
|||
|
|||
// Map<String, Object> response = new LinkedHashMap<>(); |
|||
// response.put("status", "success"); |
|||
|
|||
// List<Map<String, Object>> certificateDetailsList = new ArrayList<>(); |
|||
|
|||
// for (Map<String, Object> row : rows) { |
|||
// Map<String, Object> deathresponse = new LinkedHashMap<>(); |
|||
|
|||
// deathresponse.put("regno", row.get("regno") != null ? row.get("regno").toString() : ""); |
|||
// deathresponse.put("name", row.get("person_name") != null ? row.get("person_name").toString() : " "); |
|||
// deathresponse.put("dod", row.get("dod")); |
|||
// // ---- Gender ---- |
|||
// String gender = row.get("gender") != null ? row.get("gender").toString().trim().toUpperCase() : ""; |
|||
// if ("M".equals(gender)) { |
|||
// deathresponse.put("gender", "Male"); |
|||
// } else if ("F".equals(gender)) { |
|||
// deathresponse.put("gender", "Female"); |
|||
// } else if( "G".equals(gender)) { |
|||
// deathresponse.put("gender", "Transgender"); |
|||
// }else { |
|||
// deathresponse.put("gender", "other"); |
|||
// } |
|||
|
|||
// deathresponse.put("father_name", row.get("father_name")); |
|||
// deathresponse.put("mother_name", row.get("mother_name")); |
|||
// deathresponse.put("status",row.get("status")); |
|||
|
|||
// String regNo = row.get("regno") != null ? row.get("regno").toString() : ""; |
|||
// //System.out.println("regNo " + regNo); |
|||
|
|||
// Integer regVal = row.get("reg_val") instanceof Number ? ((Number) row.get("reg_val")).intValue() : 0; |
|||
// String status = String.valueOf(row.getOrDefault("status", "NA")); |
|||
// String certFile = row.get("cert_file") != null ? row.get("cert_file").toString() : ""; |
|||
// String createdDateStr = (row.get("created_date") != null) ? row.get("created_date").toString().trim() : ""; |
|||
|
|||
// //System.out.println("certFile=" + certFile); |
|||
|
|||
// // Build PDF URL if valid |
|||
// String pdfUrl =""; |
|||
// if ("S".equalsIgnoreCase(status)) { |
|||
// pdfUrl = eSign_CERTIFICATE_URL_PREFIX + certFile; |
|||
// } |
|||
// else if ("P".equalsIgnoreCase(status)) { |
|||
|
|||
// if (!createdDateStr.isEmpty()) { |
|||
// try { |
|||
// LocalDate createdDate = LocalDate.parse(createdDateStr, DateTimeFormatter.ofPattern("dd-MM-yyyy")); |
|||
// if (createdDate.isBefore(LocalDate.of(2012, 1, 1))) { |
|||
// pdfUrl = OLD_CERTIFICATE_URL_PREFIX + regNo; |
|||
// } else { |
|||
// pdfUrl = ""; // newer pending — no link |
|||
// } |
|||
// } catch (Exception e) { |
|||
// pdfUrl = ""; // fallback |
|||
// } |
|||
// } |
|||
// }else { |
|||
|
|||
// if (!createdDateStr.isEmpty()) { |
|||
// try { |
|||
// LocalDate createdDate = LocalDate.parse(createdDateStr, DateTimeFormatter.ofPattern("dd-MM-yyyy")); |
|||
// if (createdDate.isAfter(LocalDate.of(2018, 1, 1))) { |
|||
// //pdfUrl = CRS_CERTIFICATE_URL_PREFIX + regNo; |
|||
// pdfUrl = OLD_CERTIFICATE_URL_PREFIX + regNo; |
|||
// } else { |
|||
// pdfUrl = OLD_CERTIFICATE_URL_PREFIX + regNo; |
|||
// } |
|||
// } catch (Exception e) { |
|||
// pdfUrl = ""; // fallback |
|||
// } |
|||
// } |
|||
|
|||
// } |
|||
|
|||
// deathresponse.put("pdf_url", pdfUrl); |
|||
|
|||
// // add this row to the list |
|||
// certificateDetailsList.add(deathresponse); |
|||
// } |
|||
|
|||
// response.put("certificate_details", certificateDetailsList); |
|||
// return response; |
|||
// } |
|||
|
|||
|
|||
|
|||
// // added by yogi for web |
|||
|
|||
// public Map<String, Object> getBynewDetailsOracleOldAndNewForWeb( |
|||
// String dod, String father, String mother, String person, String gender) { |
|||
|
|||
// JdbcTemplate newJdbc = new JdbcTemplate(newBirthDataSource); |
|||
// JdbcTemplate oldJdbc = new JdbcTemplate(oldBirthDataSource); |
|||
|
|||
// // Normalize inputs |
|||
// String upperFather = (father != null && !father.isBlank()) ? father.trim().toUpperCase() : ""; |
|||
// String upperMother = (mother != null && !mother.isBlank()) ? mother.trim().toUpperCase() : ""; |
|||
// String upperGender = (gender != null && !gender.isBlank()) ? gender.trim().toUpperCase() : ""; |
|||
// String upperPerson = (person != null && !person.isBlank()) ? person.trim().toUpperCase() : ""; |
|||
// String trimmedDod = (dod != null && !dod.trim().isEmpty()) ? dod.trim() : null; |
|||
|
|||
// // ---------- Combined result list ---------- |
|||
// List<Map<String, Object>> combinedResults = new ArrayList<>(); |
|||
// // ---------- NEW ---------- |
|||
// StringBuilder newSql = new StringBuilder(""" |
|||
// SELECT |
|||
// dd.REGISTRATION_NUMBER AS regno, |
|||
// TO_CHAR(dd.DATE_OF_DEATH, 'DD-MM-YYYY') AS dod, |
|||
// TO_CHAR(dd.created_date , 'DD-MM-YYYY') AS created_date, |
|||
// dd.SEX AS gender, |
|||
// NVL(dd.FATHER_NAME,' ') AS father_name, |
|||
// NVL(dd.MOTHER_NAME,' ') AS mother_name, |
|||
// NVL(dd.PERSON_NAME,' ') AS person_name, |
|||
// CASE |
|||
// WHEN (dd.verified_date >= TO_DATE('19-06-2019', 'DD-MM-YYYY') |
|||
// OR dd.registration_date >= TO_DATE('01-06-2019', 'DD-MM-YYYY') |
|||
// OR dd.created_date >= TO_DATE('01-06-2019', 'DD-MM-YYYY')) |
|||
// THEN 1 ELSE 0 |
|||
// END AS reg_val, |
|||
// NVL(dec.status,'NA') AS status, |
|||
// dec.cert_file |
|||
// FROM tbl_death_details dd |
|||
// LEFT JOIN tbl_birth_esign_cert dec |
|||
// ON dec.reg_no = dd.REGISTRATION_NUMBER |
|||
// WHERE dd.ZONE_ID IN (501,502,503,504,505,506,507,508,509,510,511,512,513,514,515) |
|||
// AND TRIM(UPPER(dd.SEX)) = ? |
|||
// """); |
|||
|
|||
// List<Object> params = new ArrayList<>(); |
|||
// params.add(upperGender); |
|||
|
|||
// if (!upperFather.isEmpty()) { |
|||
// newSql.append(" AND UPPER(dd.FATHER_NAME) LIKE ? "); |
|||
// params.add("%" + upperFather + "%"); |
|||
// } |
|||
// if (!upperMother.isEmpty()) { |
|||
// newSql.append(" AND UPPER(dd.MOTHER_NAME) LIKE ? "); |
|||
// params.add("%" + upperMother + "%"); |
|||
// } |
|||
// if (!upperPerson.isEmpty()) { |
|||
// newSql.append(" AND UPPER(dd.PERSON_NAME) LIKE ? "); |
|||
// params.add("%" + upperPerson + "%"); |
|||
// } |
|||
// if (trimmedDod != null) { |
|||
// newSql.append(" AND TRUNC(dd.DATE_OF_DEATH) = TO_DATE(?, 'DD-MM-YYYY') "); |
|||
// params.add(trimmedDod); |
|||
// } |
|||
|
|||
// newSql.append(" ORDER BY dd.PERSON_NAME "); |
|||
|
|||
// try { |
|||
// //System.out.println("New SQL => " + newSql); |
|||
// //System.out.println("Params => " + params); |
|||
// List<Map<String, Object>> newresult = newJdbc.queryForList(newSql.toString(), params.toArray()); |
|||
// if (!newresult.isEmpty()) { |
|||
// // return formatResultnew(result); |
|||
// combinedResults.addAll(newresult); |
|||
// } |
|||
// } catch (Exception e) { |
|||
// throw new RuntimeException("Error querying new death table", e); |
|||
// } |
|||
|
|||
// // ---------- OLD ---------- |
|||
// StringBuilder oldSql = new StringBuilder(""" |
|||
// SELECT |
|||
// bdo.REGISTRATION_NUMBER AS regno, |
|||
// TO_CHAR(bdo.DATE_OF_DEATH, 'DD-MM-YYYY') AS dod, |
|||
// TO_CHAR(bdo.created_date , 'DD-MM-YYYY') AS created_date, |
|||
// bdo.SEX AS gender, |
|||
// NVL(bdo.FATHER_NAME,' ') AS father_name, |
|||
// NVL(bdo.MOTHER_NAME,' ') AS mother_name, |
|||
// NVL(bdo.PERSON_NAME,' ') AS person_name, |
|||
// CASE |
|||
// WHEN bdo.verified_date < TO_DATE('19-06-2019', 'DD-MM-YYYY') |
|||
// THEN 1 ELSE 0 |
|||
// END AS reg_val, |
|||
// NVL(beco.status,'NA') AS status, |
|||
// beco.cert_file, |
|||
// Z.ZONE_CODE || '-' || Z.ZONE_NAME AS zone_name, |
|||
// Y.DIVISION_NAME AS division_name, |
|||
// bdo.hospital_id |
|||
// FROM TBL_DEATH_DETAILS bdo |
|||
// JOIN TBL_ZONE Z ON bdo.ZONE_ID = Z.ZONE_ID |
|||
// JOIN TBL_DIVISION Y ON bdo.DIVISON_ID = Y.DIVISON_ID |
|||
// LEFT JOIN TBL_BIRTH_ESIGN_CERT beco |
|||
// ON (beco.reg_no = bdo.REGISTRATION_NUMBER |
|||
// OR beco.reg_no = 'GCC_D_' || bdo.REGISTRATION_NUMBER) |
|||
// WHERE TRIM(UPPER(bdo.SEX)) = ? |
|||
// """); |
|||
|
|||
// List<Object> oldParams = new ArrayList<>(); |
|||
// oldParams.add(upperGender); |
|||
|
|||
// if (!upperFather.isEmpty()) { |
|||
// oldSql.append(" AND UPPER(bdo.FATHER_NAME) LIKE ? "); |
|||
// oldParams.add("%" + upperFather + "%"); |
|||
// } |
|||
// if (!upperMother.isEmpty()) { |
|||
// oldSql.append(" AND UPPER(bdo.MOTHER_NAME) LIKE ? "); |
|||
// oldParams.add("%" + upperMother + "%"); |
|||
// } |
|||
// if (!upperPerson.isEmpty()) { |
|||
// oldSql.append(" AND UPPER(bdo.PERSON_NAME) LIKE ? "); |
|||
// oldParams.add("%" + upperPerson + "%"); |
|||
// } |
|||
// if (trimmedDod != null) { |
|||
// oldSql.append(" AND bdo.DATE_OF_DEATH = TO_DATE(?, 'DD-MM-YYYY') "); |
|||
// oldParams.add(trimmedDod); |
|||
// } |
|||
|
|||
// oldSql.append(" ORDER BY bdo.PERSON_NAME "); |
|||
|
|||
// try { |
|||
// //System.out.println("Old SQL => " + oldSql); |
|||
// //System.out.println("Params => " + oldParams); |
|||
// List<Map<String, Object>> oldResult = oldJdbc.queryForList(oldSql.toString(), oldParams.toArray()); |
|||
// if (!oldResult.isEmpty()) { |
|||
// //return formatResultnew(oldResult); |
|||
// combinedResults.addAll(oldResult); |
|||
// } |
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// } |
|||
|
|||
// if(!combinedResults.isEmpty()){ |
|||
// combinedResults.sort(Comparator.comparing(m -> String.valueOf(m.get("person_name")))); |
|||
// return formatResultnew(combinedResults); |
|||
// } |
|||
|
|||
// return Map.of( |
|||
// "status", "not_found", |
|||
// "message", "No matching death certificate found. Please ensure names and date are exactly as on the certificate.", |
|||
// "status_code", 404 |
|||
// ); |
|||
// } |
|||
|
|||
|
|||
// public List<Map<String, Object>> getOldDeathDetails(String dod, String gender) { |
|||
// JdbcTemplate oldJdbc = new JdbcTemplate(oldBirthDataSource); |
|||
|
|||
// String sql = """ |
|||
// SELECT |
|||
// Z.ZONE_CODE || '-' || Z.ZONE_NAME AS zone_name, |
|||
// Y.DIVISION_NAME AS division_name, |
|||
// bdo.hospital_id, |
|||
// TO_CHAR(bdo.DATE_OF_DEATH, 'yyyy-mm-dd') AS date_of_death, |
|||
// bdo.SEX AS sex, |
|||
// NVL(bdo.PERSON_NAME,' ') AS person_name, |
|||
// bdo.REGISTRATION_NUMBER AS regno, |
|||
// CASE |
|||
// WHEN bdo.verified_date < TO_DATE('19-06-2019', 'DD-MM-YYYY') THEN 1 |
|||
// ELSE 0 |
|||
// END AS reg_val, |
|||
// beco.status AS status, |
|||
// beco.cert_file |
|||
// FROM TBL_DEATH_DETAILS bdo |
|||
// JOIN TBL_ZONE Z ON bdo.ZONE_ID = Z.ZONE_ID |
|||
// JOIN TBL_DIVISION Y ON bdo.DIVISON_ID = Y.DIVISON_ID |
|||
// LEFT JOIN TBL_BIRTH_ESIGN_CERT beco |
|||
// ON (beco.reg_no = bdo.REGISTRATION_NUMBER |
|||
// OR beco.reg_no = 'GCC_D_' || bdo.REGISTRATION_NUMBER) |
|||
// WHERE TRIM(UPPER(bdo.SEX)) = ? |
|||
// AND TRUNC(bdo.DATE_OF_DEATH) = TO_DATE(?, 'DD-MM-YYYY') |
|||
// ORDER BY bdo.PERSON_NAME |
|||
// """; |
|||
|
|||
// //System.out.println("Executing SQL:\n" + sql); |
|||
// //System.out.println("Parameters - gender: " + gender + ", dod: " + dod); |
|||
|
|||
// // Pass parameters to query |
|||
// List<Map<String, Object>> result = oldJdbc.queryForList(sql, gender.toUpperCase(), dod); |
|||
|
|||
// //System.out.println("Result size: " + result.size()); |
|||
|
|||
// return result; |
|||
// } |
|||
|
|||
|
|||
// } |
|||
@ -0,0 +1,244 @@ |
|||
package com.gcc.restapiservices.cdwaste.controller; |
|||
|
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Random; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
import com.gcc.restapiservices.cdwaste.service.RequestService; |
|||
import com.gcc.restapiservices.cdwaste.util.ApiResponseUtil; |
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
|
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/dumpregistration/api") |
|||
|
|||
public class ApiController { |
|||
|
|||
@Autowired |
|||
private RequestService requestService ; |
|||
|
|||
|
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
|
|||
|
|||
@PostMapping("/savedetails") |
|||
public ResponseEntity<?> saveWasteCollection( |
|||
@RequestParam("name") String name, |
|||
@RequestParam("mobileNumber") String mobileNumber, |
|||
@RequestParam("zone") String zone, |
|||
@RequestParam("ward") String ward, |
|||
@RequestParam("doorNumber") String doorNumber, |
|||
@RequestParam("streetName") String streetName, |
|||
@RequestParam("area") String area, |
|||
@RequestParam("city") String city, |
|||
@RequestParam("pincode") String pincode, |
|||
@RequestParam("wasteType") String wasteType, |
|||
@RequestParam("wasteQuantity") String wasteQuantity, |
|||
@RequestParam("vehicleType") String vehicleType, |
|||
@RequestParam(value = "dumpLocation", required = false,defaultValue = "100") String dumpLocation, |
|||
@RequestParam("dump") MultipartFile wasteImage) { |
|||
|
|||
try { |
|||
int waste_Type = Integer.parseInt(wasteType); |
|||
int waste_Quantity = Integer.parseInt(wasteQuantity); |
|||
int vehicle_Type = Integer.parseInt(vehicleType); |
|||
int dump_Location = Integer.parseInt(dumpLocation); |
|||
|
|||
|
|||
String refId = requestService.saveWasteCollection(name, mobileNumber, zone, ward, doorNumber, streetName, area, city, |
|||
pincode, waste_Type, waste_Quantity, vehicle_Type, dump_Location, wasteImage); |
|||
|
|||
if ("error".equalsIgnoreCase(refId)) { |
|||
return ApiResponseUtil.error("Something went wrong while saving", HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
Map<String, Object> data = new HashMap<>(); |
|||
data.put("referenceId", refId); |
|||
|
|||
return ApiResponseUtil.success(data, "Waste collection request saved successfully"); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ApiResponseUtil.error("Error saving data: " + e.getMessage(), HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
@GetMapping(value = "/sendOTP") |
|||
public String sendOtp(HttpServletRequest request, @RequestParam String mobile) { |
|||
|
|||
// Create an ObjectMapper instance |
|||
//ObjectMapper objectMapper = new ObjectMapper(); |
|||
|
|||
// Check if mobile number is already registered |
|||
//List<WasteRegistration> registrations = wasteregistrationrepo.findByMobileNo(mobile); |
|||
|
|||
// Create a response map |
|||
Map<String, Object> response = new HashMap<>(); |
|||
|
|||
// if (registrations.isEmpty()) { |
|||
// // If mobile number is not registered |
|||
// response.put("status", "NOT_REGISTERED"); |
|||
// response.put("mobile", mobile); // Return the mobile number |
|||
// try { |
|||
// return objectMapper.writeValueAsString(response); // Use the instance to convert map to JSON string |
|||
// } catch (Exception e) { |
|||
// // Handle JSON conversion error |
|||
// return "{\"status\": \"ERROR\", \"message\": \"Could not convert response to JSON.\"}"; |
|||
// } |
|||
// } |
|||
|
|||
|
|||
String MobileNo=mobile; |
|||
System.out.print("\n MobileNo---:"+mobile); |
|||
Random rand = new Random(); |
|||
int otp = rand.nextInt(90000) + 10000; |
|||
|
|||
// int otp= 22222; |
|||
System.out.print("\n otp---:"+otp); |
|||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy%20HH:mm"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
System.out.println(dtf.format(now)); |
|||
//String generatedToken = "Welcome to GCC! Your OTP for C%26D waste collectors Registration process is "+otp; |
|||
|
|||
//String generatedToken = "Welcome to GCC "+otp+" is your OTP for gcc QR System"; |
|||
|
|||
String generatedToken = "Welcome to GCC! Your OTP for C and D waste collectors Registration process is " + otp; |
|||
// String key="qxg4mklD"; |
|||
String key="pfTEYN6H"; |
|||
String urlString= appConfig.getGetOtpUrl()+"from=GCCCRP&key="+key+"&sender=GCCCRP&to="+MobileNo+"&body="+generatedToken+"&entityid=1401572690000011081&templateid=1407172967243483268"; |
|||
|
|||
|
|||
//String urlString = "https://tmegov.onex-aura.com/api/sms?from=GCCCRP&key=pfTEYN6H&sender=GCCCRP&to=9360777472&body=Welcome%20to%20GCC!%20Your%20OTP%20for%20C%26D%20waste%20collectors%20Registration%20process%20is%20"+otp+"&entityid=1401572690000011081&templateid=1407172959127552127"; |
|||
//String urlString= appConfig.getGetOtpUrl()+"from=GCCCRP&key="+key+"&sender=GCCCRP&to="+MobileNo+"&body="+generatedToken+"&entityid=1401572690000011081&templateid=1407168250479102852"; |
|||
// String urlString=appConfig.getGetOtpUrl()+"user=GCCtrans&authkey=92kOC1RBGBIws&sender=GCCCRP&mobile="+MobileNo+"&text="+generatedToken+"&rpt=1&summary=1&output=json&entityid=1401572690000011081&templateid=1407168250479102852"; |
|||
System.out.print("\n urlString---: "+urlString); |
|||
String bodyMessage = ""; |
|||
try { |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String Response = restTemplate.getForObject(urlString, String.class); |
|||
|
|||
// Using Jackson ObjectMapper to parse the response JSON |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
ObjectNode jsonResponse = (ObjectNode) objectMapper.readTree(Response); |
|||
|
|||
// Add mobileNo and otp to the response JSON |
|||
jsonResponse.put("MobileNo", MobileNo); |
|||
jsonResponse.put("otp", otp); |
|||
|
|||
// Convert the updated JSON object back to string |
|||
bodyMessage = jsonResponse.toString(); |
|||
// bodyMessage=Response; |
|||
System.out.println("\n bodyMessage"+bodyMessage); |
|||
|
|||
System.out.println("OTP sent successfully!"); |
|||
|
|||
} catch (Exception e) { |
|||
System.out.print("ERROR---: "+e); |
|||
bodyMessage = "Error"; |
|||
} |
|||
HttpSession session = request.getSession(); |
|||
session.setAttribute("otp", otp); |
|||
return bodyMessage; |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
@GetMapping(value = "/verifyOTP") |
|||
public String verifyOtp(HttpServletRequest request, @RequestParam String otp) { |
|||
HttpSession session = request.getSession(); |
|||
try { |
|||
Integer session_otp = (Integer) session.getAttribute("otp"); |
|||
System.out.println("session_otp---:" + session_otp); |
|||
Integer entered_otp = Integer.parseInt(otp); |
|||
|
|||
if (session_otp != null && session_otp.equals(entered_otp)) { |
|||
System.out.println("Entered OTP Correct"); |
|||
session.setAttribute("verifiedotp", "success"); |
|||
return "Success"; |
|||
} else { |
|||
System.out.println("Incorrect OTP. Please enter correct OTPs."); |
|||
session.setAttribute("verifiedotp", "error"); |
|||
return "Error"; |
|||
} |
|||
} catch (NumberFormatException e) { |
|||
System.out.println("Invalid OTP format: " + otp); |
|||
return "Error"; |
|||
} catch (Exception e) { |
|||
System.out.println("Error verifying OTP: " + e.getMessage()); |
|||
return "Error"; |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
// get the request details by mobile number |
|||
|
|||
@GetMapping("/requestlistbymobileno") |
|||
public ResponseEntity<?> getRequestDetailsByMobileNo(@RequestParam String mobileNo) { |
|||
try { |
|||
List<Map<String, Object>> responseList = requestService.getRequestDetailsList(mobileNo); |
|||
|
|||
if (responseList == null || responseList.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No requests found for this mobile number."); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(responseList, "Request list fetched successfully."); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ApiResponseUtil.error("Failed to fetch data: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
|
|||
// get the request details by ref-id |
|||
|
|||
@GetMapping("/requestlistbyrefid") |
|||
public ResponseEntity<?> getRequestDetailsByRefId(@RequestParam String refId) { |
|||
try { |
|||
List<Map<String, Object>> responseList = requestService.getRequestDetailsListByRefId(refId); |
|||
|
|||
if (responseList == null || responseList.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No requests found for this Ref ID."); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(responseList, "Request list fetched successfully."); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ApiResponseUtil.error("Failed to fetch data: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,157 @@ |
|||
package com.gcc.restapiservices.cdwaste.controller; |
|||
|
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import com.gcc.restapiservices.cdwaste.service.DropDownService; |
|||
import com.gcc.restapiservices.cdwaste.util.ApiResponseUtil; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/dropdown/api") |
|||
public class DropDownApiController { |
|||
|
|||
@Autowired |
|||
|
|||
private DropDownService dropDownService; |
|||
|
|||
@GetMapping("/wastetypes") |
|||
public ResponseEntity<?> getwastetypes() { |
|||
|
|||
List<Map<String, Object>> result = dropDownService.getwastetypes(); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
@GetMapping("/wastequantity") |
|||
public ResponseEntity<?> getwastequantity() { |
|||
|
|||
List<Map<String, Object>> result = dropDownService.getwastequantity(); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
@GetMapping("/locations") |
|||
public ResponseEntity<?> getlocations(@RequestParam("quantityId") int quantityId) { |
|||
|
|||
List<Map<String, Object>> result = dropDownService.getlocations(quantityId); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
@GetMapping("/vehicletypes") |
|||
public ResponseEntity<?> getvehicletypes(@RequestParam("quantityId") int quantityId) { |
|||
|
|||
List<Map<String, Object>> result = dropDownService.getvehicletypes(quantityId); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
@GetMapping("/wastecollectionscharges") |
|||
public ResponseEntity<List<Map<String, Object>>> getwastecolectionscharges() { |
|||
|
|||
List<Map<String, Object>> result = dropDownService.getwastecolectionscharges(); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
@GetMapping("/zone") |
|||
public ResponseEntity<List<Map<String, Object>>> getallzone() { |
|||
|
|||
List<Map<String, Object>> result = dropDownService.getZonesList(); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
@GetMapping("/wardbyzone") |
|||
public ResponseEntity<List<Map<String, Object>>> getwardbyzone(@RequestParam int zoneId) { |
|||
|
|||
List<Map<String, Object>> result = dropDownService.getWardListByZone(zoneId); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,70 @@ |
|||
package com.gcc.restapiservices.cdwaste.service; |
|||
|
|||
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 DropDownService { |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCdWasteDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
|
|||
public List<Map<String, Object>> getwastetypes() { |
|||
String sql = " SELECT id,waste_type FROM waste_type_master where is_active = 1 AND is_delete=0 " ; |
|||
return jdbcTemplate.queryForList(sql); |
|||
} |
|||
|
|||
|
|||
|
|||
public List<Map<String, Object>> getwastequantity() { |
|||
String sql = " SELECT id,quantity FROM quantity_master where is_active = 1 AND is_delete = 0 " ; |
|||
return jdbcTemplate.queryForList(sql); |
|||
} |
|||
|
|||
|
|||
|
|||
public List<Map<String, Object>> getlocations(int quantityId) { |
|||
String sql = "SELECT id,location FROM dumping_location where quantity_id = ? "; |
|||
return jdbcTemplate.queryForList(sql, quantityId); |
|||
} |
|||
|
|||
|
|||
|
|||
public List<Map<String, Object>> getvehicletypes(int quantityId) { |
|||
String sql = "SELECT id,vehicle_name FROM vehicle_master where quantity_id = ? "; |
|||
return jdbcTemplate.queryForList(sql,quantityId); |
|||
} |
|||
|
|||
|
|||
public List<Map<String, Object>> getwastecolectionscharges() { |
|||
String sql = "SELECT id,amount_type,amount FROM waste_collection_charges where is_active = 1 AND is_delete = 0 "; |
|||
return jdbcTemplate.queryForList(sql); |
|||
} |
|||
|
|||
|
|||
|
|||
public List<Map<String, Object>> getZonesList() { |
|||
String sql = " SELECT id,zone_name from zones where is_active = 1 "; |
|||
return jdbcTemplate.queryForList(sql); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getWardListByZone(int zoneId) { |
|||
String sql = "SELECT id, ward_name FROM wards WHERE zone_id = ? AND is_active = 1 AND is_delete = 0 "; |
|||
return jdbcTemplate.queryForList(sql, zoneId); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,354 @@ |
|||
package com.gcc.restapiservices.cdwaste.service; |
|||
|
|||
import java.io.IOException; |
|||
import java.net.HttpURLConnection; |
|||
import java.net.URL; |
|||
import java.nio.file.Files; |
|||
import java.nio.file.Path; |
|||
import java.nio.file.Paths; |
|||
import java.security.SecureRandom; |
|||
import java.sql.PreparedStatement; |
|||
import java.sql.Statement; |
|||
import java.time.LocalDate; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Random; |
|||
|
|||
import javax.sql.DataSource; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.core.env.Environment; |
|||
import org.springframework.core.io.ByteArrayResource; |
|||
import org.springframework.http.HttpEntity; |
|||
import org.springframework.http.HttpHeaders; |
|||
import org.springframework.http.MediaType; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.jdbc.support.GeneratedKeyHolder; |
|||
import org.springframework.jdbc.support.KeyHolder; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.util.LinkedMultiValueMap; |
|||
import org.springframework.util.MultiValueMap; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.gcc.restapiservices.cdwaste.util.DateTimeUtil; |
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
|
|||
@Service |
|||
public class RequestService { |
|||
|
|||
@Autowired |
|||
private Environment environment; |
|||
|
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCdWasteDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
private String fileBaseUrl; |
|||
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; |
|||
private static final int STRING_LENGTH = 15; |
|||
private static final Random RANDOM = new SecureRandom(); |
|||
|
|||
public RequestService(RestTemplate restTemplate, AppConfig appConfig, ObjectMapper objectMapper, |
|||
Environment environment) { |
|||
this.restTemplate = restTemplate; |
|||
this.appConfig = appConfig; |
|||
this.environment = environment; |
|||
this.objectMapper = objectMapper; |
|||
this.fileBaseUrl = environment.getProperty("fileBaseUrl"); |
|||
} |
|||
|
|||
@Autowired |
|||
private final ObjectMapper objectMapper; |
|||
|
|||
@Autowired |
|||
private RestTemplate restTemplate; |
|||
|
|||
public String saveWasteCollection(String name, String mobileNumber, String zone, String ward, String doorNumber, |
|||
String streetName, String area, String city, String pincode, int wasteType, int wasteQuantity, |
|||
int vehicleType, int dumpLocation, MultipartFile wasteImage) throws IOException { |
|||
|
|||
String paymentstatus = "PENDING"; |
|||
|
|||
String uploadImgUrl = null; |
|||
|
|||
int isMobile = 2; |
|||
|
|||
String sql = "INSERT INTO waste_collectors_request " |
|||
+ "(name, mobile_no, zone, ward, door_number,street_name,area,city,pincode,waste_type_id, waste_quantity_id, vehicle_id, payment_status, upload_image_url,dump_location_id,is_mobile) " |
|||
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?)"; |
|||
|
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
|
|||
int result = jdbcTemplate.update(connection -> { |
|||
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); |
|||
ps.setString(1, name); |
|||
ps.setString(2, mobileNumber); |
|||
ps.setString(3, zone); |
|||
ps.setString(4, ward); |
|||
ps.setString(5, doorNumber); |
|||
ps.setString(6, streetName); |
|||
ps.setString(7, area); |
|||
ps.setString(8, city); |
|||
ps.setString(9, pincode); |
|||
ps.setInt(10, wasteType); |
|||
ps.setInt(11, wasteQuantity); |
|||
|
|||
ps.setInt(12, vehicleType); |
|||
ps.setString(13, paymentstatus); |
|||
ps.setString(14, null); // placeholder for image URL |
|||
|
|||
// 👇 move this logic inside the lambda |
|||
if (vehicleType != 1 && dumpLocation > 0) { |
|||
ps.setInt(15, dumpLocation); |
|||
} else { |
|||
ps.setInt(15, 100); // Default value |
|||
} |
|||
|
|||
ps.setInt(16, isMobile); |
|||
return ps; |
|||
}, keyHolder); |
|||
|
|||
if (result > 0) { |
|||
int generatedId = keyHolder.getKey().intValue(); |
|||
String prefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); |
|||
String refId = prefix + generatedId; |
|||
|
|||
// Save the file and build the file path (relative or just file name) |
|||
if (wasteImage != null && !wasteImage.isEmpty()) { |
|||
|
|||
uploadImgUrl = saveFile(wasteImage); |
|||
|
|||
System.out.println("uploadImgUrl...." + uploadImgUrl); |
|||
|
|||
// Update the upload_image_url column |
|||
String updateSql = "UPDATE waste_collectors_request SET upload_image_url = ? WHERE id = ?"; |
|||
jdbcTemplate.update(updateSql, uploadImgUrl, generatedId); |
|||
} |
|||
|
|||
// Update reference ID (assuming it's another column in the same table) |
|||
if (updaterefId(refId, generatedId)) { |
|||
sendrequestraisedWhatsappMessage(refId, mobileNumber); |
|||
|
|||
} |
|||
|
|||
System.out.println("wasteQuantity" + wasteQuantity); |
|||
System.out.println("vehicleId" + vehicleType); |
|||
System.out.println("result" + result); |
|||
|
|||
if ((wasteQuantity == 1 || wasteQuantity == 2) && (vehicleType == 1 || vehicleType == 4) && result > 0) { |
|||
|
|||
String fullAddress = doorNumber + "," + streetName + "," + area + "," + city + "," + pincode; |
|||
System.out.println("fullAddress" + fullAddress); |
|||
callGccWasteApi(zone, ward, fullAddress, refId, wasteQuantity, wasteType, wasteImage); |
|||
System.out.println("hiiii"); |
|||
|
|||
} |
|||
return refId; |
|||
} |
|||
|
|||
return "error"; |
|||
} |
|||
|
|||
public void callGccWasteApi(String zone, String ward, String fulladdress, String refId, int wasteQuantity, |
|||
int wasteType, MultipartFile dump) { |
|||
System.out.println("inside the method"); |
|||
|
|||
String url = "https://gccservices.in/gccofficialapp/c_dwaste/api/saveUserWaste"; |
|||
|
|||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>(); |
|||
|
|||
String tonage = ""; |
|||
if (wasteQuantity == 1) { |
|||
tonage = "Less Than 1 Ton"; |
|||
} else if (wasteQuantity == 2) { |
|||
tonage = "1 Ton to 20 Ton"; |
|||
} else { |
|||
tonage = "Unknown Tonage"; |
|||
} |
|||
|
|||
body.add("zone", zone); |
|||
body.add("ward", ward); |
|||
body.add("address", fulladdress); |
|||
body.add("ref_id", refId); |
|||
System.out.println("tonage....." + tonage); |
|||
body.add("tonage", tonage); |
|||
body.add("wastetype", wasteType); |
|||
|
|||
try { |
|||
ByteArrayResource fileAsResource = new ByteArrayResource(dump.getBytes()) { |
|||
@Override |
|||
public String getFilename() { |
|||
return dump.getOriginalFilename(); // Provide a file name |
|||
} |
|||
}; |
|||
|
|||
body.add("file", fileAsResource); |
|||
|
|||
HttpHeaders headers = new HttpHeaders(); |
|||
headers.setContentType(MediaType.MULTIPART_FORM_DATA); |
|||
|
|||
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers); |
|||
|
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class); |
|||
|
|||
System.out.println("GCC API response: " + response.getBody()); |
|||
|
|||
} catch (Exception e) { |
|||
System.err.println("GCC API error: " + e.getMessage()); |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
private boolean updaterefId(String refId, int generatedId) { |
|||
String sql = "update waste_collectors_request set refid = ? where id = ?"; |
|||
int result = jdbcTemplate.update(sql, refId, generatedId); |
|||
if (result > 0) { |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
public void sendrequestraisedWhatsappMessage(String refId, String mobileNumber) { |
|||
try { |
|||
|
|||
String apiUrl = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" |
|||
+ mobileNumber |
|||
+ "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Thank+you%21+Your+request+has+been+successfully+submitted.%0ARequest+Id+%3A+" |
|||
+ refId |
|||
+ "&isTemplate=true&header=C%26D+Waste+Collection+Request+Registered&footer=Greater+Chennai+Corporation"; |
|||
|
|||
System.out.println("WhatsApp API URL: " + apiUrl); // Optional debug |
|||
// smsService.sendMsg(apiUrl); |
|||
sendMsg(apiUrl); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
public String sendMsg(String msgUrl) { |
|||
System.out.println("Whatsapp URL :-" + msgUrl); |
|||
|
|||
String response = ""; |
|||
try { |
|||
HttpURLConnection connection = null; |
|||
|
|||
URL url = new URL(msgUrl); |
|||
connection = (HttpURLConnection) url.openConnection(); |
|||
connection.setRequestMethod("GET"); |
|||
|
|||
int responseCode = connection.getResponseCode(); |
|||
response = responseCode + ""; |
|||
System.out.println("Response Code: " + responseCode); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return response; |
|||
} |
|||
|
|||
public String saveFeedbackImage(String SMS_Url) { |
|||
System.out.println("SMS URL:- " + SMS_Url); |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String response = restTemplate.getForObject(SMS_Url, String.class); |
|||
return response; |
|||
} |
|||
|
|||
public String saveFile(MultipartFile file) throws IOException { |
|||
|
|||
String order_copy_url = ""; |
|||
// type_folder = "works/"+type_folder; |
|||
// Handle file upload if a file is provided |
|||
if (file == null || file.isEmpty()) { |
|||
return order_copy_url; |
|||
} |
|||
|
|||
// Set the file path where you want to save it |
|||
String uploadDirectory = environment.getProperty("file.upload.directory"); |
|||
String serviceFolderName = environment.getProperty("dump_directory"); |
|||
var year = DateTimeUtil.getCurrentYear(); |
|||
var month = DateTimeUtil.getCurrentMonth(); |
|||
// var date =DateTimeUtil.getCurrentDay(); |
|||
|
|||
uploadDirectory = uploadDirectory + "/" + serviceFolderName + "/" + year + "/" + month; |
|||
|
|||
Path directoryPath = Paths.get(uploadDirectory); |
|||
if (!Files.exists(directoryPath)) { |
|||
Files.createDirectories(directoryPath); |
|||
} |
|||
|
|||
String datetimetxt = DateTimeUtil.getCurrentDateTime(); |
|||
|
|||
String fileName = datetimetxt + "" + generateRandomStringForFile(10) + "_" + file.getOriginalFilename(); |
|||
// Construct the file path |
|||
String filepath = uploadDirectory + "/" + fileName; |
|||
String filepath_txt = "/" + serviceFolderName + "/" + year + "/" + month + "/" + fileName; |
|||
Path path = Paths.get(filepath); |
|||
|
|||
// Ensure the directory exists |
|||
Files.createDirectories(path.getParent()); |
|||
|
|||
// Write the file to the specified path |
|||
Files.write(path, file.getBytes()); |
|||
|
|||
// Set the order_copy_url to the relative file path for storing in DB |
|||
order_copy_url = filepath_txt; |
|||
|
|||
return order_copy_url; |
|||
} |
|||
|
|||
public static String generateRandomStringForFile(int String_Lenth) { |
|||
StringBuilder result = new StringBuilder(String_Lenth); |
|||
for (int i = 0; i < STRING_LENGTH; i++) { |
|||
result.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length()))); |
|||
} |
|||
return result.toString(); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getRequestDetailsList(String mobileNo) { |
|||
StringBuilder query = new StringBuilder("SELECT " |
|||
+ "wcr.name, wcr.mobile_no, wcr.zone, wcr.ward, wtm.waste_type, wcr.payment_status, wcr.refid, " |
|||
+ "wcr.actual_weight, wcr.payment_type, wcr.processing_charge, " |
|||
+ "wcr.waste_collection_charge, wcr.total_charge, wcr.payment_mobile_no, wcr.door_number, wcr.street_name, " |
|||
+ "wcr.area, wcr.city, wcr.pincode, " + "CONCAT(' " + fileBaseUrl |
|||
+ "/gcc/files', wcr.upload_image_url) AS upload_image_url, " |
|||
+ "DATE_FORMAT(wcr.cdate, '%d-%m-%Y') AS request_date, " + "vm.vehicle_name, " + "qm.quantity, " |
|||
+ "dl.location " + "FROM waste_collectors_request wcr " |
|||
+ "LEFT JOIN vehicle_master vm ON wcr.vehicle_id = vm.id " |
|||
+ "LEFT JOIN dumping_location dl ON wcr.dump_location_id = dl.id " |
|||
+ "LEFT JOIN waste_type_master wtm ON wcr.waste_type_id = wtm.id " |
|||
+ "LEFT JOIN quantity_master qm ON wcr.waste_quantity_id = qm.id " + "WHERE wcr.mobile_no = ? "); |
|||
|
|||
return jdbcTemplate.queryForList(query.toString(), mobileNo); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getRequestDetailsListByRefId(String refId) { |
|||
StringBuilder query = new StringBuilder("SELECT " |
|||
+ "wcr.name, wcr.mobile_no, wcr.zone, wcr.ward, wtm.waste_type, wcr.payment_status, wcr.refid, " |
|||
+ "wcr.actual_weight, wcr.payment_type, wcr.processing_charge, " |
|||
+ "wcr.waste_collection_charge, wcr.total_charge, wcr.payment_mobile_no, wcr.door_number, wcr.street_name, " |
|||
+ "wcr.area, wcr.city, wcr.pincode, " + "vm.vehicle_name, " + "qm.quantity, " + "dl.location, " |
|||
+ "CONCAT(' " + fileBaseUrl + "/gcc/files', wcr.upload_image_url) AS upload_image_url, " |
|||
+ "DATE_FORMAT(wcr.cdate, '%d-%m-%Y') AS request_date " + "FROM waste_collectors_request wcr " |
|||
+ "LEFT JOIN vehicle_master vm ON wcr.vehicle_id = vm.id " |
|||
+ "LEFT JOIN dumping_location dl ON wcr.dump_location_id = dl.id " |
|||
+ "LEFT JOIN waste_type_master wtm ON wcr.waste_type_id = wtm.id " |
|||
+ "LEFT JOIN quantity_master qm ON wcr.waste_quantity_id = qm.id " + "WHERE wcr.refid = ? "); |
|||
|
|||
return jdbcTemplate.queryForList(query.toString(), refId); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,44 @@ |
|||
package com.gcc.restapiservices.cdwaste.util; |
|||
|
|||
import java.util.Collections; |
|||
import java.util.LinkedHashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
|
|||
public class ApiResponseUtil { |
|||
|
|||
public static ResponseEntity<List<Map<String, Object>>> success(Object data, String message) { |
|||
return buildResponse(true, HttpStatus.OK, message, data); |
|||
} |
|||
|
|||
public static ResponseEntity<List<Map<String, Object>>> notFound(String message) { |
|||
return buildResponse(false, HttpStatus.NOT_FOUND, message, Collections.emptyList()); |
|||
} |
|||
|
|||
public static ResponseEntity<List<Map<String, Object>>> error(String message, HttpStatus status) { |
|||
return buildResponse(false, status, message, null); |
|||
} |
|||
|
|||
|
|||
|
|||
public static ResponseEntity<List<Map<String, Object>>> buildResponse( |
|||
boolean statusFlag, |
|||
HttpStatus httpStatus, |
|||
String message, |
|||
Object data |
|||
) { |
|||
Map<String, Object> response = new LinkedHashMap<>(); |
|||
response.put("status", statusFlag); |
|||
response.put("code", httpStatus.value()); |
|||
response.put("message", message); |
|||
response.put("data", data); |
|||
|
|||
List<Map<String, Object>> responseList = Collections.singletonList(response); |
|||
return ResponseEntity.status(httpStatus).body(responseList); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,35 @@ |
|||
package com.gcc.restapiservices.cdwaste.util; |
|||
|
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
|
|||
@Service |
|||
public class DateTimeUtil { |
|||
public static String getCurrentDateTime() { |
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMyyyyHHmmss"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
return now.format(formatter); |
|||
} |
|||
public static String getCurrentYear() { |
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
return now.format(formatter); |
|||
} |
|||
public static String getCurrentMonth() { |
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
return now.format(formatter); |
|||
} |
|||
public static String getCurrentDay() { |
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
return now.format(formatter); |
|||
} |
|||
public static String getCurrentDateTimeMysql() { |
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
return now.format(formatter); |
|||
} |
|||
} |
|||
@ -0,0 +1,96 @@ |
|||
package com.gcc.restapiservices.communityHall.configuration; |
|||
|
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.context.annotation.PropertySource; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Configuration |
|||
@PropertySource("classpath:paymentConfig.properties") |
|||
public class PaymentConfig { |
|||
|
|||
@Value("${payment.worldline.merchantId}") |
|||
private String merchantId; |
|||
|
|||
@Value("${payment.worldline.encryptionKey}") |
|||
private String encryptionKey; |
|||
|
|||
@Value("${payment.worldline.encryptionIV}") |
|||
private String encryptionIV; |
|||
|
|||
@Value("${payment.worldline.schemeCode}") |
|||
private String schemeCode; |
|||
|
|||
@Value("${payment.worldline.merchantName}") |
|||
private String merchantName; |
|||
|
|||
@Value("${payment.worldline.transactionSuccessCode}") |
|||
private String transactionSuccessCode; |
|||
|
|||
@Value("${payment.worldline.refundSuccessCode}") |
|||
private String refundSuccessCode; |
|||
|
|||
|
|||
public String getMerchantId() { |
|||
return merchantId; |
|||
} |
|||
|
|||
public void setMerchantId(String merchantId) { |
|||
this.merchantId = merchantId; |
|||
} |
|||
|
|||
public String getEncryptionKey() { |
|||
return encryptionKey; |
|||
} |
|||
public byte[] getEncryptionKeyByte() { |
|||
return encryptionKey.getBytes(); |
|||
} |
|||
|
|||
public void setEncryptionKey(String encryptionKey) { |
|||
this.encryptionKey = encryptionKey; |
|||
} |
|||
|
|||
public String getEncryptionIV() { |
|||
return encryptionIV; |
|||
} |
|||
|
|||
public byte[] getEncryptionIVByte() { |
|||
return encryptionIV.getBytes(); |
|||
} |
|||
|
|||
public void setEncryptionIV(String encryptionIV) { |
|||
this.encryptionIV = encryptionIV; |
|||
} |
|||
|
|||
public String getSchemeCode() { |
|||
return schemeCode; |
|||
} |
|||
|
|||
public void setSchemeCode(String schemeCode) { |
|||
this.schemeCode = schemeCode; |
|||
} |
|||
|
|||
public String getMerchantName() { |
|||
return merchantName; |
|||
} |
|||
|
|||
public void setMerchantName(String merchantName) { |
|||
this.merchantName = merchantName; |
|||
} |
|||
|
|||
public String getTransactionSuccessCode() { |
|||
return transactionSuccessCode; |
|||
} |
|||
|
|||
public void setTransactionSuccessCode(String transactionSuccessCode) { |
|||
this.transactionSuccessCode = transactionSuccessCode; |
|||
} |
|||
|
|||
public String getRefundSuccessCode() { |
|||
return refundSuccessCode; |
|||
} |
|||
|
|||
public void setRefundSuccessCode(String refundSuccessCode) { |
|||
this.refundSuccessCode = refundSuccessCode; |
|||
}} |
|||
@ -0,0 +1,95 @@ |
|||
package com.gcc.restapiservices.communityHall.controller; |
|||
|
|||
import com.fasterxml.jackson.core.JsonProcessingException; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.gcc.restapiservices.communityHall.service.ReportService; |
|||
import com.gcc.restapiservices.communityHall.service.communityHallService; |
|||
import jakarta.servlet.http.HttpSession; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.stereotype.Controller; |
|||
import org.springframework.ui.Model; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.stream.Collectors; |
|||
|
|||
@Controller |
|||
@RequestMapping("/gccrestservices/communityhall/api") |
|||
public class ReportController { |
|||
|
|||
@Autowired |
|||
private communityHallService bookingService; |
|||
|
|||
@Autowired |
|||
private ReportService reportService; |
|||
|
|||
@GetMapping("/report") |
|||
public ResponseEntity<?> getReport() { |
|||
return ResponseEntity.ok("Report"); |
|||
} |
|||
|
|||
|
|||
// New REST endpoints for the three services using ReportService |
|||
|
|||
@GetMapping("/zone-wise-booking-data") |
|||
public ResponseEntity<?> getZoneWiseBookingData( |
|||
@RequestParam(name = "fromDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String fromDate, |
|||
@RequestParam(name = "toDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String toDate) { |
|||
try { |
|||
List<Map<String, Object>> result = reportService.getZoneWiseBookingData(fromDate, toDate); |
|||
if (result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No data found for the specified date range"); |
|||
} |
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Error retrieving zone-wise booking data: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/hall-details-by-zone") |
|||
public ResponseEntity<?> getHallDetailsByZoneAndDate( |
|||
@RequestParam(name = "fromDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String fromDate, |
|||
@RequestParam(name = "toDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String toDate, |
|||
@RequestParam(name = "zone") String zone) { |
|||
try { |
|||
if (zone == null || zone.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Zone parameter is required"); |
|||
} |
|||
|
|||
List<Map<String, Object>> result = reportService.getHallDetailsByZoneAndDate(fromDate, toDate, zone); |
|||
if (result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body("No hall details found for zone: " + zone + " in the specified date range"); |
|||
} |
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Error retrieving hall details by zone: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/hall-specific-data") |
|||
public ResponseEntity<?> getHallSpecificData( |
|||
@RequestParam(name = "fromDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String fromDate, |
|||
@RequestParam(name = "toDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String toDate, |
|||
@RequestParam(name = "zone", required = false) String zone, |
|||
@RequestParam(name = "hallId", required = false) Integer hallId) { |
|||
try { |
|||
List<Map<String, Object>> result = reportService.getHallSpecificData(fromDate, toDate, zone, hallId); |
|||
if (result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body("No counter-wise booking data found for the specified criteria"); |
|||
} |
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Error retrieving counter-wise booking data: " + e.getMessage()); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,992 @@ |
|||
package com.gcc.restapiservices.communityHall.controller; |
|||
|
|||
import com.gcc.restapiservices.communityHall.dto.PaymentWebhookPayload; |
|||
import com.gcc.restapiservices.communityHall.service.CHPaymentService; |
|||
import com.gcc.restapiservices.communityHall.service.communityHallService; |
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
import com.gcc.restapiservices.coworkspace.controller.ApiResponse; |
|||
|
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
import org.springframework.web.multipart.MultipartHttpServletRequest; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
|
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
import com.fasterxml.jackson.databind.JsonNode; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import java.security.NoSuchAlgorithmException; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.ArrayList; |
|||
import java.util.Enumeration; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.HashMap; |
|||
import java.util.Random; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/communityhall/api") |
|||
public class communityHallController { |
|||
|
|||
@Autowired |
|||
private CHPaymentService chPaymentService; |
|||
|
|||
@Autowired |
|||
private communityHallService hallService; |
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
|
|||
@GetMapping("/getHallList") |
|||
public List<Map<String, Object>> getHallList() { |
|||
List<Map<String, Object>> hallList = new ArrayList<Map<String, Object>>(); |
|||
hallList = hallService.getHallList(); |
|||
|
|||
if (hallList.isEmpty()) { |
|||
return hallList; |
|||
} |
|||
return hallList; |
|||
} |
|||
|
|||
@GetMapping("/getReasonMaster") |
|||
public ResponseEntity<?> getReasonMaster() { |
|||
try { |
|||
List<Map<String, Object>> result = hallService.getReasonMaster(); |
|||
|
|||
if (result == null || result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No data found"); |
|||
} |
|||
|
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getDocumentsByReasonId") |
|||
public ResponseEntity<?> getDocumentsByReasonId(@RequestParam(value = "reasonId", required = false) Long reasonId) { |
|||
if (reasonId == null) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "reasonId is required"); |
|||
errorResponse.put("message", "Missing required parameter for reasonId"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
try { |
|||
List<Map<String, Object>> result = hallService.getDocumentsByReasonId(reasonId); |
|||
|
|||
if (result == null || result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No data found for reasonId: " + reasonId); |
|||
} |
|||
|
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getRelationTypes") |
|||
public ResponseEntity<?> getRelationTypes() { |
|||
try { |
|||
List<Map<String, String>> result = hallService.getRelationTypesAsMap(); |
|||
|
|||
if (result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No data found"); |
|||
} |
|||
|
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getUserDetails") |
|||
public ResponseEntity<?> getUserDetails(@RequestParam(value = "Mobilenumber", required = false) Long Mobilenumber) {// @RequestParam(value |
|||
// = |
|||
// "mobileNumber", |
|||
// required |
|||
// = |
|||
// false) |
|||
// Long |
|||
// mobileNumber, |
|||
if (Mobilenumber == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
// Check if mobile number is 10 digits |
|||
String mobileStr = String.valueOf(Mobilenumber); |
|||
if (mobileStr.length() != 10) { |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Mobile number must be exactly 10 digits."); |
|||
} |
|||
try { |
|||
List<Map<String, Object>> result = hallService.getUserDetails(Mobilenumber); |
|||
|
|||
if (result == null || result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body("No data found for Mobilenumber: " + Mobilenumber); |
|||
} |
|||
|
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/calculatehallamount") |
|||
public ResponseEntity<Map<String, Object>> getHallDetailsConcession( |
|||
@RequestParam(value = "numDays", required = false) Integer numDays, |
|||
@RequestParam(value = "startPeriod", required = false) String startPeriod, |
|||
@RequestParam(value = "endPeriod", required = false) String endPeriod, |
|||
@RequestParam(value = "reasonforBooking", required = false) String reasonforBooking, |
|||
@RequestParam(value = "hallId", required = false) Integer hallId) { |
|||
|
|||
// Validation for required parameters |
|||
if (numDays == null) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Number of days is required"); |
|||
errorResponse.put("message", "Please provide the numDays parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
if (startPeriod == null || startPeriod.trim().isEmpty()) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Start period is required"); |
|||
errorResponse.put("message", "Please provide the startPeriod parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
if (!startPeriod.equals("1") && !startPeriod.equals("2")) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Invalid startPeriod"); |
|||
errorResponse.put("message", "startPeriod must be either '1' or '2'"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
if (endPeriod == null || endPeriod.trim().isEmpty()) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "End period is required"); |
|||
errorResponse.put("message", "Please provide the endPeriod parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
if (!endPeriod.equals("1") && !endPeriod.equals("2")) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Invalid endPeriod"); |
|||
errorResponse.put("message", "endPeriod must be either '1' or '2'"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
if (reasonforBooking == null || reasonforBooking.trim().isEmpty()) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Reason for booking is required"); |
|||
errorResponse.put("message", "Please provide the reasonforBooking parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
if (hallId == null) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Hall ID is required"); |
|||
errorResponse.put("message", "Please provide the hallId parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
Map<String, Object> hallDetails = hallService.getHallDetailsById(hallId); |
|||
|
|||
if (hallDetails == null) { |
|||
return ResponseEntity.status(404).body(Map.of("message", "Incorrect HallID")); |
|||
} |
|||
System.out.println("hallDetails..." + hallDetails); |
|||
|
|||
Map<String, Object> concession = hallService.getHallConcessionByHallId(hallId); |
|||
System.out.println("concession....." + concession); |
|||
|
|||
Boolean isSGEObj = (Boolean) hallDetails.get("is_sge"); |
|||
Boolean isCGEObj = (Boolean) hallDetails.get("is_cge"); |
|||
|
|||
boolean isSGE = isSGEObj != null && isSGEObj; |
|||
boolean isCGE = isCGEObj != null && isCGEObj; |
|||
|
|||
double fullDayAmount = toDouble(hallDetails.get("full_day_rent")); |
|||
double halfDayAmount = toDouble(hallDetails.get("half_day_rent")); |
|||
double depositAmount = toDouble(hallDetails.get("deposit_amount")); |
|||
double gstRate = toDouble(hallDetails.get("gst")); |
|||
System.out.println("tete"); |
|||
System.out.println(depositAmount); |
|||
|
|||
Map<String, Object> response = new HashMap<>(); |
|||
double amount = calculateAmount(numDays, startPeriod, endPeriod, fullDayAmount, halfDayAmount); |
|||
double totalDepositAmount = calculateDepositAmount(numDays, startPeriod, endPeriod, depositAmount); |
|||
double totalAmount = 0; |
|||
double discountAmount = 0; |
|||
|
|||
response.put("reasonforBooking", reasonforBooking); |
|||
|
|||
if (!isSGE) { |
|||
double gst = round(amount * gstRate / 100.0); |
|||
totalAmount = round(amount + gst + totalDepositAmount); |
|||
response.put("discount", 0); |
|||
response.put("amount", round(amount)); |
|||
response.put("totalAmount", totalAmount); |
|||
response.put("depositAmount", round(totalDepositAmount)); |
|||
response.put("gst", gst); |
|||
response.put("discountAmount", round(amount)); |
|||
} else if ("SGE".equalsIgnoreCase(reasonforBooking) && concession != null) { |
|||
double fullCleaning = toDouble(concession.get("fullday_cleaningcharges")); |
|||
double fullPA = toDouble(concession.get("fullday_pasystem")); |
|||
double fullEB = toDouble(concession.get("fullday_ebcharges")); |
|||
double halfCleaning = toDouble(concession.get("halfday_cleaningcharges")); |
|||
double halfPA = toDouble(concession.get("halfday_pasystem")); |
|||
double halfEB = toDouble(concession.get("halfday_ebcharges")); |
|||
|
|||
double fullAdd = fullCleaning + fullPA + fullEB; |
|||
double halfAdd = halfCleaning + halfPA + halfEB; |
|||
double addCharges = calculateAmount(numDays, startPeriod, endPeriod, fullAdd, halfAdd); |
|||
double sgeDiscount = toDouble(hallDetails.get("sge_discount")); |
|||
double fullRent = toDouble(concession.get("fulldayhallamount")); |
|||
double halfRent = toDouble(concession.get("halfdayhallamount")); |
|||
|
|||
double gst = round(addCharges * gstRate / 100.0); |
|||
totalAmount = round(addCharges + totalDepositAmount + gst); |
|||
discountAmount = round((fullRent * sgeDiscount) / 100.0); |
|||
|
|||
response.put("startPeriod", startPeriod); |
|||
response.put("endPeriod", endPeriod); |
|||
response.put("fulldayhallAmount", round(fullRent)); |
|||
response.put("halfdayhallAmount", round(halfRent)); |
|||
response.put("discount", sgeDiscount); |
|||
response.put("rentAmount", 0); |
|||
response.put("additionalCharges", round(addCharges)); |
|||
response.put("netAmount", round(addCharges)); |
|||
response.put("gst", gst); |
|||
response.put("depositAmount", round(totalDepositAmount)); |
|||
response.put("totalAmount", totalAmount); |
|||
response.put("discountAmount", discountAmount); |
|||
} else if ("CGE".equalsIgnoreCase(reasonforBooking) && concession != null) { |
|||
double fullCleaning = toDouble(concession.get("fullday_cleaningcharges")); |
|||
double fullPA = toDouble(concession.get("fullday_pasystem")); |
|||
double fullEB = toDouble(concession.get("fullday_ebcharges")); |
|||
double halfCleaning = toDouble(concession.get("halfday_cleaningcharges")); |
|||
double halfPA = toDouble(concession.get("halfday_pasystem")); |
|||
double halfEB = toDouble(concession.get("halfday_ebcharges")); |
|||
|
|||
double fullAdd = fullCleaning + fullPA + fullEB; |
|||
double halfAdd = halfCleaning + halfPA + halfEB; |
|||
double addCharges = calculateAmount(numDays, startPeriod, endPeriod, fullAdd, halfAdd); |
|||
double cgeDiscount = toDouble(hallDetails.get("cge_discount")); |
|||
|
|||
double rentAmount = round((amount * cgeDiscount) / 100.0); |
|||
double netAmount = round(rentAmount + addCharges); |
|||
double gst = round(netAmount * gstRate / 100.0); |
|||
totalAmount = round(netAmount + gst + totalDepositAmount); |
|||
|
|||
response.put("startPeriod", startPeriod); |
|||
response.put("endPeriod", endPeriod); |
|||
response.put("fulldayhallAmount", round(fullDayAmount)); |
|||
response.put("halfdayhallAmount", round(halfDayAmount)); |
|||
response.put("discount", cgeDiscount); |
|||
response.put("rentAmount", rentAmount); |
|||
response.put("additionalCharges", round(addCharges)); |
|||
response.put("netAmount", netAmount); |
|||
response.put("gst", gst); |
|||
response.put("depositAmount", round(totalDepositAmount)); |
|||
response.put("totalAmount", totalAmount); |
|||
response.put("discountAmount", round(discountAmount)); |
|||
} else { |
|||
double gstValue = round(gstRate * amount / 100.0); |
|||
totalAmount = round(amount + gstValue + totalDepositAmount); |
|||
response.put("discount", 0); |
|||
response.put("amount", round(amount)); |
|||
response.put("totalAmount", totalAmount); |
|||
response.put("depositAmount", round(totalDepositAmount)); |
|||
response.put("gst", gstValue); |
|||
response.put("discountAmount", round(amount)); |
|||
} |
|||
response.put("numDays", numDays); |
|||
response.put("startPeriod", startPeriod); |
|||
response.put("endPeriod", endPeriod); |
|||
response.put("reasonforBooking", reasonforBooking); |
|||
response.put("hallId", hallId); |
|||
|
|||
return ResponseEntity.ok(response); |
|||
} |
|||
|
|||
// Helper to safely convert Object to double |
|||
private double toDouble(Object value) { |
|||
if (value instanceof Number) { |
|||
return ((Number) value).doubleValue(); |
|||
} |
|||
return 0.0; |
|||
} |
|||
|
|||
// Helper to round to 2 decimal places |
|||
private double round(double value) { |
|||
return Math.round(value * 100.0) / 100.0; |
|||
} |
|||
|
|||
public double calculateAmount(double numDays, String startPeriod, String endPeriod, double fullDayAmount, |
|||
double halfDayAmount) { |
|||
double amount = 0; |
|||
|
|||
// If there is only one day |
|||
if (numDays == 1) { |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
amount = fullDayAmount; |
|||
} else if ("1".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
amount = halfDayAmount; |
|||
} else if ("2".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
amount = halfDayAmount; |
|||
} else { |
|||
amount = numDays; |
|||
} |
|||
} else { |
|||
// For multiple days |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
amount = fullDayAmount * numDays; |
|||
} else if ("1".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
amount = fullDayAmount * (numDays - 1) + halfDayAmount; |
|||
} else if ("2".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
amount = fullDayAmount * (numDays - 1) + halfDayAmount; |
|||
} else if ("2".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
amount = fullDayAmount * (numDays - 2) + halfDayAmount * 2; |
|||
} else { |
|||
amount = numDays; |
|||
} |
|||
} |
|||
|
|||
return amount; |
|||
} |
|||
|
|||
public double calculateDepositAmount(double numDays, String startPeriod, String endPeriod, double depositAmount) { |
|||
double damount = 0; |
|||
|
|||
// If there is only one day |
|||
if (numDays == 1) { |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
damount = depositAmount; |
|||
} else if ("1".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
damount = depositAmount; |
|||
} else if ("2".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
damount = depositAmount; |
|||
} else { |
|||
damount = numDays; |
|||
} |
|||
} else { |
|||
// For multiple days |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
damount = depositAmount * numDays; |
|||
} else if ("1".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
damount = depositAmount * (numDays - 1) + depositAmount; |
|||
} else if ("2".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
damount = depositAmount * (numDays - 1) + depositAmount; |
|||
} else if ("2".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
damount = depositAmount * (numDays - 2) + depositAmount; |
|||
} else { |
|||
damount = numDays; |
|||
} |
|||
} |
|||
|
|||
return damount; |
|||
} |
|||
|
|||
/* |
|||
* @GetMapping("/checkMobileExits") public String checkMobileExits(@RequestParam |
|||
* (value = "Mobilenumber", required = false) long Mobilenumber) { |
|||
* // @RequestParam(value = "mobileNumber", required = false) Long mobileNumber, |
|||
* |
|||
* try { |
|||
* |
|||
* // Validate mobile number has exactly 10 digits String mobileStr = |
|||
* String.valueOf(Mobilenumber); if (mobileStr.length() != 10) { return |
|||
* "Invalid mobile number. Must be exactly 10 digits."; } return |
|||
* !hallService.checkMobileExits(Mobilenumber).isEmpty() ? "Already Registered" |
|||
* : "Allow to Register"; } catch (Exception e) { return "error"; } } |
|||
*/ |
|||
@GetMapping("/checkMobileExits") |
|||
public ResponseEntity<String> checkMobileExits( |
|||
@RequestParam(value = "Mobilenumber", required = false) Long Mobilenumber) { |
|||
|
|||
if (Mobilenumber == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
|
|||
try { |
|||
String mobileStr = String.valueOf(Mobilenumber); |
|||
if (mobileStr.length() != 10) { |
|||
return ResponseEntity.badRequest().body("Invalid mobile number. Must be exactly 10 digits."); |
|||
} |
|||
|
|||
boolean exists = !hallService.checkMobileExits(Mobilenumber).isEmpty(); |
|||
return ResponseEntity.ok(exists ? "Already Registered" : "Allow to Register"); |
|||
|
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal server error"); |
|||
} |
|||
} |
|||
|
|||
// otp |
|||
@GetMapping(value = "/sendOTP") |
|||
public String sendOtp(HttpServletRequest request, @RequestParam String mobile) { |
|||
|
|||
// Validate mobile number has exactly 10 digits |
|||
if (mobile == null || mobile.trim().isEmpty()) { |
|||
return "Mobile number is required."; |
|||
} |
|||
|
|||
String mobileTrimmed = mobile.trim(); |
|||
if (mobileTrimmed.length() != 10) { |
|||
return "Invalid mobile number. Must be exactly 10 digits."; |
|||
} |
|||
|
|||
String MobileNo = mobile; |
|||
System.out.print("\n MobileNo---:" + mobile); |
|||
Random rand = new Random(); |
|||
int otp = rand.nextInt(90000) + 10000; |
|||
|
|||
// int otp= 22222; |
|||
System.out.print("\n otp---:" + otp); |
|||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy%20HH:mm"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
System.out.println(dtf.format(now)); |
|||
|
|||
String generatedToken = "Welcome to GCC! Your OTP for GCC Community Centre is " + otp; |
|||
String key = "pfTEYN6H"; |
|||
String urlString = "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to=" + mobile |
|||
+ "&from=GCCCRP&body=Welcome to GCC! Your OTP for GCC Community Centre booking is " + otp |
|||
+ "&entityid=1401572690000011081&templateid=1407172346444550398"; |
|||
|
|||
System.out.print("\n urlString---: " + urlString); |
|||
String bodyMessage = ""; |
|||
try { |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String Response = restTemplate.getForObject(urlString, String.class); |
|||
|
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
ObjectNode jsonResponse = (ObjectNode) objectMapper.readTree(Response); |
|||
|
|||
jsonResponse.put("MobileNo", MobileNo); |
|||
jsonResponse.put("otp", otp); |
|||
|
|||
bodyMessage = jsonResponse.toString(); |
|||
System.out.println("\n bodyMessage" + bodyMessage); |
|||
|
|||
System.out.println("OTP sent successfully!"); |
|||
|
|||
} catch (Exception e) { |
|||
System.out.print("ERROR---: " + e); |
|||
bodyMessage = "Error"; |
|||
} |
|||
HttpSession session = request.getSession(); |
|||
session.setAttribute("otp", otp); |
|||
return bodyMessage; |
|||
|
|||
} |
|||
|
|||
@GetMapping("/verifyEmployee") |
|||
public ResponseEntity<?> verifyEmployee(@RequestParam String userType, |
|||
@RequestParam(value = "EmployeeID", required = false) String EmployeeID) { |
|||
if (EmployeeID == null || EmployeeID.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Missing or empty 'EmployeeID' parameter"); |
|||
} |
|||
|
|||
if (!"GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
return ResponseEntity.badRequest().body("Invalid userType for Employee verification."); |
|||
} |
|||
|
|||
if (EmployeeID == null || EmployeeID.isBlank()) { |
|||
return ResponseEntity.badRequest().body("Employee ID is required for GCC EMPLOYEE."); |
|||
} |
|||
|
|||
List<Map<String, Object>> existingEmployeeUsers = hallService.checkEmployeeExits(EmployeeID); |
|||
if (existingEmployeeUsers != null && !existingEmployeeUsers.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Employee number already registered"); |
|||
} |
|||
|
|||
try { |
|||
String responseBody = getEmployeeResponse(EmployeeID); |
|||
ObjectMapper mapper = new ObjectMapper(); |
|||
JsonNode rootNode = mapper.readTree(responseBody); |
|||
boolean resultStatus = rootNode.path("ResultStatus").asBoolean(); |
|||
|
|||
if (!resultStatus) { |
|||
return ResponseEntity.badRequest().body("Invalid employee ID."); |
|||
} |
|||
|
|||
return ResponseEntity.ok(rootNode); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Employee verification failed."); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/verifyPensioner") |
|||
public ResponseEntity<?> verifyPensioner(@RequestParam String userType, |
|||
@RequestParam(value = "PensionerID", required = false) String PensionerID) { |
|||
|
|||
if (PensionerID == null || PensionerID.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Missing or empty 'PensionerID' parameter"); |
|||
} |
|||
|
|||
if (!"GCC PENSIONER".equalsIgnoreCase(userType)) { |
|||
return ResponseEntity.badRequest().body("Invalid userType for Pensioner verification."); |
|||
} |
|||
|
|||
if (PensionerID == null || PensionerID.isBlank()) { |
|||
return ResponseEntity.badRequest().body("Pensioner ID is required for GCC PENSIONER."); |
|||
} |
|||
|
|||
List<Map<String, Object>> existingEmployeeUsers = hallService.checkPenionerExits(PensionerID); |
|||
if (existingEmployeeUsers != null && !existingEmployeeUsers.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Pensioner number already registered"); |
|||
} |
|||
|
|||
try { |
|||
String responseBody = getPensionerResponse(PensionerID); |
|||
ObjectMapper mapper = new ObjectMapper(); |
|||
JsonNode rootNode = mapper.readTree(responseBody); |
|||
boolean resultStatus = rootNode.path("ResultStatus").asBoolean(); |
|||
|
|||
if (!resultStatus) { |
|||
return ResponseEntity.badRequest().body("Invalid pensioner ID."); |
|||
} |
|||
|
|||
return ResponseEntity.ok(rootNode); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Pensioner verification failed."); |
|||
} |
|||
} |
|||
|
|||
@PostMapping("/register") |
|||
public ResponseEntity<String> registerUser(@RequestParam(value = "userType", required = false) String userType, |
|||
@RequestParam(value = "name", required = false) String name, |
|||
@RequestParam(value = "mobileNumber", required = false) Long mobileNumber, |
|||
@RequestParam(value = "aadharNumber", required = false) String aadharNumber, |
|||
@RequestParam(required = false) MultipartFile profilePhoto, @RequestParam(required = false) String emailId, |
|||
@RequestParam(value = "doorNo", required = false) String doorNo, |
|||
@RequestParam(value = "street", required = false) String street, |
|||
@RequestParam(value = "area", required = false) String area, |
|||
@RequestParam(value = "location", required = false) String location, |
|||
@RequestParam(value = "pincode", required = false) String pincode, |
|||
@RequestParam(required = false) String PensionerID, |
|||
@RequestParam(required = false) String PensionerDepartment, |
|||
@RequestParam(required = false) String EmployeeID, |
|||
@RequestParam(required = false) String EmployeeDepartment) { |
|||
|
|||
try { |
|||
|
|||
if (userType == null || userType.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("User type is required."); |
|||
} |
|||
|
|||
if (name == null || name.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Name is required."); |
|||
} |
|||
|
|||
if (mobileNumber == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
|
|||
if (aadharNumber == null || aadharNumber.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Aadhar number is required."); |
|||
} |
|||
|
|||
if (doorNo == null || doorNo.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Door number is required."); |
|||
} |
|||
|
|||
if (street == null || street.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Street is required."); |
|||
} |
|||
|
|||
if (area == null || area.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Area is required."); |
|||
} |
|||
|
|||
if (location == null || location.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Location is required."); |
|||
} |
|||
|
|||
if (pincode == null || pincode.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Pincode is required."); |
|||
} |
|||
|
|||
// Additional validations for specific user types |
|||
if ("GCC PENSIONER".equalsIgnoreCase(userType)) { |
|||
if (PensionerID == null || PensionerID.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Pensioner ID is required for GCC PENSIONER user type."); |
|||
} |
|||
if (PensionerID.length() != 6) { |
|||
|
|||
return ResponseEntity.badRequest().body("Invalid PensionerID. Must be exactly 6 digits.."); |
|||
} |
|||
if (PensionerDepartment == null || PensionerDepartment.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest() |
|||
.body("Pensioner Department is required for GCC PENSIONER user type."); |
|||
} |
|||
} |
|||
|
|||
if ("GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
if (EmployeeID == null || EmployeeID.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Employee ID is required for GCC EMPLOYEE user type."); |
|||
} |
|||
if (EmployeeID.length() != 6) { |
|||
|
|||
return ResponseEntity.badRequest().body("Invalid EmployeeID. Must be exactly 6 digits.."); |
|||
} |
|||
|
|||
if (EmployeeDepartment == null || EmployeeDepartment.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest() |
|||
.body("Employee Department is required for GCC EMPLOYEE user type."); |
|||
} |
|||
} |
|||
|
|||
// Format validations |
|||
if (String.valueOf(mobileNumber).length() != 10) { |
|||
return ResponseEntity.badRequest().body("Mobile number must be exactly 10 digits."); |
|||
} |
|||
|
|||
if (pincode.length() != 6) { |
|||
return ResponseEntity.badRequest().body("Pincode must be exactly 6 digits."); |
|||
} |
|||
|
|||
if (emailId != null && !emailId.isBlank()) { |
|||
String emailRegex = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.com$"; |
|||
if (!emailId.matches(emailRegex)) { |
|||
return ResponseEntity.badRequest().body("Invalid email ID."); |
|||
} |
|||
} |
|||
|
|||
if (aadharNumber.length() != 12) { |
|||
return ResponseEntity.badRequest().body("Aadhar number must be exactly 12 digits."); |
|||
} |
|||
|
|||
// Mobile number check only for PUBLIC users |
|||
if ("PUBLIC".equalsIgnoreCase(userType)) { |
|||
List<Map<String, Object>> existingUsers = hallService.checkMobileExits(mobileNumber); |
|||
boolean exists = existingUsers != null && !existingUsers.isEmpty(); |
|||
if (exists) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Mobile number already registered"); |
|||
} |
|||
} |
|||
if ("GCC PENSIONER".equalsIgnoreCase(userType)) { |
|||
List<Map<String, Object>> existingUsers = hallService.checkPenionerExits(PensionerID); |
|||
boolean exists = existingUsers != null && !existingUsers.isEmpty(); |
|||
if (exists) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Pensioner number already registered "); |
|||
} |
|||
} |
|||
if ("GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
List<Map<String, Object>> existingUsers = hallService.checkEmployeeExits(EmployeeID); |
|||
boolean exists = existingUsers != null && !existingUsers.isEmpty(); |
|||
if (exists) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Employee number already registered"); |
|||
} |
|||
} |
|||
|
|||
// Register all user types |
|||
hallService.registerUser(userType, name, mobileNumber, aadharNumber, profilePhoto, emailId, doorNo, street, |
|||
area, location, pincode, PensionerID, PensionerDepartment, EmployeeID, EmployeeDepartment); |
|||
|
|||
// return ResponseEntity.ok("Pending."); |
|||
// Return different success messages based on user type |
|||
String successMessage; |
|||
if ("PUBLIC".equalsIgnoreCase(userType)) { |
|||
successMessage = "Welcome to GCC, Your User Registration for booking Community Centre is successful."; |
|||
} else if ("GCC PENSIONER".equalsIgnoreCase(userType) || "COUNCILLOR".equalsIgnoreCase(userType) |
|||
|| "GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
successMessage = "Welcome to GCC, Your User Registration request for booking Community Centre is submitted successfully."; |
|||
} else { |
|||
successMessage = "Welcome to GCC, your registration is successful."; |
|||
} |
|||
return ResponseEntity.ok(successMessage); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Registration failed."); |
|||
} |
|||
} |
|||
|
|||
private String getPensionerResponse(String pensionerId) { |
|||
try { |
|||
String url = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=getPensionerDetailsList&pensionerId=" |
|||
+ pensionerId; |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); |
|||
String responseBody = responseEntity.getBody(); |
|||
System.out.println("response.. " + responseBody); |
|||
return responseBody; |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
private String getEmployeeResponse(String employeeId) { |
|||
try { |
|||
String url = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=getEmployeeDetail&EmployeeID=" |
|||
+ employeeId; |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); |
|||
String responseBody = responseEntity.getBody(); |
|||
System.out.println("Employee API response: " + responseBody); |
|||
return responseBody; |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/verifyCounsellor") |
|||
public ResponseEntity<?> checkCounsellorMobileExits( |
|||
@RequestParam(value = "mobileNo", required = false) Long mobileNo) {// @RequestParam(value = "mobileNumber", |
|||
// required = false) Long mobileNumber, |
|||
if (mobileNo == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
|
|||
String mobileStr = String.valueOf(mobileNo); |
|||
if (mobileStr.length() != 10) { |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Mobile number must be exactly 10 digits."); |
|||
} |
|||
|
|||
try { |
|||
// Validate input |
|||
if (mobileNo == null || mobileNo.toString().trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Missing or empty 'mobileNo' parameter."); |
|||
} |
|||
|
|||
// Search for counsellor using mobile1 or mobile2 |
|||
List<Map<String, Object>> counsellorList = hallService.findCounsellorByMobile(mobileNo); |
|||
|
|||
if (counsellorList == null || counsellorList.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Counsellor mobile number not found."); |
|||
} |
|||
|
|||
Map<String, Object> counsellor = counsellorList.get(0); |
|||
String mobile1 = String.valueOf(counsellor.get("mobile1")); |
|||
String mobile2 = String.valueOf(counsellor.get("mobile2")); |
|||
|
|||
// Check if either number is already used in Users table |
|||
boolean isMobile1Used = !hallService.checkMobileExits(Long.parseLong(mobile1)).isEmpty(); |
|||
boolean isMobile2Used = !hallService.checkMobileExits(Long.parseLong(mobile2)).isEmpty(); |
|||
|
|||
if (isMobile1Used || isMobile2Used) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT) |
|||
.body("One of the counsellor's mobile numbers is already used."); |
|||
} |
|||
|
|||
return ResponseEntity.ok(counsellor.get("name").toString()); |
|||
|
|||
} catch (NumberFormatException e) { |
|||
return ResponseEntity.badRequest().body("Invalid mobile number format."); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Mobile number verification failed."); |
|||
} |
|||
} |
|||
|
|||
// acknowledgment |
|||
/* |
|||
* @GetMapping("/acknowledgement") public ResponseEntity<Map<String, Object>> |
|||
* getBookingDetails(@RequestParam(value = "bookingId", required = false) int |
|||
* bookingId) { Map<String, Object> bookingDetails = |
|||
* hallService.getBookingDetailsById(bookingId); return |
|||
* ResponseEntity.ok(bookingDetails); } |
|||
*/ |
|||
@GetMapping("/acknowledgement") |
|||
public ResponseEntity<?> getBookingDetails(@RequestParam(value = "bookingId", required = false) Integer bookingId) { |
|||
if (bookingId == null) { |
|||
return ResponseEntity.badRequest().body("Booking ID is required."); |
|||
} |
|||
|
|||
try { |
|||
Map<String, Object> bookingDetails = hallService.getBookingDetailsById(bookingId); |
|||
|
|||
return ResponseEntity.ok(bookingDetails); |
|||
|
|||
} catch (EmptyResultDataAccessException ex) { |
|||
// No booking found |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No booking found for bookingId"); |
|||
} catch (Exception e) { |
|||
// Any other error |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
//mobile |
|||
/* |
|||
* @GetMapping("/viewhistory") public ResponseEntity<Map<String, Object>> |
|||
* getBookingsByMobile( |
|||
* |
|||
* @RequestParam("mobileNumber") Long mobileNumber) { |
|||
* |
|||
* |
|||
* Map<String, Object> response = new HashMap<>(); |
|||
* |
|||
* // Step 1: Check if user exists List<Map<String, Object>> userResult = |
|||
* hallService.checkMobileExits(mobileNumber); |
|||
* |
|||
* if (userResult.isEmpty()) { response.put("status", "NOT_FOUND"); |
|||
* response.put("message", "No user found with the given mobile number"); return |
|||
* ResponseEntity.ok(response); } |
|||
* |
|||
* // Step 2: If exists → Call service List<Map<String, Object>> bookings = |
|||
* hallService.getBookingsByMobile(mobileNumber); |
|||
* |
|||
* response.put("status", "SUCCESS"); |
|||
* |
|||
* response.put("mobile_no", mobileNumber); response.put("bookings", bookings); |
|||
* |
|||
* return ResponseEntity.ok(response); } |
|||
*/ |
|||
@GetMapping("/viewhistory") |
|||
public ResponseEntity<?> getBookingsByMobile( |
|||
@RequestParam(value = "mobileNumber", required = false) Long mobileNumber) { |
|||
if (mobileNumber == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
|
|||
// Check if mobile number is exactly 10 digits |
|||
String mobileStr = String.valueOf(mobileNumber); |
|||
if (mobileStr.length() != 10) { |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Mobile number must be exactly 10 digits."); |
|||
} |
|||
|
|||
try { |
|||
// Step 1: Check if user exists |
|||
List<Map<String, Object>> userResult = hallService.checkMobileExits(mobileNumber); |
|||
if (userResult.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No user found with the given mobile number "); |
|||
} |
|||
|
|||
// Step 2: Get bookings |
|||
List<Map<String, Object>> bookings = hallService.getBookingsByMobile(mobileNumber); |
|||
if (bookings == null || bookings.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body("No bookings found for mobile number: " + mobileNumber); |
|||
} |
|||
|
|||
// Success response |
|||
Map<String, Object> response = new HashMap<>(); |
|||
response.put("status", "SUCCESS"); |
|||
response.put("mobile_no", mobileNumber); |
|||
response.put("bookings", bookings); |
|||
|
|||
return ResponseEntity.ok(response); |
|||
|
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@PostMapping(path = "/saveTheRequest2", consumes = {"multipart/form-data"}) |
|||
public ResponseEntity<?> saveTheBookingDetails2(HttpServletRequest request) { |
|||
try { |
|||
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; |
|||
Map<String, Object> bookingDetails = splitFormData(multipartRequest); |
|||
Map<String, Object> saveBookingDetails = hallService.saveBookingDetails(bookingDetails); |
|||
|
|||
return ResponseEntity.ok(new ApiResponse("success", "Booking details saved successfully", |
|||
saveBookingDetails, HttpStatus.OK.value())); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(new ApiResponse("error", "Failed to save booking details " + e.getMessage(), null, |
|||
HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
public Map<String, Object> splitFormData(MultipartHttpServletRequest multipartRequest) { |
|||
Map<String, Object> formData = new HashMap<>(); |
|||
|
|||
// Iterate through the request parameters |
|||
Enumeration<String> parameterNames = multipartRequest.getParameterNames(); |
|||
while (parameterNames.hasMoreElements()) { |
|||
String paramName = parameterNames.nextElement(); |
|||
String paramValues = multipartRequest.getParameter(paramName); |
|||
formData.put(paramName, paramValues); |
|||
} |
|||
|
|||
// Iterate through the request parts (files) |
|||
try { |
|||
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); |
|||
for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) { |
|||
MultipartFile file = entry.getValue(); |
|||
if (!file.isEmpty()) { |
|||
formData.put(entry.getKey(), file); |
|||
} |
|||
} |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
return formData; |
|||
} |
|||
|
|||
@PostMapping("/payment-request") |
|||
public ResponseEntity<?> startPayment(@RequestParam int bookingId) { |
|||
try { |
|||
Map<String, Object> paymentDetails = hallService.startPayment(bookingId); |
|||
|
|||
return ResponseEntity.ok(new ApiResponse("success", "Payment request initiated successfully", |
|||
paymentDetails, HttpStatus.OK.value())); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(new ApiResponse("error", "Failed to initiate payment request: " + e.getMessage(), null, |
|||
HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
@PostMapping("/payment-response") |
|||
public ResponseEntity<?> paymentResponse(@RequestParam String orderId, @RequestBody PaymentWebhookPayload payload) { |
|||
try { |
|||
ResponseEntity<?> result = chPaymentService.processPaymentResponse(orderId, payload); |
|||
|
|||
return ResponseEntity |
|||
.ok(new ApiResponse("success", "Payment processed successfully", result, HttpStatus.OK.value())); |
|||
|
|||
} catch (IllegalArgumentException e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.badRequest().body(new ApiResponse("error", "Invalid request: " + e.getMessage(), null, |
|||
HttpStatus.BAD_REQUEST.value())); |
|||
|
|||
} catch (EmptyResultDataAccessException e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ApiResponse("error", |
|||
"No payment record found for Order ID: " + orderId, null, HttpStatus.NOT_FOUND.value())); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ApiResponse("error", |
|||
"Failed to Process the Payment: " + e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/checkSlot") |
|||
public ResponseEntity<Map<String, Object>> checkSlotAvailability( |
|||
@RequestParam int hallId, |
|||
@RequestParam String startDate, |
|||
@RequestParam String endDate, |
|||
@RequestParam int startingSlot, // 1 = morning, 2 = evening |
|||
@RequestParam int endingSlot // 1 = morning, 2 = evening |
|||
) { |
|||
Map<String, Object> result = hallService.checkSlotAvailability(hallId, startDate, endDate, startingSlot, endingSlot); |
|||
return ResponseEntity.ok(result); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,198 @@ |
|||
package com.gcc.restapiservices.communityHall.dto; |
|||
|
|||
import java.math.BigDecimal; |
|||
|
|||
public class PaymentWebhookPayload { |
|||
private String reference_id; |
|||
private Currency currency; |
|||
private Amount paymentAmount; |
|||
private Transaction transaction; |
|||
|
|||
public String getReference_id() { |
|||
return reference_id; |
|||
} |
|||
|
|||
public void setReference_id(String reference_id) { |
|||
this.reference_id = reference_id; |
|||
} |
|||
|
|||
public Currency getCurrency() { |
|||
return currency; |
|||
} |
|||
|
|||
public void setCurrency(Currency currency) { |
|||
this.currency = currency; |
|||
} |
|||
|
|||
public Amount getPaymentAmount() { |
|||
return paymentAmount; |
|||
} |
|||
|
|||
public void setPaymentAmount(Amount paymentAmount) { |
|||
this.paymentAmount = paymentAmount; |
|||
} |
|||
|
|||
public Transaction getTransaction() { |
|||
return transaction; |
|||
} |
|||
|
|||
public void setTransaction(Transaction transaction) { |
|||
this.transaction = transaction; |
|||
} |
|||
|
|||
public static class Currency { |
|||
private String reference_id; |
|||
private Amount amount; |
|||
private String currency; |
|||
private Transaction transaction; |
|||
|
|||
public String getReference_id() { |
|||
return reference_id; |
|||
} |
|||
|
|||
public void setReference_id(String reference_id) { |
|||
this.reference_id = reference_id; |
|||
} |
|||
|
|||
public Amount getAmount() { |
|||
return amount; |
|||
} |
|||
|
|||
public void setAmount(Amount amount) { |
|||
this.amount = amount; |
|||
} |
|||
|
|||
public String getCurrency() { |
|||
return currency; |
|||
} |
|||
|
|||
public void setCurrency(String currency) { |
|||
this.currency = currency; |
|||
} |
|||
|
|||
public Transaction getTransaction() { |
|||
return transaction; |
|||
} |
|||
|
|||
public void setTransaction(Transaction transaction) { |
|||
this.transaction = transaction; |
|||
} |
|||
} |
|||
|
|||
public static class Amount { |
|||
private double value; |
|||
private double offset; |
|||
|
|||
public double getValue() { |
|||
return value; |
|||
} |
|||
|
|||
public void setValue(double value) { |
|||
this.value = value; |
|||
} |
|||
|
|||
public double getOffset() { |
|||
return offset; |
|||
} |
|||
|
|||
public void setOffset(double offset) { |
|||
this.offset = offset; |
|||
} |
|||
} |
|||
|
|||
public static class Transaction { |
|||
private String id; |
|||
private String pg_transaction_id; |
|||
private String type; |
|||
private String status; |
|||
private long created_timestamp; |
|||
private long updated_timestamp; |
|||
private Amount amount; |
|||
private String currency; |
|||
private Method method; |
|||
|
|||
public String getId() { |
|||
return id; |
|||
} |
|||
|
|||
public void setId(String id) { |
|||
this.id = id; |
|||
} |
|||
|
|||
public String getPg_transaction_id() { |
|||
return pg_transaction_id; |
|||
} |
|||
|
|||
public void setPg_transaction_id(String pg_transaction_id) { |
|||
this.pg_transaction_id = pg_transaction_id; |
|||
} |
|||
|
|||
public String getType() { |
|||
return type; |
|||
} |
|||
|
|||
public void setType(String type) { |
|||
this.type = type; |
|||
} |
|||
|
|||
public String getStatus() { |
|||
return status; |
|||
} |
|||
|
|||
public void setStatus(String status) { |
|||
this.status = status; |
|||
} |
|||
|
|||
public long getCreated_timestamp() { |
|||
return created_timestamp; |
|||
} |
|||
|
|||
public void setCreated_timestamp(long created_timestamp) { |
|||
this.created_timestamp = created_timestamp; |
|||
} |
|||
|
|||
public long getUpdated_timestamp() { |
|||
return updated_timestamp; |
|||
} |
|||
|
|||
public void setUpdated_timestamp(long updated_timestamp) { |
|||
this.updated_timestamp = updated_timestamp; |
|||
} |
|||
|
|||
public Amount getAmount() { |
|||
return amount; |
|||
} |
|||
|
|||
public void setAmount(Amount amount) { |
|||
this.amount = amount; |
|||
} |
|||
|
|||
public String getCurrency() { |
|||
return currency; |
|||
} |
|||
|
|||
public void setCurrency(String currency) { |
|||
this.currency = currency; |
|||
} |
|||
|
|||
public Method getMethod() { |
|||
return method; |
|||
} |
|||
|
|||
public void setMethod(Method method) { |
|||
this.method = method; |
|||
} |
|||
} |
|||
|
|||
public static class Method { |
|||
private String type; |
|||
|
|||
public String getType() { |
|||
return type; |
|||
} |
|||
|
|||
public void setType(String type) { |
|||
this.type = type; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,83 @@ |
|||
package com.gcc.restapiservices.communityHall.dto; |
|||
|
|||
public class TransactionData { |
|||
private Merchant merchant = new Merchant(); |
|||
private Transaction transaction = new Transaction(); |
|||
|
|||
public Merchant getMerchant() { |
|||
return merchant; |
|||
} |
|||
|
|||
public Transaction getTransaction() { |
|||
return transaction; |
|||
} |
|||
|
|||
public static class Merchant { |
|||
private String identifier; |
|||
|
|||
public String getIdentifier() { |
|||
return identifier; |
|||
} |
|||
|
|||
public void setIdentifier(String identifier) { |
|||
this.identifier = identifier; |
|||
} |
|||
} |
|||
|
|||
public static class Transaction { |
|||
private String amount; |
|||
private String identifier; |
|||
private String dateTime; |
|||
private String requestType; |
|||
private String token; |
|||
private String reference; |
|||
|
|||
public String getAmount() { |
|||
return amount; |
|||
} |
|||
|
|||
public void setAmount(String amount) { |
|||
this.amount = amount; |
|||
} |
|||
|
|||
public String getIdentifier() { |
|||
return identifier; |
|||
} |
|||
|
|||
public void setIdentifier(String identifier) { |
|||
this.identifier = identifier; |
|||
} |
|||
|
|||
public String getDateTime() { |
|||
return dateTime; |
|||
} |
|||
|
|||
public void setDateTime(String dateTime) { |
|||
this.dateTime = dateTime; |
|||
} |
|||
|
|||
public String getRequestType() { |
|||
return requestType; |
|||
} |
|||
|
|||
public void setRequestType(String requestType) { |
|||
this.requestType = requestType; |
|||
} |
|||
|
|||
public String getToken() { |
|||
return token; |
|||
} |
|||
|
|||
public void setToken(String token) { |
|||
this.token = token; |
|||
} |
|||
|
|||
public String getReference() { |
|||
return reference; |
|||
} |
|||
|
|||
public void setReference(String reference) { |
|||
this.reference = reference; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,73 @@ |
|||
package com.gcc.restapiservices.communityHall.dto; |
|||
|
|||
public class TransactionRefundResponse { |
|||
private String merchantTransactionIdentifier; |
|||
private PaymentMethod paymentMethod; |
|||
|
|||
public String getMerchantTransactionIdentifier() { |
|||
return merchantTransactionIdentifier; |
|||
} |
|||
|
|||
public void setMerchantTransactionIdentifier(String merchantTransactionIdentifier) { |
|||
this.merchantTransactionIdentifier = merchantTransactionIdentifier; |
|||
} |
|||
|
|||
public PaymentMethod getPaymentMethod() { |
|||
return paymentMethod; |
|||
} |
|||
|
|||
public void setPaymentMethod(PaymentMethod paymentMethod) { |
|||
this.paymentMethod = paymentMethod; |
|||
} |
|||
|
|||
public static class PaymentMethod { |
|||
private PaymentTransaction paymentTransaction; |
|||
|
|||
public PaymentTransaction getPaymentTransaction() { |
|||
return paymentTransaction; |
|||
} |
|||
|
|||
public void setPaymentTransaction(PaymentTransaction paymentTransaction) { |
|||
this.paymentTransaction = paymentTransaction; |
|||
} |
|||
} |
|||
|
|||
public static class PaymentTransaction { |
|||
private String statusCode; |
|||
private String amount; |
|||
private String balanceAmount; |
|||
private String refundIdentifier; |
|||
|
|||
public String getStatusCode() { |
|||
return statusCode; |
|||
} |
|||
|
|||
public void setStatusCode(String statusCode) { |
|||
this.statusCode = statusCode; |
|||
} |
|||
|
|||
public String getAmount() { |
|||
return amount; |
|||
} |
|||
|
|||
public void setAmount(String amount) { |
|||
this.amount = amount; |
|||
} |
|||
|
|||
public String getBalanceAmount() { |
|||
return balanceAmount; |
|||
} |
|||
|
|||
public void setBalanceAmount(String balanceAmount) { |
|||
this.balanceAmount = balanceAmount; |
|||
} |
|||
|
|||
public String getRefundIdentifier() { |
|||
return refundIdentifier; |
|||
} |
|||
|
|||
public void setRefundIdentifier(String refundIdentifier) { |
|||
this.refundIdentifier = refundIdentifier; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,536 @@ |
|||
package com.gcc.restapiservices.communityHall.service; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.gcc.restapiservices.communityHall.configuration.PaymentConfig; |
|||
import com.gcc.restapiservices.communityHall.dto.PaymentWebhookPayload; |
|||
import com.gcc.restapiservices.communityHall.dto.TransactionData; |
|||
import com.gcc.restapiservices.communityHall.dto.TransactionRefundResponse; |
|||
import com.gcc.restapiservices.communityHall.util.EncryptionUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Propagation; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import java.util.HashMap; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.math.BigDecimal; |
|||
import java.time.Instant; |
|||
import java.time.LocalDate; |
|||
import java.time.ZoneId; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
@Service |
|||
public class CHPaymentService { |
|||
|
|||
@Autowired |
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
@Autowired |
|||
private PaymentConfig paymentConfig; |
|||
|
|||
@Autowired |
|||
private WhatsappMsgServiceImpl whatsappMsgServiceImpl; |
|||
|
|||
@Autowired |
|||
private EncryptionUtils encryptionUtils; |
|||
|
|||
private final ObjectMapper objectMapper = new ObjectMapper(); |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCommunityHallDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
@Transactional("mysqlCommunityHallTransactionManager") |
|||
public ResponseEntity<?> processPaymentResponse( |
|||
@RequestParam String OrderId, |
|||
@RequestBody PaymentWebhookPayload payload) throws Exception { |
|||
|
|||
Map<String, Object> result = new HashMap<>(); |
|||
|
|||
String transactionId = OrderId; |
|||
String pgTxnId = payload.getTransaction().getPg_transaction_id(); |
|||
String status = payload.getTransaction().getStatus(); |
|||
double amount = payload.getTransaction().getAmount().getValue() / 100.0; |
|||
String dateTime = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss") |
|||
.withZone(ZoneId.of("Asia/Kolkata")) |
|||
.format(Instant.ofEpochSecond(payload.getTransaction().getCreated_timestamp())); |
|||
|
|||
Map<String, Object> txn; |
|||
try { |
|||
txn = jdbcTemplate.queryForMap( |
|||
"SELECT * FROM transaction_response WHERE txansaction_id = ? AND status_code ='temp' ", |
|||
transactionId); |
|||
} catch (EmptyResultDataAccessException e) { |
|||
result.put("status", "error"); |
|||
result.put("message", "Transaction not found or already processed."); |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(result); |
|||
} |
|||
|
|||
int bookingId = (int) txn.get("booking_id"); |
|||
int hallId = (int) txn.get("hall_id"); |
|||
String userId = (String) txn.get("user_id"); |
|||
|
|||
jdbcTemplate.update( |
|||
"UPDATE transaction_response SET tpsl_txn_id = ?, amount = ?, date = ?, status_code = ?, response = ?, " |
|||
+ |
|||
"booking_id = ?, hall_id = ?, user_id = ? WHERE txansaction_id = ?", |
|||
pgTxnId, String.valueOf(amount), dateTime, status, |
|||
objectMapper.writeValueAsString(payload), bookingId, hallId, userId, transactionId); |
|||
|
|||
Map<String, Object> booking; |
|||
try { |
|||
booking = jdbcTemplate.queryForMap("SELECT * FROM booking_details WHERE booking_id = ?", bookingId); |
|||
} catch (EmptyResultDataAccessException e) { |
|||
result.put("status", "error"); |
|||
result.put("message", "Booking not found."); |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(result); |
|||
} |
|||
|
|||
double expectedAmount = booking.get("amount_received") != null |
|||
? ((Number) booking.get("amount_received")).doubleValue() |
|||
: 0.0; |
|||
|
|||
jdbcTemplate.update("INSERT INTO payments " |
|||
+ " (transaction_id, amount_received, payment_status, cdate, booking_details_booking_id) " |
|||
+ " VALUES (?, ?, ?, ?, ?)", transactionId, amount, "Not Completed", new Date(), |
|||
bookingId); |
|||
|
|||
if (expectedAmount != amount) { |
|||
updatePaymentStatus(transactionId, "Failed"); |
|||
// bookingFailure(bookingId, 1); |
|||
result.put("status", "error"); |
|||
result.put("message", "Amount mismatch. Payment failed."); |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result); |
|||
} |
|||
|
|||
if ("success".equalsIgnoreCase(status)) { |
|||
updatePaymentStatus(transactionId, "Success"); |
|||
confirmBooking(bookingId); |
|||
|
|||
String acknowledgementUrl = "https://gccservices.chennaicorporation.gov.in/communityhall/user/acknowledgement?bookingId=" |
|||
+ bookingId; |
|||
result.put("status", "success"); |
|||
result.put("message", "Payment processed successfully."); |
|||
result.put("acknowledgement_url", acknowledgementUrl); |
|||
return ResponseEntity.ok(result); |
|||
} else { |
|||
updatePaymentStatus(transactionId, "Failed"); |
|||
result.put("status", "error"); |
|||
result.put("message", "Payment failed."); |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result); |
|||
} |
|||
} |
|||
|
|||
public void updatePaymentStatus(String transactionId, String status) { |
|||
jdbcTemplate.update("UPDATE payments SET payment_status = ? WHERE transaction_id = ?", status, transactionId); |
|||
} |
|||
|
|||
@Transactional(value = "mysqlCommunityHallTransactionManager", propagation = Propagation.REQUIRES_NEW) |
|||
public void bookingFailure(int bookingId, int flag) { |
|||
String comment = flag == 1 ? "Booking Not Confirmed" |
|||
: "Slot occupied by other user, Amount paid will be refunded."; |
|||
jdbcTemplate.update("UPDATE booking_details SET booking_status = 'REFUNDED', comments = ? WHERE booking_id = ?", |
|||
comment, bookingId); |
|||
/* |
|||
* String refundStatus = booking.get("refund_status").toString(); |
|||
* if (!("COMPLETED".equalsIgnoreCase(refundStatus)) && |
|||
* !("CLOSED".equalsIgnoreCase(refundStatus))) { |
|||
* refundTheAmount(bookingId, Integer.parseInt(userId)); |
|||
* } |
|||
*/ |
|||
} |
|||
|
|||
@Transactional("mysqlCommunityHallTransactionManager") |
|||
public String confirmBooking(int bookingId) { |
|||
Map<String, Object> booking = jdbcTemplate.queryForMap("SELECT * FROM booking_details WHERE booking_id = ?", |
|||
bookingId); |
|||
try { |
|||
int hallId = (int) booking.get("hall_details_hall_id"); |
|||
LocalDate startDate = LocalDate.parse((String) booking.get("start_date")); |
|||
LocalDate endDate = LocalDate.parse((String) booking.get("end_date")); |
|||
int startSlot = (int) booking.get("starting_slot"); |
|||
int endSlot = (int) booking.get("ending_slot"); |
|||
double noOfDays = booking.get("no_of_days") != null ? (double) booking.get("no_of_days") : 1.0; |
|||
|
|||
// int i = 0; |
|||
// for (LocalDate date = startDate; !date.isAfter(endDate); date = |
|||
// date.plusDays(1)) { |
|||
// String checkSql = "SELECT * FROM booking_calendar WHERE bdate = ? AND hall_id |
|||
// = ?"; |
|||
// List<Map<String, Object>> existing = jdbcTemplate.queryForList(checkSql, |
|||
// date, hallId); |
|||
|
|||
// if (!existing.isEmpty()) { |
|||
// Map<String, Object> cal = existing.get(0); |
|||
// if ((boolean) cal.get("is_blocked")) throw new RuntimeException("GCC Blocked |
|||
// Date"); |
|||
// boolean morningBooked = (boolean) cal.get("morning_slot"); |
|||
// boolean eveningBooked = (boolean) cal.get("evening_slot"); |
|||
// if ((date.equals(startDate) && startSlot == 1 && morningBooked) || |
|||
// (date.equals(startDate) && startSlot == 2 && eveningBooked) || |
|||
// (date.equals(endDate) && endSlot == 1 && morningBooked) || |
|||
// (date.equals(endDate) && endSlot == 2 && eveningBooked)) { |
|||
// throw new RuntimeException("Slot already booked or partially occupied"); |
|||
// } |
|||
// updateCalendarWithBooking(date, bookingId, hallId, startDate, endDate, |
|||
// startSlot, endSlot, i); |
|||
// } else { |
|||
// insertCalendarWithBooking(date, bookingId, hallId, startDate, endDate, |
|||
// startSlot, endSlot, i); |
|||
// } |
|||
// i++; |
|||
// } |
|||
|
|||
int i = 0; |
|||
for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { |
|||
|
|||
String checkSql = "SELECT * FROM booking_calendar WHERE bdate = ? AND hall_id = ?"; |
|||
List<Map<String, Object>> existing = jdbcTemplate.queryForList(checkSql, date, hallId); |
|||
|
|||
if (!existing.isEmpty()) { |
|||
Map<String, Object> cal = existing.get(0); |
|||
if ((boolean) cal.get("is_blocked")) |
|||
throw new RuntimeException("GCC Blocked Date"); |
|||
|
|||
boolean morningBooked = (boolean) cal.get("morning_slot"); |
|||
boolean eveningBooked = (boolean) cal.get("evening_slot"); |
|||
int isBooked = (int) cal.get("is_booked"); |
|||
String bookingId1 = (String) cal.get("booking_id_1"); |
|||
String bookingId2 = (String) cal.get("booking_id_2"); |
|||
|
|||
// ====== Validation ====== |
|||
if ((date.equals(startDate) && startSlot == 1 && morningBooked) || |
|||
(date.equals(startDate) && startSlot == 2 && eveningBooked) || |
|||
(date.equals(endDate) && endSlot == 1 && morningBooked) || |
|||
(date.equals(endDate) && endSlot == 2 && eveningBooked) || |
|||
(morningBooked && eveningBooked)) { |
|||
throw new RuntimeException("Slot already booked or partially occupied"); |
|||
} |
|||
|
|||
// ====== Update slots ====== |
|||
if (date.equals(startDate)) { |
|||
if (startSlot == 1) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
if (!date.equals(endDate) || (startDate.equals(endDate) && endSlot == 2)) { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} else { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} else if (date.equals(endDate)) { |
|||
if (endSlot == 1) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} else { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
if (endSlot == 2) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} |
|||
} else { |
|||
morningBooked = true; |
|||
eveningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked += 2; |
|||
} |
|||
|
|||
// ====== Run UPDATE ====== |
|||
String updateSql = "UPDATE booking_calendar " + |
|||
"SET morning_slot=?, evening_slot=?, is_booked=?, booking_id_1=?, booking_id_2=? " + |
|||
"WHERE bdate=? AND hall_id=?"; |
|||
jdbcTemplate.update(updateSql, |
|||
morningBooked, eveningBooked, isBooked, bookingId1, bookingId2, |
|||
date, hallId); |
|||
|
|||
} else { |
|||
// ====== Insert new row ====== |
|||
boolean morningBooked = false; |
|||
boolean eveningBooked = false; |
|||
boolean isDelete = false; |
|||
boolean isBlocked = false; |
|||
int isBooked = 0; |
|||
String bookingId1 = null, bookingId2 = null; |
|||
|
|||
if (date.equals(startDate)) { |
|||
if (startSlot == 1) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
if (!date.equals(endDate) || (startDate.equals(endDate) && endSlot == 2)) { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} else { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} else if (date.equals(endDate)) { |
|||
if (endSlot == 1) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} else { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
if (endSlot == 2) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} |
|||
} else { |
|||
morningBooked = true; |
|||
eveningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked += 2; |
|||
} |
|||
|
|||
String uniqueId = date.format(DateTimeFormatter.ofPattern("yyyyMMdd")) + hallId; |
|||
|
|||
System.out.println("uniqueId...."+uniqueId+"\n hallId: "+hallId+"\n morningBooked: "+morningBooked+ |
|||
"\n eveningBooked: "+eveningBooked+"\n isBooked: "+isBooked+"\n bookingId1: "+bookingId1+"\n bookingId2: "+bookingId2); |
|||
|
|||
String insertSql = "INSERT INTO booking_calendar " + |
|||
"(bdate, hall_id, morning_slot, evening_slot, is_booked, booking_id_1, booking_id_2, is_active, unique_id, is_delete, is_blocked) " |
|||
+"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
|||
jdbcTemplate.update(insertSql,date, hallId, morningBooked, eveningBooked, isBooked,bookingId1, bookingId2, true, uniqueId, isDelete, isBlocked); |
|||
} |
|||
i++; |
|||
} |
|||
|
|||
String reason = (String) booking.get("reason"); |
|||
String reasonCode = fetchReasonCode(reason); |
|||
|
|||
String status = "APPROVED"; |
|||
String comments = "Booking Confirmed Successfully"; |
|||
if (reasonCode != null && !reasonCode.trim().isEmpty()) { |
|||
if (List.of("CGE", "CAO", "SGE").contains(reasonCode)) { |
|||
status = "WAITING_FOR_NOC"; |
|||
comments = "Waiting For NOC Documents"; |
|||
} |
|||
} |
|||
|
|||
jdbcTemplate.update("UPDATE booking_details SET booking_status = ?, comments = ? WHERE booking_id = ?", |
|||
status, comments, bookingId); |
|||
|
|||
sendConfirmationMessages(bookingId, booking); |
|||
return comments; |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
// bookingFailure(bookingId, 2); |
|||
return "redirect:/communityhall/user/acknowledgement?bookingId=" + bookingId; |
|||
} |
|||
} |
|||
|
|||
private void updateCalendarWithBooking(LocalDate date, int bookingId, int hallId, LocalDate startDate, |
|||
LocalDate endDate, int startSlot, int endSlot, int i) { |
|||
String updateSql = "UPDATE booking_calendar SET morning_slot = ?, evening_slot = ?, booking_id_1 = ?, booking_id_2 = ?, is_booked = is_booked + ? WHERE bdate = ? AND hall_id = ?"; |
|||
boolean isMorning = true; |
|||
boolean isEvening = true; |
|||
int increment = 2; |
|||
jdbcTemplate.update(updateSql, isMorning, isEvening, bookingId, bookingId, increment, date, hallId); |
|||
} |
|||
|
|||
private void insertCalendarWithBooking(LocalDate date, int bookingId, int hallId, LocalDate startDate, |
|||
LocalDate endDate, int startSlot, int endSlot, int i) { |
|||
String uniqueId = date.format(DateTimeFormatter.ofPattern("yyyyMMdd")) + hallId; |
|||
String insertSql = "INSERT INTO booking_calendar (bdate, hall_id, is_active, is_booked, is_delete, morning_slot, evening_slot, booking_id_1, booking_id_2, is_blocked, unique_id) VALUES (?, ?, true, ?, false, ?, ?, ?, ?, false, ?)"; |
|||
jdbcTemplate.update(insertSql, date, hallId, 2, true, true, bookingId, bookingId, uniqueId); |
|||
} |
|||
|
|||
private String fetchReasonCode(String reason) { |
|||
try { |
|||
String sql = "SELECT reasoncode FROM reason_master WHERE reason = ?"; |
|||
return jdbcTemplate.queryForObject(sql, String.class, reason); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ""; |
|||
} |
|||
} |
|||
|
|||
private String sendConfirmationMessages(int bookingId, Map<String, Object> booking) { |
|||
System.out.println("confirmation message calling.."); |
|||
try { |
|||
String bookingconfirmationmsg, urlString, whatsupmsg; |
|||
String reason = booking.get("reason").toString(); |
|||
String reasonCode = fetchReasonCode(reason); |
|||
String bookingDate = booking.get("booking_date").toString(); |
|||
String startDate = booking.get("start_date").toString(); |
|||
|
|||
int userId = Integer.parseInt(booking.get("users_user_id").toString()); |
|||
|
|||
Map<String, Object> userData = jdbcTemplate.queryForMap("SELECT * FROM users WHERE user_id = ? ", userId); |
|||
String userMobNo = userData.get("mobile_no").toString(); |
|||
|
|||
if (reasonCode != null && !reasonCode.trim().isEmpty()) { |
|||
if (reasonCode.equals("CGE") || reasonCode.equals("CAO") || reasonCode.equals("SGE")) { |
|||
|
|||
updateBookingStatus(bookingId, "WAITING_FOR_NOC", "Waiting For NOC Documents"); |
|||
|
|||
bookingconfirmationmsg = "Your booking ID " + bookingId + " on " + bookingDate |
|||
+ " has been confirmed successfully. Thanks for using GCC Community Hall Booking System."; |
|||
|
|||
urlString = "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to=" + userMobNo + |
|||
"&from=GCCCRP&body=" + bookingconfirmationmsg |
|||
+ "&entityid=1401572690000011081&templateid=1407172346459428987"; |
|||
|
|||
whatsupmsg = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" |
|||
+userMobNo + "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Your+booking+with+ID+" |
|||
+bookingId + "+on+" + bookingDate+ "+has+been+successfully+confirmed.+%0AThanks+for+using+GCC+Community+Hall+Booking+System."; |
|||
|
|||
whatsappMsgServiceImpl.sendMsg(whatsupmsg); |
|||
whatsappMsgServiceImpl.sendSMS(urlString); |
|||
return "Waiting For NOC Documents"; |
|||
|
|||
} else { |
|||
updateBookingStatus(bookingId, "APPROVED", "Booking Confirmed Successfully"); |
|||
|
|||
bookingconfirmationmsg = "Your booking ID " + bookingId + " on " + startDate |
|||
+ " has been confirmed successfully. Thanks for using GCC Community Hall Booking System."; |
|||
|
|||
urlString = "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to=" + userMobNo + |
|||
"&from=GCCCRP&body=" + bookingconfirmationmsg |
|||
+ "&entityid=1401572690000011081&templateid=1407172346459428987"; |
|||
|
|||
whatsupmsg = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" |
|||
+ |
|||
userMobNo + "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Your+booking+with+ID+" |
|||
+ |
|||
bookingId + "+on+" + startDate |
|||
+ "+has+been+successfully+confirmed.+%0AThanks+for+using+GCC+Community+Hall+Booking+System."; |
|||
|
|||
whatsappMsgServiceImpl.sendMsg(whatsupmsg); |
|||
whatsappMsgServiceImpl.sendSMS(urlString); |
|||
return "Booking confirmed successfully"; |
|||
} |
|||
} |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
throw new RuntimeException(e); |
|||
} |
|||
return "Incorrect booking data"; |
|||
} |
|||
|
|||
/* |
|||
* public String refundTheAmount(int bookingId, int userId) { |
|||
* try { |
|||
* |
|||
* // get mobile no using userId --> need to add |
|||
* Map<String, Object> txn = jdbcTemplate. |
|||
* queryForMap("SELECT * FROM transaction_response WHERE booking_id = ? AND status_code = ? ORDER BY id DESC LIMIT 1" |
|||
* , bookingId, paymentConfig.getTransactionSuccessCode()); |
|||
* String amount = (String) txn.get("amount"); |
|||
* String txnDate = ((String) txn.get("date")).split(" ")[0]; |
|||
* String tpslTxnId = (String) txn.get("tpsl_txn_id"); |
|||
* |
|||
* TransactionData payload = new TransactionData(); |
|||
* payload.getMerchant().setIdentifier(paymentConfig.getMerchantId()); |
|||
* payload.getTransaction().setAmount(amount); |
|||
* payload.getTransaction().setIdentifier(""); |
|||
* payload.getTransaction().setDateTime(txnDate); |
|||
* payload.getTransaction().setRequestType("R"); |
|||
* payload.getTransaction().setToken(""); |
|||
* payload.getTransaction().setReference(tpslTxnId); |
|||
* |
|||
* String json = objectMapper.writeValueAsString(payload); |
|||
* String encrypted = encryptionUtils.encryptHxRefund(json); |
|||
* |
|||
* String url = "https://www.tpsl-india.in/PaymentGateway/merchant2.pg/" + |
|||
* paymentConfig.getMerchantId(); |
|||
* ResponseEntity<String> response = new RestTemplate().postForEntity(url, |
|||
* encrypted, String.class); |
|||
* String decrypted = encryptionUtils.decryptHxTRefund(response.getBody()); |
|||
* |
|||
* TransactionRefundResponse refundRes = objectMapper.readValue(decrypted, |
|||
* TransactionRefundResponse.class); |
|||
* String refundStatusCode = |
|||
* refundRes.getPaymentMethod().getPaymentTransaction().getStatusCode(); |
|||
* String refundTxnId = refundRes.getMerchantTransactionIdentifier(); |
|||
* String refundIdentifier = |
|||
* refundRes.getPaymentMethod().getPaymentTransaction().getRefundIdentifier(); |
|||
* String refundedAmount = |
|||
* refundRes.getPaymentMethod().getPaymentTransaction().getAmount(); |
|||
* String balanceAmount = |
|||
* refundRes.getPaymentMethod().getPaymentTransaction().getBalanceAmount(); |
|||
* |
|||
* jdbcTemplate. |
|||
* update("INSERT INTO refund_response (booking_id, user_id, response, status_code, txansaction_id, amount, balace_amount, date) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" |
|||
* , bookingId, userId, decrypted, refundStatusCode, refundTxnId, |
|||
* refundedAmount, balanceAmount, LocalDate.now()); |
|||
* |
|||
* Map<String, Object> booking = |
|||
* jdbcTemplate.queryForMap("SELECT * FROM booking_details WHERE booking_id = ?" |
|||
* , bookingId); |
|||
* |
|||
* jdbcTemplate. |
|||
* update("INSERT INTO refund_transaction (amount_refunded, cdate, booking_details_booking_id, refund_identifier, refund_status, transaction_id) VALUES (?, ?, ?, ?, ?, ?)" |
|||
* , Double.parseDouble(refundedAmount), new Date(), bookingId, |
|||
* refundIdentifier, refundStatusCode, refundTxnId); |
|||
* |
|||
* if (refundStatusCode.equals(paymentConfig.getRefundSuccessCode())) { |
|||
* jdbcTemplate. |
|||
* update("UPDATE booking_details SET refund_status = 'COMPLETED' WHERE booking_id = ?" |
|||
* , bookingId); |
|||
* |
|||
* long mobile = (long) booking.get("users_user_id"); |
|||
* double amt = Double.parseDouble(refundedAmount); |
|||
* whatsappMsgServiceImpl.sendSMS(buildSMSUrl(mobile, amt, bookingId)); |
|||
* whatsappMsgServiceImpl.sendMsg(buildWhatsAppUrl(mobile, amt, bookingId)); |
|||
* return "Refunded"; |
|||
* } |
|||
* |
|||
* return "Error"; |
|||
* } catch (Exception e) { |
|||
* e.printStackTrace(); |
|||
* return "error"; |
|||
* } |
|||
* } |
|||
*/ |
|||
|
|||
private String buildSMSUrl(long mobile, double amt, int bookingId) { |
|||
return "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to=" + mobile |
|||
+ "&from=GCCCRP&body=Your refund amount of Rs. " + amt + " for Booking ID " + bookingId |
|||
+ " has been initiated."; |
|||
} |
|||
|
|||
private String buildWhatsAppUrl(long mobile, double amt, int bookingId) { |
|||
return "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" + mobile |
|||
+ "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Your+refund+of+Rs.+" + amt |
|||
+ "+for+Booking+ID+" + bookingId + "+has+been+initiated."; |
|||
} |
|||
|
|||
public void updateBookingStatus(int bookingId, String bookingStatus, String comments) { |
|||
String updateSql = "update booking_details set booking_status =?, comments= ? WHERE booking_id = ?"; |
|||
jdbcTemplate.update(updateSql, bookingStatus, comments, bookingId); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,162 @@ |
|||
package com.gcc.restapiservices.communityHall.service; |
|||
|
|||
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; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.HashMap; |
|||
import java.util.stream.Collectors; |
|||
|
|||
@Service |
|||
public class ReportService { |
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCommunityHallliveDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
// Zone-wise booking data from date to date |
|||
public List<Map<String, Object>> getZoneWiseBookingData(String fromDate, String toDate) { |
|||
String sql = "SELECT hd.zone, " + |
|||
"COUNT(DISTINCT hd.hall_id) AS hall_count, " + |
|||
"SUM(CASE WHEN bd.booking_type = 'ONLINE' AND bd.counter_id IS NULL THEN 1 ELSE 0 END) AS online_bookings, " + |
|||
"SUM(CASE WHEN bd.booking_type = 'ONLINE' AND bd.counter_id IS NOT NULL THEN 1 ELSE 0 END) AS counter_bookings, " + |
|||
"COUNT(bd.booking_id) AS total_bookings " + |
|||
"FROM hall_details hd " + |
|||
"LEFT JOIN booking_details bd ON hd.hall_id = bd.hall_details_hall_id " + |
|||
"AND DATE(bd.booking_date) BETWEEN ? AND ? " + |
|||
"AND bd.booking_status NOT IN ('PENDING','GCC_UNBLOCKED','REFUNDED','GCC_BLOCKED') " + |
|||
"AND bd.booking_type IS NOT NULL " + |
|||
"GROUP BY hd.zone " + |
|||
"ORDER BY hd.zone"; |
|||
|
|||
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, fromDate, toDate); |
|||
|
|||
// Transform to the desired JSON format |
|||
List<Map<String, Object>> jsonResult = new ArrayList<>(); |
|||
|
|||
for (Map<String, Object> row : result) { |
|||
Map<String, Object> zoneData = new HashMap<>(); |
|||
zoneData.put("Zone", row.get("zone")); |
|||
zoneData.put("Hall Count", row.get("hall_count")); |
|||
zoneData.put("Online Bookings", row.get("online_bookings")); |
|||
zoneData.put("Counter Bookings", row.get("counter_bookings")); |
|||
zoneData.put("Total Bookings", row.get("total_bookings")); |
|||
|
|||
jsonResult.add(zoneData); |
|||
} |
|||
|
|||
return jsonResult; |
|||
} |
|||
|
|||
// Helper method to get zone labels |
|||
private String getZoneLabel(String zoneNumber) { |
|||
switch (zoneNumber) { |
|||
case "01": return "Zone 1 - Tondiarpet"; |
|||
case "02": return "Zone 2 - Royapuram"; |
|||
case "03": return "Zone 3 - Thiru Vi Ka Nagar"; |
|||
case "04": return "Zone 4 - Ambattur"; |
|||
case "05": return "Zone 5 - Anna Nagar"; |
|||
case "06": return "Zone 6 - Teynampet"; |
|||
case "07": return "Zone 7 - Kodambakkam"; |
|||
case "08": return "Zone 8 - Valasaravakkam"; |
|||
case "09": return "Zone 9 - Alandur"; |
|||
case "10": return "Zone 10 - Adyar"; |
|||
case "11": return "Zone 11 - Perungudi"; |
|||
case "12": return "Zone 12 - Sholinganallur"; |
|||
case "13": return "Zone 13 - Thiruvottiyur"; |
|||
case "14": return "Zone 14 - Manali"; |
|||
case "15": return "Zone 15 - Madhavaram"; |
|||
default: return "Zone " + zoneNumber; |
|||
} |
|||
} |
|||
|
|||
// From date to date zone for hall details |
|||
public List<Map<String, Object>> getHallDetailsByZoneAndDate(String fromDate, String toDate, String zone) { |
|||
StringBuilder sql = new StringBuilder(); |
|||
sql.append("SELECT hd.hall_id, hd.hall_name, "); |
|||
sql.append("SUM(CASE WHEN bd.booking_type = 'ONLINE' AND bd.counter_id IS NULL THEN 1 ELSE 0 END) AS online_bookings, "); |
|||
sql.append("SUM(CASE WHEN bd.booking_type = 'ONLINE' AND bd.counter_id IS NOT NULL THEN 1 ELSE 0 END) AS counter_bookings, "); |
|||
sql.append("COUNT(bd.booking_id) AS total_bookings "); |
|||
sql.append("FROM hall_details hd "); |
|||
sql.append("LEFT JOIN booking_details bd ON hd.hall_id = bd.hall_details_hall_id "); |
|||
sql.append("AND DATE(bd.booking_date) BETWEEN ? AND ? "); |
|||
sql.append("AND bd.booking_status NOT IN ('PENDING','GCC_UNBLOCKED','REFUNDED','GCC_BLOCKED') " + |
|||
"AND bd.booking_type IS NOT NULL "); |
|||
sql.append("WHERE hd.zone = ? "); |
|||
sql.append("GROUP BY hd.hall_id, hd.hall_name "); |
|||
sql.append("ORDER BY hd.hall_name"); |
|||
|
|||
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql.toString(), fromDate, toDate, zone); |
|||
|
|||
// Transform to the desired JSON format with only requested fields |
|||
List<Map<String, Object>> jsonResult = new ArrayList<>(); |
|||
|
|||
for (Map<String, Object> row : result) { |
|||
Map<String, Object> hallData = new HashMap<>(); |
|||
hallData.put("Hall Name", row.get("hall_name")); |
|||
hallData.put("Hall ID", row.get("hall_id")); |
|||
hallData.put("Online Booking Count", row.get("online_bookings")); |
|||
hallData.put("Counter Booking Count", row.get("counter_bookings")); |
|||
hallData.put("Total Count", row.get("total_bookings")); |
|||
|
|||
jsonResult.add(hallData); |
|||
} |
|||
|
|||
return jsonResult; |
|||
} |
|||
|
|||
// From date to date zone hall ID specific data |
|||
public List<Map<String, Object>> getHallSpecificData(String fromDate, String toDate, String zone, Integer hallId) { |
|||
StringBuilder sql = new StringBuilder(); |
|||
sql.append("SELECT "); |
|||
sql.append("bd.counter_id, bd.hall_details_hall_id, "); |
|||
sql.append("COUNT(bd.booking_id) AS booking_count "); |
|||
sql.append("FROM booking_details bd "); |
|||
sql.append("INNER JOIN hall_details hd ON bd.hall_details_hall_id = hd.hall_id "); |
|||
sql.append("WHERE DATE(bd.booking_date) BETWEEN ? AND ? "); |
|||
sql.append("AND bd.booking_status NOT IN ('PENDING','GCC_UNBLOCKED','REFUNDED','GCC_BLOCKED') "); |
|||
sql.append("AND bd.booking_type IS NOT NULL "); |
|||
sql.append("AND bd.counter_id IS NOT NULL "); |
|||
|
|||
List<Object> params = new ArrayList<>(); |
|||
params.add(fromDate); |
|||
params.add(toDate); |
|||
|
|||
if (zone != null && !zone.trim().isEmpty()) { |
|||
sql.append("AND hd.zone = ? "); |
|||
params.add(zone); |
|||
} |
|||
|
|||
if (hallId != null) { |
|||
sql.append("AND hd.hall_id = ? "); |
|||
params.add(hallId); |
|||
} |
|||
|
|||
sql.append("GROUP BY bd.counter_id, bd.hall_details_hall_id "); |
|||
sql.append("ORDER BY bd.counter_id"); |
|||
|
|||
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); |
|||
|
|||
// Transform to the desired JSON format |
|||
List<Map<String, Object>> jsonResult = new ArrayList<>(); |
|||
|
|||
for (Map<String, Object> row : result) { |
|||
Map<String, Object> counterData = new HashMap<>(); |
|||
counterData.put("Counter ID", row.get("counter_id")); |
|||
counterData.put("Hall ID", row.get("hall_details_hall_id")); |
|||
counterData.put("Booking Count", row.get("booking_count")); |
|||
|
|||
jsonResult.add(counterData); |
|||
} |
|||
|
|||
return jsonResult; |
|||
} |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
package com.gcc.restapiservices.communityHall.service; |
|||
|
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
import java.net.HttpURLConnection; |
|||
import java.net.URL; |
|||
|
|||
@Service |
|||
public class WhatsappMsgServiceImpl { |
|||
|
|||
public String sendMsg(String msgUrl) { |
|||
System.out.println("Whatsapp URL :-" + msgUrl); |
|||
|
|||
String response = ""; |
|||
try { |
|||
HttpURLConnection connection = null; |
|||
|
|||
URL url = new URL(msgUrl); |
|||
connection = (HttpURLConnection) url.openConnection(); |
|||
connection.setRequestMethod("GET"); |
|||
|
|||
int responseCode = connection.getResponseCode(); |
|||
response = responseCode + ""; |
|||
System.out.println("Response Code: " + responseCode); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return response; |
|||
} |
|||
|
|||
public String sendSMS(String SMS_Url) { |
|||
System.out.println("SMS URL:- " + SMS_Url); |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String response = restTemplate.getForObject(SMS_Url, String.class); |
|||
return response; |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,864 @@ |
|||
|
|||
package com.gcc.restapiservices.communityHall.service; |
|||
|
|||
import com.gcc.restapiservices.communityHall.configuration.PaymentConfig; |
|||
import com.gcc.restapiservices.communityHall.util.TransactionNumberGenerator; |
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.core.env.Environment; |
|||
import org.springframework.dao.DataAccessException; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.jdbc.support.GeneratedKeyHolder; |
|||
import org.springframework.jdbc.support.KeyHolder; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import java.util.Random; |
|||
|
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
|
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Random; |
|||
import java.io.File; |
|||
import java.io.FileOutputStream; |
|||
import java.io.IOException; |
|||
import java.math.BigInteger; |
|||
import java.nio.file.Files; |
|||
import java.nio.file.Path; |
|||
import java.nio.file.Paths; |
|||
import java.security.MessageDigest; |
|||
import java.security.NoSuchAlgorithmException; |
|||
import java.security.SecureRandom; |
|||
import java.sql.PreparedStatement; |
|||
import java.sql.Statement; |
|||
import java.time.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.ArrayList; |
|||
import java.util.Collections; |
|||
import java.util.HashMap; |
|||
|
|||
@Service |
|||
|
|||
public class communityHallService { |
|||
private JdbcTemplate jdbcTemplate; |
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
@Autowired |
|||
private Environment environment; |
|||
|
|||
@Autowired |
|||
private PaymentConfig paymentConfig; |
|||
|
|||
@Autowired |
|||
private TransactionNumberGenerator transactionNumberGenerator; |
|||
|
|||
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; |
|||
private static final int STRING_LENGTH = 15; |
|||
private static final Random RANDOM = new SecureRandom(); |
|||
|
|||
@Value("${file.upload.directory.communityhall}") |
|||
private String uploadDirectory; |
|||
|
|||
@Value("${file.fullpath.communityhall}") |
|||
private String serverPath; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCommunityHallDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getHallList() { |
|||
return jdbcTemplate.queryForList("SELECT * FROM hall_details WHERE is_active = 1 order by hall_name asc"); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getReasonMaster() { |
|||
String sql = "SELECT reason_id,reason,maxdays,reasoncode FROM reason_master"; |
|||
return jdbcTemplate.queryForList(sql); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getDocumentsByReasonId(Long reasonId) { |
|||
String sql = "SELECT doc_field_name,field_name FROM reason_document_master WHERE reason_id = ?"; |
|||
return jdbcTemplate.queryForList(sql, reasonId); |
|||
} |
|||
|
|||
public List<Map<String, String>> getRelationTypesAsMap() { |
|||
List<Map<String, String>> relationList = new ArrayList<>(); |
|||
|
|||
String[] relations = {"Self", "Son", "Daughter", "Granddaughter", "Grandson", "Brother", "Sister"}; |
|||
|
|||
for (String rel : relations) { |
|||
Map<String, String> map = new HashMap<>(); |
|||
map.put("relation_name", rel); |
|||
map.put("value", rel); |
|||
relationList.add(map); |
|||
} |
|||
|
|||
return relationList; |
|||
} |
|||
|
|||
public List<Map<String, Object>> getUserDetails(Long Mobilenumber) { |
|||
String sql = "SELECT name,email,mobile_no,doorno,area,location,pin_code,user_status,usertype,profilephoto FROM users WHERE mobile_no = ?"; |
|||
return jdbcTemplate.queryForList(sql, Mobilenumber); |
|||
} |
|||
|
|||
public Map<String, Object> getHallDetailsById(int hallId) { |
|||
String sql = "SELECT * FROM hall_details WHERE hall_id = ?"; |
|||
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, hallId); |
|||
|
|||
if (result.isEmpty()) { |
|||
return null; // or Collections.emptyMap() if you prefer |
|||
} |
|||
|
|||
return result.get(0); |
|||
} |
|||
|
|||
public Map<String, Object> getHallConcessionByHallId(int hallId) { |
|||
String sql = "SELECT * FROM hall_details_concession WHERE hall_id = ?"; |
|||
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, hallId); |
|||
|
|||
if (result.isEmpty()) { |
|||
return null; // or Collections.emptyMap() |
|||
} |
|||
|
|||
return result.get(0); // ✅ safe return of first result |
|||
} |
|||
|
|||
public List<Map<String, Object>> checkMobileExits(Long Mobilenumber) { |
|||
String sql = "SELECT * FROM users WHERE mobile_no = ?"; |
|||
return jdbcTemplate.queryForList(sql, Mobilenumber); |
|||
} |
|||
|
|||
public List<Map<String, Object>> checkEmployeeExits(String EmployeeID) { |
|||
String sql = "SELECT * FROM users WHERE government_id= ?"; |
|||
return jdbcTemplate.queryForList(sql, EmployeeID); |
|||
} |
|||
|
|||
/* |
|||
* public Map<String, Object> getBookingDetailsById(int bookingId) { String sql |
|||
* = "SELECT " + |
|||
* "bd.booking_id, bd.booking_date, bd.start_date, bd.end_date, bd.comments, bd.booking_status, " |
|||
* + |
|||
* "bd.starting_slot, bd.ending_slot, bd.no_of_days, bd.reason, bd.gst, bd.deposit_amount, " |
|||
* + "bd.hall_amount, bd.amount_received AS booking_amount_received, " + |
|||
* "u.name, u.usertype, u.mobile_no, u.email, " + |
|||
* "hd.zone, hd.division, hd.hall_incharge_name, hd.hall_incharge_no, hd.hall_name, " |
|||
* + "CONCAT_WS(', ', hd.street, hd.area, hd.pin_code) AS address, " + |
|||
* "p.transaction_id, p.payment_status, p.amount_received AS payment_amount_received " |
|||
* + "FROM booking_details bd " + |
|||
* "INNER JOIN users u ON bd.users_user_id = u.user_id " + |
|||
* "INNER JOIN hall_details hd ON bd.hall_details_hall_id = hd.hall_id " + |
|||
* "INNER JOIN payments p ON bd.booking_id = p.booking_details_booking_id " + |
|||
* "WHERE bd.booking_id = ?"; |
|||
* |
|||
* return jdbcTemplate.queryForMap(sql, bookingId); } |
|||
*/ |
|||
public Map<String, Object> getBookingDetailsById(int bookingId) { |
|||
String sql = "SELECT " |
|||
+ "bd.booking_id, DATE_FORMAT(bd.booking_date, '%d-%m-%Y') AS booking_date, " |
|||
+ " DATE_FORMAT(bd.start_date, '%d-%m-%Y') AS start_date, " |
|||
+ " DATE_FORMAT(bd.end_date, '%d-%m-%Y') AS end_date, " |
|||
+ " bd.comments, bd.booking_status, " |
|||
+ "bd.starting_slot, bd.ending_slot, bd.no_of_days, bd.reason, bd.gst, bd.deposit_amount, " |
|||
+ "bd.hall_amount, bd.amount_received AS total_amount, " + "u.name, u.usertype, u.mobile_no, u.email, " |
|||
+ "hd.zone, hd.division, hd.hall_incharge_name as caretaker_name, hd.hall_incharge_no as caretaker_mobileno, hd.hall_name, " |
|||
+ "CONCAT_WS(', ', hd.street, hd.area, hd.pin_code) AS hall_address, " |
|||
+ "p.transaction_id, p.payment_status, p.amount_received AS payment_amount_received " |
|||
+ "FROM booking_details bd " + "INNER JOIN users u ON bd.users_user_id = u.user_id " |
|||
+ "INNER JOIN hall_details hd ON bd.hall_details_hall_id = hd.hall_id " |
|||
+ "INNER JOIN payments p ON bd.booking_id = p.booking_details_booking_id " + "WHERE bd.booking_id = ?"; |
|||
|
|||
Map<String, Object> result = jdbcTemplate.queryForMap(sql, bookingId); |
|||
|
|||
// Add the acknowledgement URL to the result |
|||
String acknowledgementUrl = "https://gccservices.chennaicorporation.gov.in/communityhall/user/acknowledgement?bookingId=" + bookingId; |
|||
result.put("acknowledgement_url", acknowledgementUrl); |
|||
|
|||
return result; |
|||
} |
|||
|
|||
// pdf |
|||
|
|||
/* |
|||
* public List<Map<String, Object>> getBookingsByMobile(Long mobileNumber) { |
|||
* String sql = |
|||
* "SELECT bd.booking_id, bd.booking_date, bd.start_date, bd.end_date, " + |
|||
* "bd.starting_slot, bd.ending_slot, bd.reason, bd.booking_status, " + |
|||
* "p.payment_status AS payment_status " + |
|||
* "FROM testcommunityhall.booking_details bd " + |
|||
* "INNER JOIN testcommunityhall.users u ON bd.users_user_id = u.user_id " + |
|||
* "INNER JOIN testcommunityhall.payments p ON bd.booking_id = p.booking_details_booking_id " |
|||
* + "WHERE u.mobile_no = ? " + "AND bd.booking_status NOT IN ('PENDING')"; |
|||
* |
|||
* return jdbcTemplate.queryForList(sql, mobileNumber); } |
|||
*/ |
|||
public List<Map<String, Object>> getBookingsByMobile(Long mobileNumber) { |
|||
String sql = "SELECT bd.booking_id , DATE_FORMAT(bd.booking_date, '%d-%m-%Y') AS booking_date," |
|||
+ " DATE_FORMAT(bd.start_date, '%d-%m-%Y') AS start_date," |
|||
+ " DATE_FORMAT(bd.end_date, '%d-%m-%Y') AS end_date, " |
|||
+ "bd.starting_slot, bd.ending_slot, bd.reason, bd.booking_status, " |
|||
+ "p.payment_status AS payment_status " + "FROM booking_details bd " |
|||
+ "INNER JOIN users u ON bd.users_user_id = u.user_id " |
|||
+ "INNER JOIN payments p ON bd.booking_id = p.booking_details_booking_id " |
|||
+ "WHERE u.mobile_no = ? " + "AND bd.booking_status NOT IN ('PENDING')"; |
|||
|
|||
List<Map<String, Object>> bookings = jdbcTemplate.queryForList(sql, mobileNumber); |
|||
|
|||
// Add acknowledgement URL to each booking |
|||
for (Map<String, Object> booking : bookings) { |
|||
Object bookingId = booking.get("booking_id"); |
|||
if (bookingId != null) { |
|||
String acknowledgementUrl = "https://gccservices.chennaicorporation.gov.in/communityhall/user/acknowledgement?bookingId=" |
|||
+ bookingId; |
|||
booking.put("acknowledgement_url", acknowledgementUrl); |
|||
} |
|||
} |
|||
|
|||
return bookings; |
|||
} |
|||
|
|||
public List<Map<String, Object>> checkPenionerExits(String PensionerID) { |
|||
String sql = "SELECT * FROM users WHERE government_id= ?"; |
|||
return jdbcTemplate.queryForList(sql, PensionerID); |
|||
} |
|||
|
|||
// |
|||
public List<Map<String, Object>> findCounsellorByMobile(long mobileNo) { |
|||
String sql = "SELECT * FROM counsellor_details WHERE mobile1 = ? OR mobile2 = ?"; |
|||
return jdbcTemplate.queryForList(sql, mobileNo, mobileNo); |
|||
} |
|||
|
|||
public void registerUser(String userType, String name, long mobileNumber, String aadharNumber, |
|||
MultipartFile profilePhoto, String emailId, String doorNo, String street, String area, String location, |
|||
String pincode, String pensionerID, String pensionerDepartment, String employeeID, |
|||
String employeeDepartment) throws IOException { |
|||
|
|||
String uploadPhotoUrl = null; |
|||
if (profilePhoto != null && !profilePhoto.isEmpty()) { |
|||
uploadPhotoUrl = saveFile(profilePhoto); |
|||
} |
|||
|
|||
// Default values for government_id and department |
|||
String governmentId = null; |
|||
String department = null; |
|||
|
|||
String userstatus = "APPROVED"; |
|||
|
|||
// Logic for conditional insertion based on userType |
|||
if ("GCC PENSIONER".equalsIgnoreCase(userType)) { |
|||
|
|||
governmentId = pensionerID; |
|||
department = pensionerDepartment; |
|||
userstatus = "PENDING"; |
|||
} else if ("GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
governmentId = employeeID; |
|||
department = employeeDepartment; |
|||
userstatus = "PENDING"; |
|||
} |
|||
|
|||
String sql = "INSERT INTO users (usertype, name, mobile_no, aadhar_number, profilephoto, email, " |
|||
+ "doorno, street, area, location, pin_code, government_id, department,user_status) " |
|||
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)"; |
|||
|
|||
jdbcTemplate.update(sql, userType, name, mobileNumber, aadharNumber, uploadPhotoUrl, emailId, doorNo, street, |
|||
area, location, pincode, governmentId, department, userstatus); |
|||
} |
|||
|
|||
public String saveFile(MultipartFile file) throws IOException { |
|||
String order_copy_url = ""; |
|||
|
|||
// Handle file upload if a file is provided |
|||
if (file == null || file.isEmpty()) { |
|||
return order_copy_url; |
|||
} |
|||
|
|||
// Get the base upload directory from properties |
|||
String uploadDirectory = environment.getProperty("file.upload.directory"); // e.g., /opt/myapp/uploads |
|||
|
|||
// Define the subdirectory structure |
|||
String serviceFolderName = "images/userPhoto"; // You can also get from properties if needed |
|||
|
|||
// Build the full folder path |
|||
String fullUploadPath = uploadDirectory + File.separator + serviceFolderName; |
|||
Path directoryPath = Paths.get(fullUploadPath); |
|||
if (!Files.exists(directoryPath)) { |
|||
Files.createDirectories(directoryPath); |
|||
} |
|||
|
|||
// Generate unique file name |
|||
// String datetimetxt = DateTimeUtil.getCurrentDateTime(); |
|||
String fileName = generateRandomStringForFile(10) + "_" + file.getOriginalFilename(); |
|||
|
|||
// Physical file path |
|||
Path filePath = directoryPath.resolve(fileName); |
|||
|
|||
// Write the file to the physical path |
|||
Files.write(filePath, file.getBytes()); |
|||
|
|||
// Relative path for storing in DB |
|||
String filepath_txt = "/" + serviceFolderName + "/" + fileName; |
|||
|
|||
return filepath_txt; |
|||
} |
|||
|
|||
public static String generateRandomStringForFile(int String_Lenth) { |
|||
StringBuilder result = new StringBuilder(String_Lenth); |
|||
for (int i = 0; i < STRING_LENGTH; i++) { |
|||
result.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length()))); |
|||
} |
|||
return result.toString(); |
|||
|
|||
} |
|||
|
|||
@Transactional("mysqlCommunityHallTransactionManager") |
|||
public Map<String, Object> saveBookingDetails(Map<String, Object> formData) { |
|||
Map<String, Object> hs = new HashMap<>(); |
|||
|
|||
Map<String, Object> userMaster = jdbcTemplate.queryForMap("SELECT * FROM users WHERE mobile_no = ?", |
|||
(formData.get("mobNo").toString())); |
|||
|
|||
Integer userId = (Integer) userMaster.get("user_id"); |
|||
|
|||
Map<String, Object> reasonMaster = jdbcTemplate.queryForMap("SELECT * FROM reason_master WHERE reason_id = ?", |
|||
Integer.parseInt(formData.get("reasonId").toString())); |
|||
|
|||
Map<String, Object> hallDetails = jdbcTemplate.queryForMap("SELECT * FROM hall_details WHERE hall_id = ?", |
|||
Integer.parseInt(formData.get("hallId").toString())); |
|||
|
|||
// Fetch User |
|||
Map<String, Object> user = jdbcTemplate.queryForMap("SELECT * FROM users WHERE user_id = ?", userId); |
|||
|
|||
String bookingId = formData.get("bookingId").toString(); |
|||
Map<String, Object> bookingDetails = null; |
|||
|
|||
if (bookingId != null && bookingId.equals("0")) { |
|||
} else { |
|||
List<Map<String, Object>> bookings = jdbcTemplate |
|||
.queryForList("SELECT * FROM booking_details WHERE booking_id = ?", Integer.parseInt(bookingId)); |
|||
if (!bookings.isEmpty()) { |
|||
bookingDetails = bookings.get(0); |
|||
jdbcTemplate.update("DELETE FROM booking_documents WHERE booking_id = ?", Integer.parseInt(bookingId)); |
|||
} |
|||
} |
|||
|
|||
if (user != null) { |
|||
String startDate = formData.get("startDate").toString(); |
|||
String endDate = formData.get("endDate").toString(); |
|||
String relation = formData.get("relation").toString(); |
|||
double days = Double.parseDouble(formData.get("days").toString()); |
|||
int daysrange = Integer.parseInt(formData.get("daysrange").toString()); |
|||
String usertype = user.get("usertype").toString(); |
|||
String reason = reasonMaster.get("reason").toString(); |
|||
int startingSlot = Integer.parseInt(formData.get("startingSlot").toString()); |
|||
int endingSlot = Integer.parseInt(formData.get("endingSlot").toString()); |
|||
String startingSlot_txt = formData.get("startingSlot").toString(); |
|||
String endingSlot_txt = formData.get("endingSlot").toString(); |
|||
|
|||
Map<String, Object> discountrange = jdbcTemplate |
|||
.queryForMap("SELECT * FROM discount_range WHERE usertype = ?", usertype); |
|||
float discount = Float.parseFloat(discountrange.get("discount_range").toString()); |
|||
|
|||
double hallAmount = calcHallAmountJdbc(hallDetails, daysrange, startingSlot, endingSlot); |
|||
hs.put("actualhallamount", hallAmount); |
|||
|
|||
double depositeamount = Double.parseDouble(hallDetails.get("deposit_amount").toString()); |
|||
double halfDepositAmount = Double.parseDouble(hallDetails.get("half_deposit_amount").toString()); |
|||
double Totaldepositeamount = calculateDepositAmountJdbc(daysrange, startingSlot_txt, endingSlot_txt, |
|||
depositeamount, halfDepositAmount); |
|||
depositeamount = Totaldepositeamount; |
|||
|
|||
double discountAmount = 0; |
|||
double gstAmount = 0.00; |
|||
String reasoncode = reasonMaster.get("reasoncode") != null ? reasonMaster.get("reasoncode").toString() : ""; |
|||
hs.put("reasoncode", reasoncode); |
|||
|
|||
/*Map<String, Object> governmentevents = jdbcTemplate.queryForMap( |
|||
"SELECT * FROM hall_details_concession WHERE hall_id = ?", |
|||
Integer.parseInt(hallDetails.get("hall_id").toString()));*/ |
|||
|
|||
List<Map<String, Object>> rows = jdbcTemplate.queryForList( |
|||
"SELECT * FROM hall_details_concession WHERE hall_id = ?", |
|||
Integer.parseInt(hallDetails.get("hall_id").toString()) |
|||
); |
|||
|
|||
Map<String, Object> governmentevents = rows.isEmpty() |
|||
? Collections.emptyMap() // or null, your call |
|||
: rows.get(0); |
|||
|
|||
if (reasoncode.equals("SGE")) { |
|||
if (startingSlot == 1 && endingSlot == 2) { |
|||
discountAmount = (Double.parseDouble(governmentevents.get("fulldayhallamount").toString()) |
|||
* Double.parseDouble(hallDetails.get("sgediscount").toString())) / 100; |
|||
hallAmount = Double.parseDouble(governmentevents.get("fulldayhallamount").toString()); |
|||
hs.put("discount", hallDetails.get("sgediscount")); |
|||
double cleaningCharges = Double |
|||
.parseDouble(governmentevents.get("full_day_cleaningcharges").toString()); |
|||
double PASystem = Double.parseDouble(governmentevents.get("fulldaypasystem").toString()); |
|||
double EB = Double.parseDouble(governmentevents.get("fulldayebcharges").toString()); |
|||
double additionalcharges = cleaningCharges + PASystem + EB; |
|||
gstAmount = Math.round(additionalcharges * Double.parseDouble(hallDetails.get("gst").toString())) |
|||
/ 100.0; |
|||
double depositAmount = Double.parseDouble(hallDetails.get("deposit_amount").toString()) * daysrange; |
|||
double totalAmount = additionalcharges + gstAmount + depositAmount; |
|||
double truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("actualhallamount", hallAmount); |
|||
hs.put("additionalcharges", additionalcharges); |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
|
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, additionalcharges, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} else { |
|||
hallAmount = Double.parseDouble(governmentevents.get("halfdayhallamount").toString()); |
|||
discountAmount = (hallAmount * Double.parseDouble(hallDetails.get("sgediscount").toString())) / 100; |
|||
hs.put("discount", hallDetails.get("sgediscount")); |
|||
double cleaningCharges = Double |
|||
.parseDouble(governmentevents.get("halfdaycleaningcharges").toString()); |
|||
double PASystem = Double.parseDouble(governmentevents.get("halfdaypasystem").toString()); |
|||
double EB = Double.parseDouble(governmentevents.get("halfdayebcharges").toString()); |
|||
double additionalcharges = cleaningCharges + PASystem + EB; |
|||
gstAmount = Math.round(additionalcharges * Double.parseDouble(hallDetails.get("gst").toString())) |
|||
/ 100.0; |
|||
double depositAmount = Double.parseDouble(hallDetails.get("deposit_amount").toString()) * daysrange; |
|||
double totalAmount = additionalcharges + gstAmount + depositAmount; |
|||
double truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("actualhallamount", hallAmount); |
|||
hs.put("additionalcharges", additionalcharges); |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, additionalcharges, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} |
|||
} else if (reasoncode.equals("CGE")) { |
|||
double rentAmount, netAmount, depositAmount, totalAmount, truncatedTotalAmount, additionalcharges; |
|||
if (startingSlot == 1 && endingSlot == 2) { |
|||
discountAmount = (Double.parseDouble(hallDetails.get("full_day_rent").toString()) |
|||
* Double.parseDouble(hallDetails.get("cgediscount").toString())) / 100; |
|||
hallAmount = Double.parseDouble(hallDetails.get("full_day_rent").toString()); |
|||
hs.put("discount", hallDetails.get("cgediscount")); |
|||
double cleaningCharges = Double |
|||
.parseDouble(governmentevents.get("full_day_cleaningcharges").toString()); |
|||
double PASystem = Double.parseDouble(governmentevents.get("fulldaypasystem").toString()); |
|||
double EB = Double.parseDouble(governmentevents.get("fulldayebcharges").toString()); |
|||
additionalcharges = cleaningCharges + PASystem + EB; |
|||
rentAmount = hallAmount - discountAmount; |
|||
netAmount = rentAmount + additionalcharges; |
|||
gstAmount = Math.round(netAmount * Double.parseDouble(hallDetails.get("gst").toString())) / 100.0; |
|||
depositAmount = Double.parseDouble(hallDetails.get("deposit_amount").toString()) * daysrange; |
|||
totalAmount = netAmount + gstAmount + depositAmount; |
|||
truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("actualhallamount", hallAmount); |
|||
hs.put("rentAmount", rentAmount); |
|||
hs.put("gstAmount", gstAmount); |
|||
hs.put("netAmount", netAmount); |
|||
hs.put("additionalcharges", additionalcharges); |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, netAmount, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} else { |
|||
discountAmount = (Double.parseDouble(hallDetails.get("half_day_rent").toString()) |
|||
* Double.parseDouble(hallDetails.get("cge_discount").toString())) / 100; |
|||
hallAmount = Double.parseDouble(hallDetails.get("half_day_rent").toString()); |
|||
hs.put("discount", hallDetails.get("cgediscount")); |
|||
double cleaningCharges = Double |
|||
.parseDouble(governmentevents.get("half_day_cleaningcharges").toString()); |
|||
double PASystem = Double.parseDouble(governmentevents.get("halfdaypasystem").toString()); |
|||
double EB = Double.parseDouble(governmentevents.get("halfdayebcharges").toString()); |
|||
additionalcharges = cleaningCharges + PASystem + EB; |
|||
rentAmount = hallAmount - discountAmount; |
|||
netAmount = rentAmount + additionalcharges; |
|||
gstAmount = Math.round(netAmount * Double.parseDouble(hallDetails.get("gst").toString())) / 100.0; |
|||
depositAmount = Double.parseDouble(hallDetails.get("deposit_amount").toString()) * daysrange; |
|||
totalAmount = netAmount + gstAmount + depositAmount; |
|||
truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("actualhallamount", hallAmount); |
|||
hs.put("rentAmount", rentAmount); |
|||
hs.put("gstAmount", gstAmount); |
|||
hs.put("netAmount", netAmount); |
|||
hs.put("additionalcharges", additionalcharges); |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, netAmount, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} |
|||
} else { |
|||
|
|||
if (usertype.equals("COUNCILLOR") || usertype.equals("PENSIONER") || usertype.equals("GCC_EMPLOYEE") |
|||
|| usertype.equals("PUBLIC")) { |
|||
discountAmount = (hallAmount * discount) / 100; |
|||
hallAmount = hallAmount - discountAmount; |
|||
gstAmount = Math.round(hallAmount * Double.parseDouble(hallDetails.get("gst").toString())) / 100.0; |
|||
double totalAmount = hallAmount + gstAmount + depositeamount; |
|||
double truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, hallAmount, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} |
|||
} |
|||
|
|||
System.out.println("bookingId...." + bookingId); |
|||
|
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
LocalDate start = LocalDate.parse(startDate, formatter); |
|||
LocalDate end = LocalDate.parse(endDate, formatter); |
|||
int hallId = Integer.parseInt(hallDetails.get("hall_id").toString()); |
|||
int i = 0; |
|||
for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) { |
|||
Map<String, Object> bookingCalendar = null; |
|||
List<Map<String, Object>> calList = jdbcTemplate.queryForList( |
|||
"SELECT * FROM booking_calendar WHERE bdate = ? AND hall_id = ?", date.toString(), hallId); |
|||
if (!calList.isEmpty()) |
|||
bookingCalendar = calList.get(0); |
|||
|
|||
if (bookingCalendar != null) { |
|||
boolean morningSlot = Boolean.TRUE.equals(bookingCalendar.get("morning_slot")); |
|||
boolean eveningSlot = Boolean.TRUE.equals(bookingCalendar.get("evening_slot")); |
|||
if ((date.equals(start) && startingSlot == 1 && morningSlot) |
|||
|| (date.equals(start) && startingSlot == 2 && eveningSlot) |
|||
|| (date.equals(end) && endingSlot == 1 && morningSlot) |
|||
|| (date.equals(end) && endingSlot == 2 && eveningSlot)) { |
|||
return Collections.singletonMap("status", "slotOccupied"); |
|||
} else if (morningSlot && eveningSlot) { |
|||
return Collections.singletonMap("status", "slotOccupied"); |
|||
} else if (!date.equals(end) && i != 0 && i != Math.round(days - 1) |
|||
&& (morningSlot || eveningSlot)) { |
|||
return Collections.singletonMap("status", "slotOccupied"); |
|||
} else if (date.equals(end) && endingSlot == 2 && morningSlot && i != 0 |
|||
&& i == Math.round(days - 1)) { |
|||
return Collections.singletonMap("status", "slotOccupied"); |
|||
} |
|||
} |
|||
i++; |
|||
} |
|||
|
|||
List<Map<String, Object>> reasonDocMaster = jdbcTemplate.queryForList( |
|||
"SELECT * FROM reason_document_master WHERE reason_id = ?", |
|||
Integer.parseInt(formData.get("reasonId").toString())); |
|||
List<Map<String, Object>> uploadedDocs = new ArrayList<>(); |
|||
for (Map<String, Object> rm : reasonDocMaster) { |
|||
Map<String, Object> docMap = new HashMap<>(); |
|||
String fieldName = ""; |
|||
String value = ""; |
|||
String fileName = ""; |
|||
String fileUrl = ""; |
|||
String filePath = ""; |
|||
if (Boolean.TRUE.equals(rm.get("add_text_field"))) { |
|||
fieldName = rm.get("field_name").toString(); |
|||
value = formData.get(fieldName).toString(); |
|||
jdbcTemplate.update( |
|||
"INSERT INTO booking_documents (booking_details_booking_id, booking_label, name) VALUES (?, ?, ?)", |
|||
Integer.parseInt(bookingId), fieldName, value); |
|||
docMap.put("booking_label", fieldName); |
|||
docMap.put("name", value); |
|||
} |
|||
if (Boolean.TRUE.equals(rm.get("add_document_field"))) { |
|||
String docFieldName = rm.get("doc_field_name").toString(); |
|||
MultipartFile file = (MultipartFile) formData.get(docFieldName); |
|||
fileName = bookingId + "_" + file.getOriginalFilename(); |
|||
fileUrl = serverPath + "images/" + reason + "/" + fileName; |
|||
filePath = uploadDirectory + "/" + reason + "/" + fileName; |
|||
|
|||
// Create directory if it doesn't exist |
|||
File directory = new File(uploadDirectory + "/" + reason); |
|||
if (!directory.exists()) { |
|||
directory.mkdirs(); // Creates parent directories if needed |
|||
} |
|||
|
|||
docMap.put("documentName", file.getOriginalFilename()); |
|||
docMap.put("documentType", file.getContentType()); |
|||
docMap.put("bookingDocUrl", fileUrl); |
|||
|
|||
// Save file to disk |
|||
try (FileOutputStream fos = new FileOutputStream(filePath)) { |
|||
byte[] bytes = file.getBytes(); |
|||
fos.write(bytes); |
|||
} catch (Exception e) { |
|||
throw new RuntimeException(e); |
|||
} |
|||
|
|||
jdbcTemplate.update( |
|||
"INSERT INTO booking_documents (booking_details_booking_id, booking_doc_url, document_name, document_type, booking_label, name) VALUES (?, ?, ?, ?, ?, ?)", |
|||
Integer.parseInt(bookingId), fileUrl, file.getOriginalFilename(), file.getContentType(), |
|||
fieldName, value); |
|||
} |
|||
uploadedDocs.add(docMap); |
|||
} |
|||
|
|||
hs.put("bookingId", bookingId); |
|||
hs.put("hallName", hallDetails.get("hall_name")); |
|||
hs.put("NoOfDay", days); |
|||
hs.put("startDate", startDate); |
|||
hs.put("endDate", endDate); |
|||
hs.put("startingSlot", startingSlot); |
|||
hs.put("endingSlot", endingSlot); |
|||
hs.put("hallAmount", hallAmount); |
|||
hs.put("gst", gstAmount); |
|||
hs.put("depositAmount", depositeamount); |
|||
hs.put("username", user.get("name")); |
|||
hs.put("userId", user.get("user_id")); |
|||
hs.put("mobileNo", user.get("mobile_no")); |
|||
hs.put("userType", user.get("usertype")); |
|||
hs.put("reason", reason); |
|||
hs.put("bookingId", bookingId); |
|||
hs.put("uploadedDocs", uploadedDocs); |
|||
} |
|||
|
|||
return hs; |
|||
} |
|||
|
|||
private double calcHallAmountJdbc(Map<String, Object> hallDetails, int daysrange, int startPeriod, int endPeriod) { |
|||
double fullDayRent = Double.parseDouble(hallDetails.get("full_day_rent").toString()); |
|||
double halfDayRent = Double.parseDouble(hallDetails.get("half_day_rent").toString()); |
|||
if (daysrange == 1) { |
|||
if (startPeriod == 1 && endPeriod == 2) |
|||
return fullDayRent; |
|||
else if (startPeriod == 1 && endPeriod == 1) |
|||
return halfDayRent; |
|||
else if (startPeriod == 2 && endPeriod == 2) |
|||
return halfDayRent; |
|||
else if (startPeriod == 2 && endPeriod == 1) |
|||
return fullDayRent; |
|||
} else { |
|||
if (startPeriod == 1 && endPeriod == 2) |
|||
return fullDayRent * daysrange; |
|||
else if (startPeriod == 1 && endPeriod == 1) |
|||
return fullDayRent * (daysrange - 1) + halfDayRent; |
|||
else if (startPeriod == 2 && endPeriod == 2) |
|||
return fullDayRent * (daysrange - 1) + halfDayRent; |
|||
else if (startPeriod == 2 && endPeriod == 1) |
|||
return fullDayRent * (daysrange - 2) + halfDayRent * 2; |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
private double calculateDepositAmountJdbc(double numDays, String startPeriod, String endPeriod, |
|||
double depositAmount, double HalfDepositAmount) { |
|||
double damount = 0; |
|||
if (numDays == 1) { |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) |
|||
damount = depositAmount; |
|||
else if ("1".equals(startPeriod) && "1".equals(endPeriod)) |
|||
damount = HalfDepositAmount; |
|||
else if ("2".equals(startPeriod) && "2".equals(endPeriod)) |
|||
damount = HalfDepositAmount; |
|||
else |
|||
damount = numDays; |
|||
} else { |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) |
|||
damount = depositAmount * numDays; |
|||
else if ("1".equals(startPeriod) && "1".equals(endPeriod)) |
|||
damount = depositAmount * (numDays - 1) + HalfDepositAmount; |
|||
else if ("2".equals(startPeriod) && "2".equals(endPeriod)) |
|||
damount = depositAmount * (numDays - 1) + HalfDepositAmount; |
|||
else if ("2".equals(startPeriod) && "1".equals(endPeriod)) |
|||
damount = depositAmount * (numDays - 2) + depositAmount; |
|||
else |
|||
damount = numDays; |
|||
} |
|||
return damount; |
|||
} |
|||
|
|||
private String insertOrUpdateBookingDetailsJdbc(JdbcTemplate jdbcTemplate, String bookingId, |
|||
Map<String, Object> user, Map<String, Object> hallDetails, String startDate, String endDate, double days, |
|||
int startingSlot, int endingSlot, double depositAmount, double hallAmount, double gst, double totalAmount, |
|||
String reason, String relation, String refundStatus, String comments, String bookingType) { |
|||
|
|||
if (bookingId == null || bookingId.equals("0")) { |
|||
// Insert with KeyHolder |
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
jdbcTemplate.update(connection -> { |
|||
PreparedStatement ps = connection.prepareStatement( |
|||
"INSERT INTO booking_details (users_user_id, hall_details_hall_id, start_date, end_date, no_of_days, starting_slot, ending_slot, deposit_amount, hall_amount, gst, amount_received, reason, refund_status, comments, booking_type, relationship, booking_date, schedule_count, source) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", |
|||
Statement.RETURN_GENERATED_KEYS); |
|||
ps.setObject(1, user.get("user_id")); |
|||
ps.setObject(2, hallDetails.get("hall_id")); |
|||
ps.setString(3, startDate); |
|||
ps.setString(4, endDate); |
|||
ps.setDouble(5, days); |
|||
ps.setInt(6, startingSlot); |
|||
ps.setInt(7, endingSlot); |
|||
ps.setDouble(8, depositAmount); |
|||
ps.setDouble(9, hallAmount); |
|||
ps.setDouble(10, gst); |
|||
ps.setDouble(11, totalAmount); |
|||
ps.setString(12, reason); |
|||
ps.setString(13, refundStatus); |
|||
ps.setString(14, comments); |
|||
ps.setString(15, bookingType); |
|||
ps.setString(16, relation); |
|||
ps.setString(17, java.time.LocalDate.now().toString()); |
|||
ps.setInt(18, 0); |
|||
ps.setInt(19, 2); |
|||
return ps; |
|||
}, keyHolder); |
|||
|
|||
Number generatedId = keyHolder.getKey(); |
|||
return generatedId != null ? generatedId.toString() : null; |
|||
} else { |
|||
// Update |
|||
jdbcTemplate.update( |
|||
"UPDATE booking_details SET users_user_id=?, hall_details_hall_id=?, start_date=?, end_date=?, no_of_days=?, starting_slot=?, ending_slot=?, deposit_amount=?, hall_amount=?, gst=?, amount_received=?, reason=?, refund_status=?, comments=?, booking_type=?, relationship=?, booking_date=?, schedule_count=? WHERE booking_id=?", |
|||
user.get("user_id"), hallDetails.get("hall_id"), startDate, endDate, days, startingSlot, endingSlot, |
|||
depositAmount, hallAmount, gst, totalAmount, reason, refundStatus, comments, bookingType, relation, |
|||
java.time.LocalDate.now().toString(), 0, Integer.parseInt(bookingId)); |
|||
return bookingId; |
|||
} |
|||
} |
|||
|
|||
public HashMap<String, Object> startPayment(int bookingId) { |
|||
HashMap<String, Object> hs = new HashMap<>(); |
|||
|
|||
String bookingSql = "SELECT b.amount_received, b.users_user_id, b.hall_details_hall_id, " |
|||
+ " u.user_id, u.mobile_no, u.email " + " FROM booking_details b " |
|||
+ " JOIN users u ON b.users_user_id = u.user_id " + " WHERE b.booking_id = ?"; |
|||
|
|||
try { |
|||
Map<String, Object> data = jdbcTemplate.queryForMap(bookingSql, bookingId); |
|||
|
|||
double amountReceived = (double) data.get("amount_received"); |
|||
int UserId = (int) data.get("user_id"); |
|||
long mobileNo = (long) data.get("mobile_no"); |
|||
String email = (String) data.get("email"); |
|||
int hallId = (int) data.get("hall_details_hall_id"); |
|||
|
|||
String txnId = "CHB" + transactionNumberGenerator.generateTransactionNumber() |
|||
+ String.format("%05d", UserId); |
|||
|
|||
String totalAmt = String.valueOf(amountReceived); |
|||
|
|||
String insertSql = "INSERT INTO transaction_response (txansaction_id, hall_id, user_id, status_code, booking_id) " |
|||
+ " VALUES (?, ?, ?, ?, ?)"; |
|||
jdbcTemplate.update(insertSql, txnId, hallId, String.valueOf(UserId), "temp", bookingId); |
|||
|
|||
String merchantId = paymentConfig.getMerchantId(); |
|||
String consumerId = String.format("%05d", UserId); |
|||
String encryptedToken = getToken(merchantId + "|", txnId + "|", totalAmt + "|", "|", consumerId + "|", |
|||
mobileNo + "|", email + "|", "|", "|", "|", "|", "|", "|", "|", "|", "|", |
|||
paymentConfig.getEncryptionKey()); |
|||
|
|||
hs.put("txansactionId", txnId); |
|||
hs.put("token", encryptedToken); |
|||
hs.put("amount", totalAmt); |
|||
/* |
|||
* hs.put("merchantId", merchantId); hs.put("consumerMobileNo", mobileNo); |
|||
* hs.put("consumerEmailId", email); hs.put("consumerId", consumerId); |
|||
* hs.put("error", false); |
|||
*/ |
|||
|
|||
} catch (EmptyResultDataAccessException | NoSuchAlgorithmException e) { |
|||
hs.put("error", true); |
|||
hs.put("message", "Invalid booking ID or no user data found. "); |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return hs; |
|||
} |
|||
|
|||
public String getToken(String merchantId, String txnId, String totalAmt, String accountNo, String consumerId, |
|||
String consumerMobileNo, String consumerEmailId, String debitStartDate, String debitEndDate, |
|||
String maxAmount, String amountType, String frequency, String cardNumber, String expMonth, String expYear, |
|||
String cvvCode, String salt) throws NoSuchAlgorithmException { |
|||
String token = merchantId + txnId + totalAmt + accountNo + consumerId + consumerMobileNo + consumerEmailId |
|||
+ debitStartDate + debitEndDate + maxAmount + amountType + frequency + cardNumber + expMonth + expYear |
|||
+ cvvCode + salt; |
|||
|
|||
return generateToken(token); |
|||
} |
|||
|
|||
public String generateToken(String token) throws NoSuchAlgorithmException { |
|||
// System.out.println("Token:-" + token); |
|||
MessageDigest md = MessageDigest.getInstance("SHA-512"); |
|||
md.update(token.getBytes()); |
|||
|
|||
byte[] bytes = md.digest(); |
|||
|
|||
BigInteger bigInt = new BigInteger(1, bytes); |
|||
String encryptedtoken = bigInt.toString(16); |
|||
|
|||
while (encryptedtoken.length() < 128) { |
|||
encryptedtoken = "0" + encryptedtoken; |
|||
} |
|||
// System.out.println("Encryption :- " + encryptedtoken); |
|||
return encryptedtoken; |
|||
} |
|||
|
|||
public Map<String, Object> checkSlotAvailability(int hallId, String startDate, String endDate, int startingSlot, int endingSlot) { |
|||
|
|||
// Validate slot numbers |
|||
if (startingSlot < 1 || startingSlot > 2 || endingSlot < 1 || endingSlot > 2) { |
|||
throw new IllegalArgumentException("Slot values must be 1 (morning) or 2 (evening)."); |
|||
} |
|||
|
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
LocalDate start; |
|||
LocalDate end; |
|||
|
|||
try { |
|||
start = LocalDate.parse(startDate, formatter); |
|||
end = LocalDate.parse(endDate, formatter); |
|||
} catch (Exception e) { |
|||
throw new IllegalArgumentException("Invalid date format. Use yyyy-MM-dd."); |
|||
} |
|||
|
|||
if (end.isBefore(start)) { |
|||
throw new IllegalArgumentException("End date cannot be before start date."); |
|||
} |
|||
|
|||
long days = java.time.temporal.ChronoUnit.DAYS.between(start, end) + 1; |
|||
int i = 0; |
|||
|
|||
try { |
|||
for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) { |
|||
|
|||
List<Map<String, Object>> calList = jdbcTemplate.queryForList( |
|||
"SELECT * FROM booking_calendar WHERE bdate = ? AND hall_id = ?", |
|||
date.toString(), hallId |
|||
); |
|||
|
|||
if (!calList.isEmpty()) { |
|||
Map<String, Object> bookingCalendar = calList.get(0); |
|||
|
|||
boolean morningSlot = Boolean.TRUE.equals(bookingCalendar.get("morning_slot")); |
|||
boolean eveningSlot = Boolean.TRUE.equals(bookingCalendar.get("evening_slot")); |
|||
|
|||
if ((date.equals(start) && startingSlot == 1 && morningSlot) |
|||
|| (date.equals(start) && startingSlot == 2 && eveningSlot) |
|||
|| (date.equals(end) && endingSlot == 1 && morningSlot) |
|||
|| (date.equals(end) && endingSlot == 2 && eveningSlot)) { |
|||
return Map.of("status", "slotOccupied"); |
|||
} else if (morningSlot && eveningSlot) { |
|||
return Map.of("status", "slotOccupied"); |
|||
} else if (!date.equals(end) && i != 0 && i != Math.round(days - 1) |
|||
&& (morningSlot || eveningSlot)) { |
|||
return Map.of("status", "slotOccupied"); |
|||
} else if (date.equals(end) && endingSlot == 2 && morningSlot && i != 0 |
|||
&& i == Math.round(days - 1)) { |
|||
return Map.of("status", "slotOccupied"); |
|||
} |
|||
} |
|||
i++; |
|||
} |
|||
} catch (DataAccessException e) { |
|||
e.printStackTrace(); |
|||
throw new RuntimeException("Database error occurred while checking slot availability."); |
|||
} |
|||
|
|||
return Map.of("status", "slotAvailable"); |
|||
} |
|||
} |
|||
@ -0,0 +1,63 @@ |
|||
package com.gcc.restapiservices.communityHall.util; |
|||
|
|||
import com.gcc.restapiservices.communityHall.configuration.PaymentConfig; |
|||
import org.apache.commons.codec.binary.Hex; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import javax.crypto.Cipher; |
|||
import javax.crypto.spec.IvParameterSpec; |
|||
import javax.crypto.spec.SecretKeySpec; |
|||
import java.util.Base64; |
|||
|
|||
@Component |
|||
public class EncryptionUtils { |
|||
|
|||
@Autowired |
|||
private PaymentConfig paymentConfig; |
|||
|
|||
public String encryptHxRefund(String text) throws Exception { |
|||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); |
|||
SecretKeySpec keySpec = new SecretKeySpec(this.paymentConfig.getEncryptionKeyByte(), "AES"); |
|||
IvParameterSpec ivSpec = new IvParameterSpec(this.paymentConfig.getEncryptionIVByte()); |
|||
cipher.init(1, keySpec, ivSpec); |
|||
byte[] results = cipher.doFinal(text.getBytes("UTF-8")); |
|||
String hxencstr = ToHexStrRefund(results); |
|||
return hxencstr; |
|||
} |
|||
|
|||
public String ToHexStrRefund(byte[] dataBuf) { |
|||
String hxstr = null; |
|||
Hex hx = new Hex(); |
|||
hxstr = new String(hx.encode(dataBuf)); |
|||
return hxstr; |
|||
} |
|||
|
|||
public String decryptHxTRefund(String hxstrr) throws Exception { |
|||
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); |
|||
|
|||
SecretKeySpec keySpec = new SecretKeySpec(this.paymentConfig.getEncryptionKeyByte(), "AES"); |
|||
IvParameterSpec ivSpec = new IvParameterSpec(this.paymentConfig.getEncryptionIVByte()); |
|||
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); |
|||
|
|||
byte[] decbytes = FromHexStr(hxstrr); |
|||
|
|||
byte[] results = cipher.doFinal(decbytes); |
|||
return new String(results, "UTF-8").trim(); |
|||
} |
|||
|
|||
public byte[] FromHexStr(String hxStr) { |
|||
byte[] charArray = hxStr.getBytes(); |
|||
byte[] bufstr = null; |
|||
Hex hxx = new Hex(); |
|||
|
|||
try { |
|||
bufstr = hxx.decode(charArray); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return bufstr; |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,37 @@ |
|||
package com.gcc.restapiservices.communityHall.util; |
|||
|
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.Random; |
|||
|
|||
@Service |
|||
public class TransactionNumberGenerator { |
|||
|
|||
public String generateTransactionNumber() { |
|||
// Define the length of the transaction number |
|||
int length = 12; |
|||
|
|||
// Define characters to be used in the transaction number |
|||
String characters = "0123456789"; |
|||
|
|||
// Create a StringBuilder to store the transaction number |
|||
StringBuilder sb = new StringBuilder(); |
|||
|
|||
// Create an instance of Random class |
|||
Random random = new Random(); |
|||
|
|||
// Generate the transaction number |
|||
for (int i = 0; i < length; i++) { |
|||
// Generate a random index within the range of characters |
|||
int randomIndex = random.nextInt(characters.length()); |
|||
|
|||
// Append the character at the random index to the transaction number |
|||
sb.append(characters.charAt(randomIndex)); |
|||
} |
|||
|
|||
|
|||
// Convert StringBuilder to String and return |
|||
return sb.toString(); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,64 @@ |
|||
package com.gcc.restapiservices.configuration; |
|||
|
|||
|
|||
import org.springframework.boot.context.properties.ConfigurationProperties; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.stereotype.Component; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
|
|||
@Component |
|||
@ConfigurationProperties(prefix = "app") |
|||
public class AppConfig { |
|||
|
|||
|
|||
@Bean |
|||
public RestTemplate restTemplate() { |
|||
return new RestTemplate(); |
|||
} |
|||
|
|||
private String title; |
|||
private String baseUrl; |
|||
private String getOtpUrl; |
|||
private String erpUrl; |
|||
|
|||
// @Value("${payment.razorpay.my_key_id}") private String keyId; |
|||
|
|||
public String getTitle() { |
|||
return title; |
|||
} |
|||
|
|||
public void setTitle(String title) { |
|||
this.title = title; |
|||
} |
|||
|
|||
public String getBaseUrl() { |
|||
return baseUrl; |
|||
} |
|||
|
|||
public void setBaseUrl(String baseUrl) { |
|||
this.baseUrl = baseUrl; |
|||
} |
|||
|
|||
public String getGetOtpUrl() { |
|||
return getOtpUrl; |
|||
} |
|||
|
|||
public void setGetOtpUrl(String getOtpUrl) { |
|||
this.getOtpUrl = getOtpUrl; |
|||
} |
|||
|
|||
public String getErpUrl() { |
|||
return erpUrl; |
|||
} |
|||
|
|||
public void setErpUrl(String erpUrl) { |
|||
this.erpUrl = erpUrl; |
|||
} |
|||
|
|||
/* |
|||
* public String getKeyId() { return keyId; } |
|||
* |
|||
* public void setKeyId(String keyId) { this.keyId = keyId; } |
|||
*/ |
|||
} |
|||
@ -0,0 +1,201 @@ |
|||
package com.gcc.restapiservices.configuration; |
|||
|
|||
import javax.sql.DataSource; |
|||
|
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.context.annotation.Primary; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.jdbc.datasource.DataSourceTransactionManager; |
|||
import org.springframework.jdbc.datasource.DriverManagerDataSource; |
|||
import org.springframework.transaction.PlatformTransactionManager; |
|||
import org.springframework.transaction.annotation.EnableTransactionManagement; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
@Configuration |
|||
@EnableTransactionManagement |
|||
public class DataSourceConfig { |
|||
|
|||
// live aws connection |
|||
private static final String awshost = "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306"; |
|||
private static final String awspassword = "gcc-facial-password"; |
|||
|
|||
// local |
|||
// private static final String awshost = "localhost"; |
|||
// private static final String awspassword = "root"; |
|||
|
|||
@Bean(name = "mysqlCdWasteDataSource") |
|||
public DataSource mysqlCdWasteDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/gcc_c_d_waste_web"); |
|||
dataSource.setPassword(awspassword); |
|||
dataSource.setUsername("root"); |
|||
return dataSource; |
|||
} |
|||
|
|||
// @Bean(name = "mysqlCdWasteDataSource") |
|||
// public DataSource mysqlCdWasteDataSource() { |
|||
// DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
// dataSource.setUrl("jdbc:mysql://" + host + "/dumpwastecollector"); |
|||
// dataSource.setUsername("root"); |
|||
// dataSource.setPassword(dbpassword); |
|||
// return dataSource; |
|||
// } |
|||
|
|||
// local crs logs |
|||
// @Bean(name = "mysqlCrsLogsDataSource") |
|||
// public DataSource mysqlCrsLogsAwsDataSource() { |
|||
// DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
// dataSource.setUrl("jdbc:mysql://" + host + "/crs_logs"); |
|||
// dataSource.setUsername("root"); |
|||
// dataSource.setPassword(dbpassword); |
|||
// return dataSource; |
|||
// } |
|||
|
|||
// crs log from live yogi |
|||
|
|||
@Bean(name = "mysqlCrsLogsDataSource") |
|||
public DataSource mysqlCrsLogsAwsDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/crs_logs"); |
|||
dataSource.setPassword(awspassword); |
|||
dataSource.setUsername("root"); |
|||
|
|||
return dataSource; |
|||
} |
|||
|
|||
// feedback |
|||
@Bean(name = "mysqlFeedbackDataSource") |
|||
public DataSource mysqlFeedbackDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/feedback_service"); |
|||
dataSource.setUsername("root"); |
|||
dataSource.setPassword(awspassword); |
|||
// dataSource.setUrl("jdbc:mysql://" + host + "/feedback_service"); |
|||
// dataSource.setUsername("root"); |
|||
// dataSource.setPassword(dbpassword); |
|||
return dataSource; |
|||
} |
|||
|
|||
@Bean(name = "mysqlCommunityHallDataSource") |
|||
public DataSource mysqlCommunityHallDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/communityhall_live"); |
|||
dataSource.setUsername("root"); |
|||
dataSource.setPassword(awspassword); |
|||
return dataSource; |
|||
} |
|||
|
|||
@Bean(name = "mysqlCoworkspaceRestServicesDataSource") |
|||
public DataSource mysqlCoworkspaceRestServicesDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/coworkingspace"); |
|||
dataSource.setUsername("root"); |
|||
dataSource.setPassword(awspassword); |
|||
return dataSource; |
|||
} |
|||
|
|||
// Swimmingpool |
|||
@Bean(name = "mysqlSwimmingpoolDataSource") |
|||
public DataSource mysqlSwimmingpoolDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/swimmingpool"); |
|||
dataSource.setUsername("root"); |
|||
dataSource.setPassword(awspassword); |
|||
return dataSource; |
|||
} |
|||
|
|||
@Bean(name = "mysqlServicespdfDataSource") |
|||
public DataSource mysqlServicespdfDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/gcc_rest_services"); |
|||
dataSource.setUsername("root"); |
|||
dataSource.setPassword(awspassword); |
|||
return dataSource; |
|||
} |
|||
|
|||
@Bean(name = "mysqlVictoriaHallDataSource") |
|||
public DataSource mysqlVictoriaHallDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/victoriahallbooking_test"); |
|||
dataSource.setUsername("root"); |
|||
dataSource.setPassword(awspassword); |
|||
return dataSource; |
|||
} |
|||
|
|||
@Bean(name = "mysqlVictoriaHallTransactionManager") |
|||
public PlatformTransactionManager mysqlVictoriaHallTransactionManager( |
|||
@Qualifier("mysqlVictoriaHallDataSource") DataSource dataSource) { |
|||
return new DataSourceTransactionManager(dataSource); |
|||
} |
|||
|
|||
@Bean(name = "mysqlCommunityHallTransactionManager") |
|||
public PlatformTransactionManager mysqlCommunityHallTransactionManager( |
|||
@Qualifier("mysqlCommunityHallDataSource") DataSource dataSource) { |
|||
return new DataSourceTransactionManager(dataSource); |
|||
} |
|||
|
|||
@Bean(name = "coworkspaceTransactionManager") |
|||
public PlatformTransactionManager coworkspaceTransactionManager( |
|||
@Qualifier("mysqlCoworkspaceRestServicesDataSource") DataSource dataSource) { |
|||
return new DataSourceTransactionManager(dataSource); |
|||
} |
|||
|
|||
@Bean(name = "mysqlGccRestServicesTransactionManager") |
|||
public PlatformTransactionManager mysqlGccRestServicesTransactionManager( |
|||
@Qualifier("mysqlGccRestServicesDataSource") DataSource dataSource) { |
|||
return new DataSourceTransactionManager(dataSource); |
|||
} |
|||
|
|||
@Bean(name = "servicesPdfJdbcTemplate") |
|||
public JdbcTemplate servicesPdfJdbcTemplate(@Qualifier("mysqlServicespdfDataSource") DataSource dataSource) { |
|||
return new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
// @Bean(name = "PetRegistrationdJbcTemplate") |
|||
// public JdbcTemplate PetRegistrationdJbcTemplate(@Qualifier("mysqlPetRegistrationRestServicesDataSource") DataSource dataSource) { |
|||
// return new JdbcTemplate(dataSource); |
|||
// } |
|||
|
|||
@Bean(name = "mysqlCommunityHallliveDataSource") |
|||
public DataSource mysqlCommunityHallliveDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/communityhall_live"); |
|||
dataSource.setUsername("root"); |
|||
dataSource.setPassword(awspassword); |
|||
return dataSource; |
|||
} |
|||
|
|||
@Bean(name = "mysqlGccRestServicesDataSource") |
|||
public DataSource mysqlGccRestServicesDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/gcc_rest_services"); |
|||
dataSource.setUsername("root"); |
|||
dataSource.setPassword(awspassword); |
|||
return dataSource; |
|||
} |
|||
|
|||
@Bean(name = "mysqlPetRegistrationRestServicesDataSource") |
|||
public DataSource mysqlPetRegistrationRestServicesDataSource() { |
|||
DriverManagerDataSource dataSource = new DriverManagerDataSource(); |
|||
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); |
|||
dataSource.setUrl("jdbc:mysql://" + awshost + "/gcc_pets"); |
|||
dataSource.setUsername("root"); |
|||
dataSource.setPassword(awspassword); |
|||
return dataSource; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
package com.gcc.restapiservices.coworkspace.constants; |
|||
|
|||
public final class AppConstants { |
|||
// public static String key_id="rzp_live_ySI5Ns54Y7qOcJ"; |
|||
// public static String key_secret="Nwf1TjhUtaskof8vePkRR8Sb"; |
|||
|
|||
|
|||
//uncomment for testing payment |
|||
public static String key_id="rzp_test_tDkHFEqWXmuEi8"; |
|||
public static String key_secret="cBQUjMcKZ4J6vmOKSyNZ92py"; |
|||
} |
|||
@ -0,0 +1,49 @@ |
|||
package com.gcc.restapiservices.coworkspace.controller; |
|||
|
|||
public class ApiResponse { |
|||
private String status; |
|||
private String message; |
|||
private Object data; |
|||
private int statusCode; |
|||
|
|||
// Constructor |
|||
public ApiResponse(String status, String message, Object data, int statusCode) { |
|||
this.status = status; |
|||
this.message = message; |
|||
this.data = data; |
|||
this.statusCode = statusCode; |
|||
} |
|||
|
|||
// Getters and Setters |
|||
public String getStatus() { |
|||
return status; |
|||
} |
|||
|
|||
public void setStatus(String status) { |
|||
this.status = status; |
|||
} |
|||
|
|||
public String getMessage() { |
|||
return message; |
|||
} |
|||
|
|||
public void setMessage(String message) { |
|||
this.message = message; |
|||
} |
|||
|
|||
public Object getData() { |
|||
return data; |
|||
} |
|||
|
|||
public void setData(Object data) { |
|||
this.data = data; |
|||
} |
|||
|
|||
public int getStatusCode() { |
|||
return statusCode; |
|||
} |
|||
|
|||
public void setStatusCode(int statusCode) { |
|||
this.statusCode = statusCode; |
|||
} |
|||
} |
|||
@ -0,0 +1,389 @@ |
|||
package com.gcc.restapiservices.coworkspace.controller; |
|||
|
|||
import com.gcc.restapiservices.coworkspace.constants.AppConstants; |
|||
import com.gcc.restapiservices.coworkspace.service.CoworkspaceApiService; |
|||
import com.gcc.restapiservices.coworkspace.service.PaymentService; |
|||
import com.razorpay.Order; |
|||
import com.razorpay.RazorpayClient; |
|||
import com.razorpay.RazorpayException; |
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
import org.json.JSONObject; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import java.time.LocalDate; |
|||
import java.util.*; |
|||
|
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/api/coworkspace") |
|||
public class CoworkspaceApiController { |
|||
|
|||
@Autowired |
|||
CoworkspaceApiService coworkspaceApiService; |
|||
|
|||
@Autowired |
|||
PaymentService paymentService; |
|||
|
|||
|
|||
// Endpoint for getting categories |
|||
@GetMapping("/getBuildings") |
|||
public ResponseEntity<?> getBuildings() { |
|||
try { |
|||
System.out.println("Inside getBuildings"); |
|||
return ResponseEntity.ok(new ApiResponse("success", "Buildings retrieved successfully", coworkspaceApiService.getBuildings(), HttpStatus.OK.value())); |
|||
} catch (Exception e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Failed to retrieve Buildings", null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
|
|||
@GetMapping("/getBuildingsbybid") |
|||
public ResponseEntity<?> getBuildingsbybid(@RequestParam("bid") int bid) { |
|||
try { |
|||
System.out.println("Inside getBuildingsbybid"); |
|||
return ResponseEntity.ok(new ApiResponse("success", "Buildingsbybid retrieved successfully", coworkspaceApiService.getBuildingsbybid(bid), HttpStatus.OK.value())); |
|||
} catch (Exception e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Failed to retrieve Buildingsbybid", null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
// Endpoint for getting categories |
|||
@GetMapping("/getcategory") |
|||
public ResponseEntity<?> getcategory() { |
|||
try { |
|||
System.out.println("Inside getcategory"); |
|||
return ResponseEntity.ok(new ApiResponse("success", "Categories retrieved successfully", coworkspaceApiService.getcat(), HttpStatus.OK.value())); |
|||
} catch (Exception e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Failed to retrieve categories", null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
@GetMapping("/getCategoriesByBid") |
|||
public ResponseEntity<?> getCategoriesByBid(@RequestParam("bid") int bid) { |
|||
try { |
|||
return ResponseEntity.ok(new ApiResponse( |
|||
"success", |
|||
"Categories retrieved successfully", |
|||
coworkspaceApiService.getcat(bid), |
|||
HttpStatus.OK.value() |
|||
)); |
|||
} catch (Exception e) { |
|||
return new ResponseEntity<>( |
|||
new ApiResponse("error", "Failed to retrieve categories by bid", null, HttpStatus.INTERNAL_SERVER_ERROR.value()), |
|||
HttpStatus.INTERNAL_SERVER_ERROR |
|||
); |
|||
} |
|||
} |
|||
|
|||
|
|||
// Endpoint for fetching slots by category ID |
|||
@GetMapping("/slots-by-category") |
|||
public ResponseEntity<?> getSlotsByCategory(@RequestParam("cid") int cid) { |
|||
try { |
|||
return ResponseEntity.ok(new ApiResponse("success", "Slots retrieved successfully", coworkspaceApiService.getSlotsByCategoryId(cid), HttpStatus.OK.value())); |
|||
} catch (Exception e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Failed to retrieve slots", null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/slots-by-displaycategory") |
|||
public ResponseEntity<ApiResponse> getSlotsByCategoryIdWithDisplayName(@RequestParam("cid") int cid) { |
|||
try { |
|||
System.out.println("Fetching slots for category ID: " + cid); |
|||
List<Map<String, Object>> slots = coworkspaceApiService.getSlotsByCategoryIdWithDisplayName(cid); |
|||
|
|||
if (slots == null || slots.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body(new ApiResponse("error", "No slots found for category ID: " + cid, null, HttpStatus.NOT_FOUND.value())); |
|||
} |
|||
|
|||
return ResponseEntity.ok(new ApiResponse("success", "Slots retrieved successfully", slots, HttpStatus.OK.value())); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); // Log full stack trace for debugging |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(new ApiResponse("error", "Failed to retrieve slots: " + e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
// Endpoint for checking slot availability |
|||
@GetMapping("/checkSlotAvailability") |
|||
public ResponseEntity<?> checkSlotAvailability( |
|||
@RequestParam("buildId") int buildId, |
|||
@RequestParam("catId") int catId, |
|||
@RequestParam("date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date, |
|||
@RequestParam("subId") Integer subId, |
|||
@RequestParam(value = "noOfPeople", required = false) Integer noOfPeople, |
|||
@RequestParam(value = "slotId", required = false) Integer slotId) { |
|||
|
|||
// buildId=1; |
|||
|
|||
try { |
|||
Map<String, Object> response = coworkspaceApiService.checkSlotAvailability(buildId, catId, date,subId ,noOfPeople, slotId); |
|||
|
|||
if (response.isEmpty()) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "No slot availability data found", null, HttpStatus.NOT_FOUND.value()), HttpStatus.NOT_FOUND); |
|||
} |
|||
return ResponseEntity.ok(new ApiResponse("success", "Slot availability checked successfully", response, HttpStatus.OK.value())); |
|||
} catch (Exception e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
// Endpoint for saving temp booking |
|||
// @PostMapping("/saveInTemp") |
|||
// public ResponseEntity<?> saveTempBooking(@RequestParam("catId") int catId, |
|||
// @RequestParam("buildId") int buildId, |
|||
// @RequestParam("subId") int subId, |
|||
// @RequestParam("noOfPeople") int noOfPeople, |
|||
// @RequestParam("fromDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate fromDate, |
|||
// @RequestParam("toDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate toDate, |
|||
// @RequestParam("userName") String userName, |
|||
// @RequestParam("userMobile") long userMobile, |
|||
// @RequestParam("slots") List<Integer> slots) { |
|||
// |
|||
// try { |
|||
// Map<String, Object> tempBooking = coworkspaceApiService.saveTempBooking(userName, userMobile, slots, fromDate, toDate, noOfPeople, catId, buildId, subId); |
|||
// if (tempBooking == null || tempBooking.isEmpty()) { |
|||
// return new ResponseEntity<>(new ApiResponse("error", "Failed to save booking", null, HttpStatus.BAD_REQUEST.value()), HttpStatus.BAD_REQUEST); |
|||
// } |
|||
// return ResponseEntity.ok(new ApiResponse("success", "Booking saved temporarily", tempBooking, HttpStatus.OK.value())); |
|||
// } catch (Exception e) { |
|||
// return new ResponseEntity<>(new ApiResponse("error", "Error occurred while saving booking", null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
// } |
|||
// } |
|||
|
|||
|
|||
@PostMapping("/saveInTemp") |
|||
public ResponseEntity<?> saveTempBooking(@RequestParam("catId") int catId, |
|||
@RequestParam("buildId") int buildId, |
|||
@RequestParam("subId") int subId, |
|||
@RequestParam("noOfPeople") int noOfPeople, |
|||
@RequestParam("fromDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate fromDate, |
|||
@RequestParam("toDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate toDate, |
|||
@RequestParam("userName") String userName, |
|||
@RequestParam("userMobile") long userMobile, |
|||
@RequestParam("slots") List<Integer> slots) { |
|||
|
|||
try { |
|||
// 🛑 Validation: fromDate should not be after toDate |
|||
if (fromDate.isAfter(toDate)) { |
|||
return ResponseEntity.badRequest().body( |
|||
new ApiResponse("error", "From date cannot be after To date", null, HttpStatus.BAD_REQUEST.value())); |
|||
} |
|||
|
|||
// buildId=1; |
|||
|
|||
// ⚠️ Validation: at least one slot is required |
|||
if (slots == null || slots.isEmpty()) { |
|||
return ResponseEntity.badRequest().body( |
|||
new ApiResponse("error", "At least one slot must be selected", null, HttpStatus.BAD_REQUEST.value())); |
|||
} |
|||
|
|||
Map<String, Object> tempBooking = coworkspaceApiService.saveTempBooking( |
|||
userName, userMobile, slots, fromDate, toDate, noOfPeople, catId, buildId, subId); |
|||
|
|||
if (tempBooking == null || tempBooking.isEmpty()) { |
|||
return new ResponseEntity<>( |
|||
new ApiResponse("error", "Failed to save booking", null, HttpStatus.BAD_REQUEST.value()), |
|||
HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
return ResponseEntity.ok( |
|||
new ApiResponse("success", "Booking saved temporarily", tempBooking, HttpStatus.OK.value())); |
|||
|
|||
} catch (Exception e) { |
|||
return new ResponseEntity<>( |
|||
new ApiResponse("error", "Error occurred while saving booking", null, HttpStatus.INTERNAL_SERVER_ERROR.value()), |
|||
HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
// Endpoint for creating an order (Razorpay) |
|||
@PostMapping(value="/create_order") |
|||
public ResponseEntity<?> create_order(HttpServletRequest request, @RequestParam("id") int tempid) throws RazorpayException { |
|||
try { |
|||
Map<String, Object> tempBookingInfo = coworkspaceApiService.getTempBookingByTempId(tempid); |
|||
|
|||
if (tempBookingInfo != null && !tempBookingInfo.isEmpty()) { |
|||
String tempbookid = tempBookingInfo.get("tempbookid").toString(); |
|||
String amount = tempBookingInfo.get("amount").toString(); |
|||
double amountDouble = 0.0; |
|||
|
|||
try { |
|||
amountDouble = Double.parseDouble(amount); |
|||
} catch (NumberFormatException e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Invalid amount format", null, HttpStatus.BAD_REQUEST.value()), HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Razorpay order creation |
|||
var client = new RazorpayClient(AppConstants.key_id, AppConstants.key_secret); |
|||
JSONObject options = new JSONObject(); |
|||
options.put("amount", amountDouble * 100); |
|||
options.put("currency", "INR"); |
|||
Order od = client.orders.create(options); |
|||
paymentService.saveorderLog(od.get("id").toString(), od.toString(), tempbookid); |
|||
|
|||
return ResponseEntity.ok(new ApiResponse("success", "Order created successfully", od.toJson().toMap(), HttpStatus.OK.value())); |
|||
} else { |
|||
return new ResponseEntity<>(new ApiResponse("error", "No data found for tempid: " + tempid, null, HttpStatus.NOT_FOUND.value()), HttpStatus.NOT_FOUND); |
|||
} |
|||
} catch (RazorpayException e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Razorpay error: " + e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} catch (Exception e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Unexpected error: " + e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
|
|||
@PostMapping("/Confirm") |
|||
public ResponseEntity<?> confirmBookingViaWhatsApp( |
|||
@RequestParam("id") String tempId, |
|||
@RequestParam(value = "source", defaultValue = "2") int source, |
|||
@RequestParam(value = "orderId", required = true) String orderId, |
|||
@RequestBody Map<String, Object> paymentResponse |
|||
) { |
|||
return coworkspaceApiService.processPaymentConfirmation(tempId, source, orderId, paymentResponse); |
|||
} |
|||
|
|||
//sanjay |
|||
@GetMapping(value = "/sendOTP") |
|||
public ResponseEntity<?> sendOtp(HttpServletRequest request, @RequestParam String mobileNo) { |
|||
// Basic mobile number validation |
|||
if (mobileNo == null || mobileNo.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Error: Mobile number cannot be empty."); |
|||
} |
|||
|
|||
if (!mobileNo.matches("^[6-9]\\d{9}$")) { |
|||
return ResponseEntity.badRequest().body("Error: Invalid mobile number format. It should be 10 digits starting with 6-9."); |
|||
} |
|||
|
|||
// Check if mobile number exists in DB |
|||
List<?> bookingDetailsList = coworkspaceApiService.findByMobileNo(Long.parseLong(mobileNo)); |
|||
if (bookingDetailsList == null || bookingDetailsList.isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Error: This number is not registered."); |
|||
} |
|||
|
|||
// Generate OTP |
|||
Random rand = new Random(); |
|||
int otp = rand.nextInt(90000) + 10000; |
|||
System.out.println("Generated OTP: " + otp); |
|||
|
|||
// Send SMS |
|||
String bodyMessage = coworkspaceApiService.sendOTPNsms(mobileNo, otp + ""); |
|||
|
|||
// Store OTP in session |
|||
HttpSession session = request.getSession(); |
|||
session.setAttribute("otp", otp); |
|||
session.setAttribute("mobileNo", mobileNo); |
|||
|
|||
return ResponseEntity.ok(bodyMessage); |
|||
} |
|||
|
|||
|
|||
|
|||
@GetMapping("/booking-history") |
|||
public ResponseEntity<ApiResponse> getBookingHistory(@RequestParam("mobile") long mobile) { |
|||
try { |
|||
System.out.println("API Called: /booking-history?mobile=" + mobile); |
|||
|
|||
List<Map<String, Object>> rawData = coworkspaceApiService.getBookingHistoryByMobile(mobile); |
|||
|
|||
if (rawData.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body(new ApiResponse("error", "No booking history found", null, HttpStatus.NOT_FOUND.value())); |
|||
} |
|||
|
|||
// Group data by booking_id |
|||
Map<Long, Map<String, Object>> groupedData = new LinkedHashMap<>(); |
|||
|
|||
for (Map<String, Object> row : rawData) { |
|||
Long bookingId = ((Number) row.get("booking_id")).longValue(); |
|||
|
|||
if (!groupedData.containsKey(bookingId)) { |
|||
Map<String, Object> booking = new LinkedHashMap<>(); |
|||
booking.put("booking_id", bookingId); |
|||
booking.put("from_date", row.get("from_date")); |
|||
booking.put("to_date", row.get("to_date")); |
|||
booking.put("booking_date", row.get("booking_date")); |
|||
booking.put("user_name", row.get("user_name")); |
|||
booking.put("mobile", row.get("mobile")); |
|||
booking.put("amount", row.get("amount")); |
|||
booking.put("payment_status", row.get("payment_status")); |
|||
booking.put("no_of_person", row.get("no_of_person")); |
|||
booking.put("building_name", row.get("building_name")); |
|||
booking.put("category_name", row.get("category_name")); |
|||
booking.put("category_display_name", row.get("category_display_name")); |
|||
booking.put("status", row.get("status")); |
|||
booking.put("slots", new ArrayList<Map<String, Object>>()); |
|||
groupedData.put(bookingId, booking); |
|||
} |
|||
|
|||
// Add slot info |
|||
List<Map<String, Object>> slots = (List<Map<String, Object>>) groupedData.get(bookingId).get("slots"); |
|||
Map<String, Object> slot = new HashMap<>(); |
|||
slot.put("slotid", row.get("slotid")); |
|||
slot.put("slot_name", row.get("slot_name")); |
|||
slot.put("checkin", row.get("checkin")); |
|||
slot.put("checkout", row.get("checkout")); |
|||
slots.add(slot); |
|||
} |
|||
|
|||
return ResponseEntity.ok(new ApiResponse( |
|||
"success", |
|||
"Booking history retrieved successfully", |
|||
new ArrayList<>(groupedData.values()), |
|||
HttpStatus.OK.value() |
|||
)); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(new ApiResponse("error", "Failed to retrieve booking history: " + e.getMessage(), null, |
|||
HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/slots-by-subcategory") |
|||
public ResponseEntity<ApiResponse> getSlotsBySubCategory(@RequestParam("scid") int scid) { |
|||
try { |
|||
List<Map<String, Object>> slots = coworkspaceApiService.getSlotsBySubCategoryId(scid); |
|||
if (slots.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body(new ApiResponse("error", "No slots found for subcategory ID: " + scid, null, HttpStatus.NOT_FOUND.value())); |
|||
} |
|||
return ResponseEntity.ok(new ApiResponse("success", "Slots retrieved successfully", slots, HttpStatus.OK.value())); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(new ApiResponse("error", "Failed to retrieve slots: " + e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getsubcategorymaster") |
|||
public ResponseEntity<ApiResponse> getsubcategorymaster(@RequestParam("cid")int cid){ |
|||
|
|||
try { |
|||
List<Map<String,Object>> getsubcategorymaster=coworkspaceApiService.getsubcategorymaster(cid); |
|||
if (getsubcategorymaster.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body(new ApiResponse("error", "No subcategorymaster found for subcategory ID: " + getsubcategorymaster, null, HttpStatus.NOT_FOUND.value())); |
|||
} |
|||
return ResponseEntity.ok(new ApiResponse("success", "subcategorymaster retrieved successfully", getsubcategorymaster, HttpStatus.OK.value())); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(new ApiResponse("error", "Failed to retrieve subcategorymaster: " + e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,44 @@ |
|||
package com.gcc.restapiservices.coworkspace.exception; |
|||
|
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import java.time.LocalDate; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
@ControllerAdvice |
|||
public class GlobalExceptionHandler { |
|||
|
|||
// @ExceptionHandler(IllegalArgumentException.class) |
|||
// public ResponseEntity<?> handleIllegalArgument(IllegalArgumentException ex) { |
|||
// Map<String, Object> error = new HashMap<>(); |
|||
// error.put("timestamp", LocalDateTime.now()); |
|||
// error.put("status", 400); |
|||
// error.put("error", "Bad Request"); |
|||
// error.put("message", ex.getMessage()); |
|||
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); |
|||
// } |
|||
|
|||
@ExceptionHandler(Exception.class) |
|||
public ResponseEntity<?> handleAll(Exception ex) { |
|||
Map<String, Object> error = new HashMap<>(); |
|||
error.put("timestamp", LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))); |
|||
error.put("status", 500); |
|||
error.put("error", "Internal Server Error"); |
|||
error.put("message", ex.getMessage()); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); |
|||
} |
|||
|
|||
@ExceptionHandler(IllegalArgumentException.class) |
|||
public ResponseEntity<?> handleIllegalArgument(IllegalArgumentException ex) { |
|||
Map<String, Object> error = new HashMap<>(); |
|||
error.put("timestamp", LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))); |
|||
error.put("status", HttpStatus.BAD_REQUEST.value()); |
|||
error.put("error", "Bad Request"); |
|||
error.put("message", ex.getMessage()); |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
package com.gcc.restapiservices.coworkspace.exception; |
|||
|
|||
public class NoSlotAvailable extends RuntimeException{ |
|||
public NoSlotAvailable(String msg){ |
|||
super(msg); |
|||
} |
|||
} |
|||
@ -0,0 +1,38 @@ |
|||
package com.gcc.restapiservices.coworkspace.service; |
|||
|
|||
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; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.util.Map; |
|||
|
|||
@Service |
|||
public class AmountConfigService { |
|||
|
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCoworkspaceRestServicesDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
|
|||
public Map<String, Object> getAmountBySlotid(int slotid) { |
|||
String sql = """ |
|||
SELECT * FROM amount_config WHERE slotid = ? |
|||
AND isactive = 1 AND isdelete = 0 |
|||
"""; |
|||
try { |
|||
Map<String, Object> result = jdbcTemplate.queryForMap(sql, slotid); |
|||
return result; |
|||
}catch (Exception e){ |
|||
return null; |
|||
} |
|||
|
|||
// Check if the result is null and return an empty map if so |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,33 @@ |
|||
package com.gcc.restapiservices.coworkspace.service; |
|||
|
|||
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; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
@Service |
|||
public class CalendarService { |
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCoworkspaceRestServicesDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getCalendarBasedOnSubCatId(int scid) { |
|||
String sql = "select * from slots where scid = ? AND (`isactive`=1 AND `isdelete`=0)"; |
|||
System.err.println(sql+scid); |
|||
return jdbcTemplate.queryForList(sql, scid); |
|||
|
|||
} |
|||
|
|||
public String getSlotText(String slotID) { |
|||
String sql = "SELECT name FROM slots WHERE slotid = ? AND isactive = 1 AND isdelete = 0"; |
|||
return jdbcTemplate.queryForObject(sql, new Object[]{slotID}, String.class); |
|||
} |
|||
} |
|||
1447
src/main/java/com/gcc/restapiservices/coworkspace/service/CoworkspaceApiService.java
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,193 @@ |
|||
package com.gcc.restapiservices.coworkspace.service; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.dao.DataAccessException; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.jdbc.core.PreparedStatementCreator; |
|||
import org.springframework.jdbc.support.GeneratedKeyHolder; |
|||
import org.springframework.jdbc.support.KeyHolder; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.sql.Connection; |
|||
import java.sql.PreparedStatement; |
|||
import java.sql.SQLException; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.Map; |
|||
|
|||
@Service |
|||
public class PaymentService { |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCoworkspaceRestServicesDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
System.out.println("🔵 PaymentService JdbcTemplate initialized with dataSource: " + dataSource); |
|||
} |
|||
|
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
@Transactional("coworkspaceTransactionManager") |
|||
public int savePayment( String totalAmount, |
|||
String payment_id, |
|||
String payment_orderid, |
|||
String payment_status, |
|||
String bookingId, |
|||
String mobile_no, |
|||
String whatsUpRefId |
|||
){ |
|||
|
|||
System.out.println("🔵 PaymentService.savePayment called with:"); |
|||
System.out.println("- totalAmount: " + totalAmount); |
|||
System.out.println("- payment_id: " + payment_id); |
|||
System.out.println("- payment_orderid: " + payment_orderid); |
|||
System.out.println("- payment_status: " + payment_status); |
|||
System.out.println("- bookingId: " + bookingId); |
|||
System.out.println("- mobile_no: " + mobile_no); |
|||
System.out.println("- whatsUpRefId: " + whatsUpRefId); |
|||
System.out.println("- paymentdate: " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
|||
|
|||
int lastInsertId = 0; |
|||
|
|||
String sqlQuery = "INSERT INTO `payment`(`amount`, `mobno`, `order_id`, `payment_id`, `payment_status`, `paymentdate`, `booking_id`, `whats_up_refid`) " |
|||
+ "VALUES (?,?,?,?,?,?,?,?)"; |
|||
|
|||
System.out.println("🔵 SQL Query: " + sqlQuery); |
|||
System.out.println("🔵 JdbcTemplate instance: " + jdbcTemplate); |
|||
|
|||
if (jdbcTemplate == null) { |
|||
System.out.println("❌ JdbcTemplate is null! Cannot save payment."); |
|||
return 0; |
|||
} |
|||
|
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
|
|||
try { |
|||
int affectedRows = jdbcTemplate.update(new PreparedStatementCreator() { |
|||
@Override |
|||
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { |
|||
PreparedStatement ps = connection.prepareStatement(sqlQuery, new String[]{"id"}); |
|||
ps.setString(1, totalAmount); |
|||
ps.setString(2, mobile_no); |
|||
ps.setString(3, payment_orderid); |
|||
ps.setString(4, payment_id); |
|||
ps.setString(5, payment_status); |
|||
ps.setString(6, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
|||
ps.setString(7, bookingId); |
|||
ps.setString(8, whatsUpRefId); |
|||
return ps; |
|||
} |
|||
}, keyHolder); |
|||
|
|||
System.out.println("🔵 Affected rows: " + affectedRows); |
|||
|
|||
if (affectedRows > 0) { |
|||
Number generatedId = keyHolder.getKey(); |
|||
lastInsertId = (generatedId != null) ? generatedId.intValue() : 0; |
|||
System.out.println("🔵 Generated ID: " + lastInsertId); |
|||
return lastInsertId; |
|||
} else { |
|||
System.out.println("❌ Error on payment save - no rows affected!"); |
|||
return 0; |
|||
} |
|||
} catch (DataAccessException e) { |
|||
System.out.println("❌ Data Access Exception in savePayment:"); |
|||
e.printStackTrace(); |
|||
Throwable rootCause = e.getMostSpecificCause(); |
|||
if (rootCause instanceof SQLException) { |
|||
SQLException sqlException = (SQLException) rootCause; |
|||
System.out.println("SQL State: " + sqlException.getSQLState()); |
|||
System.out.println("Error Code: " + sqlException.getErrorCode()); |
|||
System.out.println("Message: " + sqlException.getMessage()); |
|||
} else { |
|||
System.out.println("Message: " + rootCause.getMessage()); |
|||
} |
|||
return 0; |
|||
} catch (Exception e) { |
|||
System.out.println("❌ General Exception in savePayment:"); |
|||
e.printStackTrace(); |
|||
return 0; |
|||
} |
|||
} |
|||
|
|||
|
|||
public int saveorderLog(String order_id, String order_info, String temp_booking_id) { |
|||
System.out.println("inside order log"); |
|||
if (order_id == null || temp_booking_id == null) { |
|||
System.out.println("❌ Missing required fields. Order ID: " + order_id + ", Temp Book ID: " + temp_booking_id); |
|||
return 0; |
|||
} |
|||
|
|||
String sqlQuery = "INSERT INTO `order_log`(`order_id`, `order_info`, `temp_booking_id`) VALUES (?,?,?)"; |
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
|
|||
try { |
|||
int affectedRows = jdbcTemplate.update(connection -> { |
|||
PreparedStatement ps = connection.prepareStatement(sqlQuery, new String[]{"id"}); |
|||
ps.setString(1, order_id); |
|||
ps.setString(2, order_info); |
|||
ps.setString(3, temp_booking_id); |
|||
return ps; |
|||
}, keyHolder); |
|||
|
|||
if (affectedRows > 0) { |
|||
Number generatedId = keyHolder.getKey(); |
|||
return (generatedId != null) ? generatedId.intValue() : 0; |
|||
} else { |
|||
System.out.println("❌ Failed to insert into order_log."); |
|||
return 0; |
|||
} |
|||
} catch (Exception e) { |
|||
System.out.println("🚨 Exception during insert to order_log: " + e.getMessage()); |
|||
e.printStackTrace(); |
|||
return 0; |
|||
} |
|||
} |
|||
|
|||
|
|||
@Transactional("coworkspaceTransactionManager") |
|||
public int updateBookingIdInPayment(String mobile_no,String bookingId,String payment_id) { |
|||
System.out.println("inside update payment "); |
|||
String sqlQuery = "UPDATE `payment` SET `mobno` = ?, `booking_id` = ? WHERE `id` = ?"; |
|||
|
|||
try { |
|||
int affectedRows = jdbcTemplate.update(new PreparedStatementCreator() { |
|||
@Override |
|||
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { |
|||
PreparedStatement ps = connection.prepareStatement(sqlQuery); |
|||
ps.setString(1, mobile_no); // Set the new mobile number |
|||
ps.setString(2, bookingId); // Set the new booking ID |
|||
ps.setString(3, payment_id); // Use the payment ID to locate the record to update |
|||
return ps; |
|||
} |
|||
}); |
|||
|
|||
if (affectedRows > 0) { |
|||
System.out.println("Record updated successfully!"); |
|||
return 1; // Or return some relevant status |
|||
} else { |
|||
System.out.println("Error on updating record!"); |
|||
return 0; |
|||
} |
|||
} catch (DataAccessException e) { |
|||
System.out.println("Data Access Exception:"); |
|||
Throwable rootCause = e.getMostSpecificCause(); |
|||
if (rootCause instanceof SQLException) { |
|||
SQLException sqlException = (SQLException) rootCause; |
|||
System.out.println("SQL State: " + sqlException.getSQLState()); |
|||
System.out.println("Error Code: " + sqlException.getErrorCode()); |
|||
System.out.println("Message: " + sqlException.getMessage()); |
|||
} else { |
|||
System.out.println("Message: " + rootCause.getMessage()); |
|||
} |
|||
return 0; |
|||
} |
|||
} |
|||
|
|||
public Map<String, Object > getPaymentById(int pid){ |
|||
String sqlQuery="select * from payment where id = ?"; |
|||
return jdbcTemplate.queryForMap(sqlQuery,pid); |
|||
} |
|||
} |
|||
@ -0,0 +1,69 @@ |
|||
package com.gcc.restapiservices.coworkspace.service; |
|||
|
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
import java.net.HttpURLConnection; |
|||
import java.net.URL; |
|||
|
|||
@Service |
|||
public class SMSService { |
|||
|
|||
|
|||
|
|||
public String sendMsg(String msgUrl) { |
|||
System.out.println("Whatsapp URL :-"+msgUrl); |
|||
|
|||
String response =""; |
|||
try{ |
|||
HttpURLConnection connection =null; |
|||
|
|||
URL url = new URL(msgUrl); |
|||
connection = (HttpURLConnection) url.openConnection(); |
|||
connection.setRequestMethod("GET"); |
|||
|
|||
int responseCode = connection.getResponseCode(); |
|||
response=responseCode+""; |
|||
System.out.println("Response Code: " + responseCode); |
|||
|
|||
}catch (Exception e){ |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return response; |
|||
} |
|||
|
|||
public String sendSMS( String SMS_Url, String mobileNo, String otp) { |
|||
|
|||
System.out.println("SMS URL:- "+ SMS_Url); |
|||
String bodyMessage = ""; |
|||
try { |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String Response = restTemplate.getForObject(SMS_Url, String.class); |
|||
|
|||
// Using Jackson ObjectMapper to parse the response JSON |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
ObjectNode jsonResponse = (ObjectNode) objectMapper.readTree(Response); |
|||
|
|||
// Add mobileNo and otp to the response JSON |
|||
jsonResponse.put("MobileNo", mobileNo); |
|||
jsonResponse.put("otp", otp); |
|||
|
|||
// Convert the updated JSON object back to string |
|||
bodyMessage = jsonResponse.toString(); |
|||
// bodyMessage=Response; |
|||
System.out.println("\n bodyMessage"+bodyMessage); |
|||
|
|||
System.out.println("OTP sent successfully!"); |
|||
|
|||
} catch (Exception e) { |
|||
System.out.print("ERROR---: "+e); |
|||
bodyMessage = "Error"; |
|||
} |
|||
|
|||
return bodyMessage; |
|||
} |
|||
} |
|||
@ -0,0 +1,102 @@ |
|||
package com.gcc.restapiservices.coworkspace.service; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
@Service |
|||
public class WhatsAppService { |
|||
|
|||
@Autowired |
|||
private SMSService whatsappMsgService; |
|||
|
|||
String password = "h2YjFNcJ"; |
|||
|
|||
public String sendOTP(String mobileNo, String msg) { |
|||
String msgContent ="https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password="+password+"&send_to="+mobileNo+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Welcome+to+Mudhalvar+Padaipagam%2C+%0A%0AThe+OTP+for+your+booking+is+"+msg+"%2A"; |
|||
System.out.println(msgContent); |
|||
return whatsappMsgService.sendMsg(msgContent); |
|||
} |
|||
|
|||
public String sendELearnNmsg(String MobileNo, String noOfPerson, String bdate, String slot, String amount, String bookingId) { |
|||
String msgContent = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password="+password+"&send_to="+MobileNo+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Dear+Patron%2C%0AWelcome+to+Muthalvar+Padaippagam%F0%9F%99%8F++%0A%0AYou+have+booked+our+Learning+Centre+for+%2A"+noOfPerson+"%2A+number+of+persons+on+%2A"+bdate+"%2A+at+%0Atime+slot+%2A"+slot+"%2A+.%0A%0APayment+for+the+booking+is+%2ARs.+"+amount+"%2A+received.+%0A%0APlease+show+your+QR+Code+at+Reception+Desk+for+accessing+Muthalvar+Padaippagam.%0A%0AHave+a+Nice+Day%F0%9F%98%8A&isTemplate=true&buttonUrlParam=muthalvarpadaippagam%2FbookingQRCode%3Fbooking_id%3D"+bookingId; |
|||
System.out.println(msgContent); |
|||
return whatsappMsgService.sendMsg(msgContent); |
|||
} |
|||
|
|||
public String sendTLearnNmsg(String MobileNo, String noOfPerson, String bdate, String slot, String amount, String bookingId) { |
|||
String msgContent = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password="+password+"&send_to="+MobileNo+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%BE%E0%AE%A9+%E0%AE%B5%E0%AE%BE%E0%AE%9F%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88%E0%AE%AF%E0%AE%BE%E0%AE%B3%E0%AE%B0%E0%AF%87%2C+%0A%E0%AE%AE%E0%AF%81%E0%AE%A4%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%B0%E0%AF%8D+%E0%AE%AA%E0%AE%9F%E0%AF%88%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%95%E0%AE%AE%E0%AF%8D+%E0%AE%A4%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%88+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AF%81%E0%AE%9F%E0%AE%A9%E0%AF%8D+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BF%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AE%A4%E0%AF%81+%F0%9F%99%8F++%0A%0A%E0%AE%A4%E0%AE%BE%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+%E0%AE%8E%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AE%BF%E0%AE%A9%E0%AF%8D+%E0%AE%95%E0%AE%B1%E0%AF%8D%E0%AE%B1%E0%AE%B2%E0%AF%8D+%E0%AE%AE%E0%AF%88%E0%AE%AF%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AF%88++%2A"+noOfPerson+"%2A+%E0%AE%8E%E0%AE%A3%E0%AF%8D%E0%AE%A3%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88+%E0%AE%A8%E0%AE%AA%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%81%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%81++%2A"+bdate+"%2A+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AF%81++%E0%AE%A8%E0%AF%87%E0%AE%B0+%E0%AE%87%E0%AE%9F%E0%AF%88%E0%AE%B5%E0%AF%86%E0%AE%B3%E0%AE%BF+%2A"+slot+"%2A+%E0%AE%B2%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%8A%E0%AE%B3%E0%AF%8D%E0%AE%B3+%E0%AE%AE%E0%AF%81%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%A4%E0%AE%BF%E0%AE%B5%E0%AF%81+%E0%AE%9A%E0%AF%86%E0%AE%AF%E0%AF%8D%E0%AE%A4%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AF%80%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D.+.%0A%0A%E0%AE%87%E0%AE%A4%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BE%E0%AE%A9++%E0%AE%95%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AE%A3%E0%AE%AE%E0%AF%8D+%2A%E0%AE%B0%E0%AF%82.+"+amount+"%2A+%E0%AE%AA%E0%AF%86%E0%AE%B1%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AE%A4%E0%AF%81.%0A%0A%E0%AE%AE%E0%AF%81%E0%AE%A4%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%B0%E0%AF%8D+%E0%AE%AA%E0%AE%9F%E0%AF%88%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%95%E0%AE%AE%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4+%E0%AE%89%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+QR+%E0%AE%95%E0%AF%81%E0%AE%B1%E0%AE%BF%E0%AE%AF%E0%AF%80%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%88+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%AA%E0%AE%B1%E0%AF%88%E0%AE%AF%E0%AE%BF%E0%AE%B2%E0%AF%8D+%E0%AE%95%E0%AE%BE%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D.%0A%0A%E0%AE%87%E0%AE%A8%E0%AF%8D%E0%AE%A8%E0%AE%BE%E0%AE%B3%E0%AF%8D+%E0%AE%87%E0%AE%A9%E0%AE%BF%E0%AE%AF+%E0%AE%A8%E0%AE%BE%E0%AE%B3%E0%AE%BE%E0%AE%AF%E0%AF%8D+%E0%AE%85%E0%AE%AE%E0%AF%88%E0%AE%AF%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%AE%E0%AF%8D%F0%9F%98%8A&isTemplate=true&buttonUrlParam=muthalvarpadaippagam%2FbookingQRCode%3Fbooking_id%3D"+bookingId; |
|||
System.out.println(msgContent); |
|||
return whatsappMsgService.sendMsg(msgContent); |
|||
} |
|||
|
|||
public String sendEDeskspaceNmsg(String MobileNo, String noOfPerson, String bdate, String slot, String amount, String bookingId) { |
|||
String msgContent = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password="+password+"&send_to="+MobileNo+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Dear+Patron%2C%0AWelcome+to+Muthalvar+Padaippagam%F0%9F%99%8F++%0A%0AYou+have+booked+our+Desk+space+for+%2A"+noOfPerson+"%2A+number+of+persons+on+%2A"+bdate+"%2A+at+time+slot+%2A"+slot+"%2A+.%0A%0APayment+for+the+booking+is+%2ARs.+"+amount+"%2A+received.+%0A%0APlease+show+your+QR+Code+at+Reception+Desk+for+accessing+Muthalvar+Padaippagam.%0A%0AHave+a+Nice+Day%F0%9F%98%8A&isTemplate=true&buttonUrlParam=muthalvarpadaippagam%2FbookingQRCode%3Fbooking_id%3D"+bookingId; |
|||
System.out.println(msgContent); |
|||
return whatsappMsgService.sendMsg(msgContent); |
|||
} |
|||
|
|||
public String sendTDeskspaceNmsg(String MobileNo, String noOfPerson, String bdate, String slot, String amount, String bookingId) { |
|||
String msgContent = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password="+password+"&send_to="+MobileNo+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%BE%E0%AE%A9+%E0%AE%B5%E0%AE%BE%E0%AE%9F%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88%E0%AE%AF%E0%AE%BE%E0%AE%B3%E0%AE%B0%E0%AF%87%2C+%0A%E0%AE%AE%E0%AF%81%E0%AE%A4%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%B0%E0%AF%8D+%E0%AE%AA%E0%AE%9F%E0%AF%88%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%95%E0%AE%AE%E0%AF%8D+%E0%AE%A4%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%88+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AF%81%E0%AE%9F%E0%AE%A9%E0%AF%8D+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BF%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AE%A4%E0%AF%81%F0%9F%99%8F++%0A%0A%E0%AE%A4%E0%AE%BE%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+%E0%AE%8E%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AE%BF%E0%AE%A9%E0%AF%8D+%E0%AE%AE%E0%AF%87%E0%AE%9A%E0%AF%88+%E0%AE%87%E0%AE%9F%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%A9%E0%AF%88+%2A"+noOfPerson+"%2A+%E0%AE%8E%E0%AE%A3%E0%AF%8D%E0%AE%A3%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88+%E0%AE%A8%E0%AE%AA%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%81%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%81+%2A"+bdate+"%2A+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AF%81+%E0%AE%A8%E0%AF%87%E0%AE%B0+%E0%AE%87%E0%AE%9F%E0%AF%88%E0%AE%B5%E0%AF%86%E0%AE%B3%E0%AE%BF+%2A"+slot+"%2A+%E0%AE%B2%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%8A%E0%AE%B3%E0%AF%8D%E0%AE%B3+%E0%AE%AE%E0%AF%81%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%A4%E0%AE%BF%E0%AE%B5%E0%AF%81+%E0%AE%9A%E0%AF%86%E0%AE%AF%E0%AF%8D%E0%AE%A4%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AF%80%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D.%0A%0A%E0%AE%87%E0%AE%A4%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BE%E0%AE%A9++%E0%AE%95%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AE%A3%E0%AE%AE%E0%AF%8D+%2A%E0%AE%B0%E0%AF%82.+"+amount+"%2A+%E0%AE%AA%E0%AF%86%E0%AE%B1%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AE%A4%E0%AF%81.+%0A%0A%E0%AE%AE%E0%AF%81%E0%AE%A4%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%B0%E0%AF%8D+%E0%AE%AA%E0%AE%9F%E0%AF%88%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%95%E0%AE%AE%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4+%E0%AE%89%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+QR+%E0%AE%95%E0%AF%81%E0%AE%B1%E0%AE%BF%E0%AE%AF%E0%AF%80%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%88+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%AA%E0%AE%B1%E0%AF%88%E0%AE%AF%E0%AE%BF%E0%AE%B2%E0%AF%8D+%E0%AE%95%E0%AE%BE%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D%0A%0A%E0%AE%87%E0%AE%A8%E0%AF%8D%E0%AE%A8%E0%AE%BE%E0%AE%B3%E0%AF%8D+%E0%AE%87%E0%AE%A9%E0%AE%BF%E0%AE%AF+%E0%AE%A8%E0%AE%BE%E0%AE%B3%E0%AE%BE%E0%AE%AF%E0%AF%8D+%E0%AE%85%E0%AE%AE%E0%AF%88%E0%AE%AF%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%AE%E0%AF%8D%F0%9F%98%8A&isTemplate=true&buttonUrlParam=muthalvarpadaippagam%2FbookingQRCode%3Fbooking_id%3D"+bookingId; |
|||
System.out.println(msgContent); |
|||
return whatsappMsgService.sendMsg(msgContent); |
|||
} |
|||
|
|||
public String sendEMonthDeskspaceNmsg(String MobileNo, String noOfPerson, String bFromdate,String bTodate, String slot, String amount, String bookingId) { |
|||
String msgContent = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password="+password+"&send_to="+MobileNo+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Dear+Patron%2C%0AWelcome+to+Muthalvar+Padaippagam%F0%9F%99%8F++%0A%0AYou+have+booked+our+Desk+space+for+%2A"+noOfPerson+"%2A+number+of+persons+for+30+days+from+%2A"+bFromdate+"+to+"+bTodate+"%2A+at+time+slot+%2A"+slot+"%2A.%0A%0APayment+for+the+booking+is+%2ARs.+"+amount+"%2A+received.+%0A%0APlease+show+your+QR+Code+at+Reception+Desk+for+accessing+Muthalvar+Padaippagam.%0A%0AHave+a+Nice+Day%F0%9F%98%8A&isTemplate=true&buttonUrlParam=muthalvarpadaippagam%2FbookingQRCode%3Fbooking_id%3D"+bookingId; |
|||
System.out.println(msgContent); |
|||
return whatsappMsgService.sendMsg(msgContent); |
|||
} |
|||
|
|||
public String sendTMonthDeskspaceNmsg(String MobileNo, String noOfPerson, String bfromDate,String btoDate, String slot, String amount, String bookingId) { |
|||
String msgContent = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to="+MobileNo+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%BE%E0%AE%A9+%E0%AE%B5%E0%AE%BE%E0%AE%9F%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88%E0%AE%AF%E0%AE%BE%E0%AE%B3%E0%AE%B0%E0%AF%87%2C+%0A%E0%AE%AE%E0%AF%81%E0%AE%A4%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%B0%E0%AF%8D+%E0%AE%AA%E0%AE%9F%E0%AF%88%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%95%E0%AE%AE%E0%AF%8D+%E0%AE%A4%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%88+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AF%81%E0%AE%9F%E0%AE%A9%E0%AF%8D+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BF%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AE%A4%E0%AF%81+%F0%9F%99%8F++%0A%0A%E0%AE%A4%E0%AE%BE%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+%E0%AE%8E%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AE%BF%E0%AE%A9%E0%AF%8D+%E0%AE%AE%E0%AF%87%E0%AE%9A%E0%AF%88+%E0%AE%87%E0%AE%9F%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AF%88+%2A"+noOfPerson+"%2A+%E0%AE%8E%E0%AE%A3%E0%AF%8D%E0%AE%A3%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88+%E0%AE%A8%E0%AE%AA%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%81%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%81+30+%E0%AE%A8%E0%AE%BE%E0%AE%9F%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+%2A"+bfromDate+"+%E0%AE%AE%E0%AF%81%E0%AE%A4%E0%AE%B2%E0%AF%8D+"+btoDate+"%2A+%E0%AE%B5%E0%AE%B0%E0%AF%88+%E0%AE%A8%E0%AF%87%E0%AE%B0+%E0%AE%87%E0%AE%9F%E0%AF%88%E0%AE%B5%E0%AF%86%E0%AE%B3%E0%AE%BF+%2A"+slot+"%2A+%E0%AE%B2%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%8A%E0%AE%B3%E0%AF%8D%E0%AE%B3+%E0%AE%AE%E0%AF%81%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%A4%E0%AE%BF%E0%AE%B5%E0%AF%81+%E0%AE%9A%E0%AF%86%E0%AE%AF%E0%AF%8D%E0%AE%A4%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AF%80%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D.%0A%0A%E0%AE%87%E0%AE%A4%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BE%E0%AE%A9++%E0%AE%95%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AE%A3%E0%AE%AE%E0%AF%8D+%2A%E0%AE%B0%E0%AF%82.+"+amount+"%2A+%E0%AE%AA%E0%AF%86%E0%AE%B1%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AE%A4%E0%AF%81.%0A%0A%E0%AE%AE%E0%AF%81%E0%AE%A4%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%B0%E0%AF%8D+%E0%AE%AA%E0%AE%9F%E0%AF%88%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%95%E0%AE%AE%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4+%E0%AE%89%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+QR+%E0%AE%95%E0%AF%81%E0%AE%B1%E0%AE%BF%E0%AE%AF%E0%AF%80%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%88+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%AA%E0%AE%B1%E0%AF%88%E0%AE%AF%E0%AE%BF%E0%AE%B2%E0%AF%8D+%E0%AE%95%E0%AE%BE%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D%0A%0A%E0%AE%87%E0%AE%A8%E0%AF%8D%E0%AE%A8%E0%AE%BE%E0%AE%B3%E0%AF%8D+%E0%AE%87%E0%AE%A9%E0%AE%BF%E0%AE%AF+%E0%AE%A8%E0%AE%BE%E0%AE%B3%E0%AE%BE%E0%AE%AF%E0%AF%8D+%E0%AE%85%E0%AE%AE%E0%AF%88%E0%AE%AF%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%AE%E0%AF%8D%F0%9F%98%8A&isTemplate=true&buttonUrlParam=muthalvarpadaippagam%2FbookingQRCode%3Fbooking_id%3D"+bookingId; |
|||
System.out.println(msgContent); |
|||
return whatsappMsgService.sendMsg(msgContent); |
|||
} |
|||
|
|||
public String sendEConfeNmsg(String mobileNo, String bdate, String slot, String amount,String bookingId) { |
|||
String msgContent= "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to="+mobileNo+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Dear+Patron%2C%0AWelcome+to+Muthalvar+Padaippagam%F0%9F%99%8F++%0A%0AYou+have+booked+our+Conference+Hall+on+%2A"+bdate+"%2A+at+time+slot+%2A"+slot+"%2A+.%0A%0APayment+for+the+booking+is+%2ARs.+"+amount+"%2A+received.+%0A%0APlease+show+your+QR+Code+at+Reception+Desk+for+accessing+Muthalvar+Padaippagam.%0A%0AHave+a+Nice+Day%F0%9F%98%8A&isTemplate=true&buttonUrlParam=muthalvarpadaippagam%2FbookingQRCode%3Fbooking_id%3D"+bookingId; |
|||
System.out.println(msgContent); |
|||
return whatsappMsgService.sendMsg(msgContent); |
|||
} |
|||
|
|||
public String sendTConfeNmsg(String mobileNo, String bdate, String slot, String amount,String bookingId) { |
|||
String msgContent = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to="+mobileNo+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%BE%E0%AE%A9+%E0%AE%B5%E0%AE%BE%E0%AE%9F%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88%E0%AE%AF%E0%AE%BE%E0%AE%B3%E0%AE%B0%E0%AF%87%2C+%0A%E0%AE%AE%E0%AF%81%E0%AE%A4%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%B0%E0%AF%8D+%E0%AE%AA%E0%AE%9F%E0%AF%88%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%95%E0%AE%AE%E0%AF%8D+%E0%AE%A4%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%88+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AF%81%E0%AE%9F%E0%AE%A9%E0%AF%8D+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BF%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AE%A4%E0%AF%81+%F0%9F%99%8F++%0A%0A%E0%AE%A4%E0%AE%BE%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+%E0%AE%8E%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AE%BF%E0%AE%A9%E0%AF%8D+%E0%AE%95%E0%AE%B2%E0%AE%A8%E0%AF%8D%E0%AE%A4%E0%AE%BE%E0%AE%AF%E0%AF%8D%E0%AE%B5%E0%AF%81+%E0%AE%85%E0%AE%B0%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%A9%E0%AF%88+%2A"+bdate+"%2A+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AF%81++%E0%AE%A8%E0%AF%87%E0%AE%B0+%E0%AE%87%E0%AE%9F%E0%AF%88%E0%AE%B5%E0%AF%86%E0%AE%B3%E0%AE%BF+%2A"+slot+"%2A+%E0%AE%B2%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%8A%E0%AE%B3%E0%AF%8D%E0%AE%B3+%E0%AE%AE%E0%AF%81%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%A4%E0%AE%BF%E0%AE%B5%E0%AF%81+%E0%AE%9A%E0%AF%86%E0%AE%AF%E0%AF%8D%E0%AE%A4%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AF%80%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D.+%0A%0A%E0%AE%87%E0%AE%A4%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BE%E0%AE%A9++%E0%AE%95%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AE%A3%E0%AE%AE%E0%AF%8D+%2A%E0%AE%B0%E0%AF%82.+"+amount+"%2A+%E0%AE%AA%E0%AF%86%E0%AE%B1%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AE%A4%E0%AF%81.+%0A%0A%E0%AE%AE%E0%AF%81%E0%AE%A4%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%B0%E0%AF%8D+%E0%AE%AA%E0%AE%9F%E0%AF%88%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%95%E0%AE%AE%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4+%E0%AE%89%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+QR+%E0%AE%95%E0%AF%81%E0%AE%B1%E0%AE%BF%E0%AE%AF%E0%AF%80%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%88+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%AA%E0%AE%B1%E0%AF%88%E0%AE%AF%E0%AE%BF%E0%AE%B2%E0%AF%8D+%E0%AE%95%E0%AE%BE%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D%0A%0A%E0%AE%87%E0%AE%A8%E0%AF%8D%E0%AE%A8%E0%AE%BE%E0%AE%B3%E0%AF%8D+%E0%AE%87%E0%AE%A9%E0%AE%BF%E0%AE%AF+%E0%AE%A8%E0%AE%BE%E0%AE%B3%E0%AE%BE%E0%AE%AF%E0%AF%8D+%E0%AE%85%E0%AE%AE%E0%AF%88%E0%AE%AF%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%AE%E0%AF%8D%F0%9F%98%8A&isTemplate=true&buttonUrlParam=muthalvarpadaippagam%2FbookingQRCode%3Fbooking_id%3D"+bookingId; |
|||
return whatsappMsgService.sendMsg(msgContent); |
|||
} |
|||
|
|||
public String sendSMS( String SMS_Url, String mobileNo, String otp) { |
|||
|
|||
System.out.println("SMS URL:- "+ SMS_Url); |
|||
String bodyMessage = ""; |
|||
try { |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String Response = restTemplate.getForObject(SMS_Url, String.class); |
|||
|
|||
// Using Jackson ObjectMapper to parse the response JSON |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
ObjectNode jsonResponse = (ObjectNode) objectMapper.readTree(Response); |
|||
|
|||
// Add mobileNo and otp to the response JSON |
|||
jsonResponse.put("MobileNo", mobileNo); |
|||
jsonResponse.put("otp", otp); |
|||
|
|||
// Convert the updated JSON object back to string |
|||
bodyMessage = jsonResponse.toString(); |
|||
// bodyMessage=Response; |
|||
System.out.println("\n bodyMessage"+bodyMessage); |
|||
|
|||
System.out.println("OTP sent successfully!"); |
|||
|
|||
} catch (Exception e) { |
|||
System.out.print("ERROR---: "+e); |
|||
bodyMessage = "Error"; |
|||
} |
|||
|
|||
return bodyMessage; |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,264 @@ |
|||
package com.gcc.restapiservices.crslogs.controller; |
|||
|
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.HashMap; |
|||
import java.util.LinkedHashMap; |
|||
import java.util.Map; |
|||
import java.util.Random; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
import com.gcc.restapiservices.crslogs.service.CrsLogsService; |
|||
|
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/crslogs/api") |
|||
public class CrsLogsApiController { |
|||
|
|||
|
|||
@Autowired |
|||
private CrsLogsService crsLogsService; |
|||
|
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
|
|||
|
|||
// @PostMapping("/saveCrsCertificateLogs") |
|||
// public ResponseEntity<?> saveCrsCertificateLogs(HttpServletRequest request, |
|||
// @RequestParam String regNo, |
|||
// @RequestParam String eventDate, |
|||
// @RequestParam String Url, |
|||
// @RequestParam String service, |
|||
// @RequestParam(required = false) String application_flag, |
|||
// @RequestParam(required = false) String mobile_number) { |
|||
// |
|||
// // Set default value if not passed |
|||
// if (application_flag == null || application_flag.trim().isEmpty()) { |
|||
// application_flag = "whatsapp"; |
|||
// } |
|||
// |
|||
// return crsLogsService.saveCrsCertificateLogs(regNo, eventDate, Url, service, application_flag, mobile_number); |
|||
// } |
|||
|
|||
|
|||
|
|||
@PostMapping("/saveCrsCertificateLogs") |
|||
public ResponseEntity<Map<String, Object>> saveCrsCertificateLogs( |
|||
HttpServletRequest request, |
|||
@RequestParam String regNo, |
|||
@RequestParam String eventDate, |
|||
@RequestParam String Url, |
|||
@RequestParam String service, |
|||
@RequestParam(required = false) String application_flag, |
|||
@RequestParam(required = false) String mobile_number) { |
|||
|
|||
Map<String, Object> response = new LinkedHashMap<>(); |
|||
|
|||
try { |
|||
// Validate required fields |
|||
if (regNo == null || regNo.trim().isEmpty()) { |
|||
return badRequest("regNo is required"); |
|||
} |
|||
if (eventDate == null || eventDate.trim().isEmpty()) { |
|||
return badRequest("eventDate is required"); |
|||
} |
|||
if (Url == null || Url.trim().isEmpty()) { |
|||
return badRequest("Url is required"); |
|||
} |
|||
if (service == null || service.trim().isEmpty()) { |
|||
return badRequest("service is required"); |
|||
} |
|||
|
|||
// Default application_flag if not provided |
|||
if (application_flag == null || application_flag.trim().isEmpty()) { |
|||
application_flag = "whatsapp"; |
|||
} |
|||
|
|||
int count = crsLogsService.saveCrsCertificateLogs( |
|||
regNo.trim(), eventDate.trim(), Url.trim(), service.trim(), |
|||
application_flag.trim(), mobile_number != null ? mobile_number.trim() : null |
|||
); |
|||
|
|||
if (count > 0) { |
|||
response.put("status", true); |
|||
response.put("message", "Details saved successfully"); |
|||
response.put("status_code", 200); |
|||
return ResponseEntity.ok(response); |
|||
} else { |
|||
response.put("status", false); |
|||
response.put("message", "Failed to save details"); |
|||
response.put("status_code", 500); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
|||
} |
|||
|
|||
} catch (Exception ex) { |
|||
response.put("status", false); |
|||
response.put("message", "An unexpected error occurred: " + ex.getMessage()); |
|||
response.put("status_code", 500); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
|||
} |
|||
} |
|||
|
|||
private ResponseEntity<Map<String, Object>> badRequest(String message) { |
|||
Map<String, Object> error = new LinkedHashMap<>(); |
|||
error.put("status", false); |
|||
error.put("message", message); |
|||
error.put("status_code", 400); |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
/*///////////////// otp configuration /////////////////////*/ |
|||
|
|||
// @GetMapping(value = "/sendOTP") |
|||
// public String sendOtp(HttpServletRequest request, @RequestParam String mobile) { |
|||
// |
|||
// // Create an ObjectMapper instance |
|||
// ObjectMapper objectMapper = new ObjectMapper(); |
|||
// |
|||
// Map<String, Object> response = new HashMap<>(); |
|||
// |
|||
// String MobileNo=mobile; |
|||
// System.out.print("\n MobileNo---:"+mobile); |
|||
// Random rand = new Random(); |
|||
// int otp = rand.nextInt(90000) + 10000; |
|||
// |
|||
// //int otp= 22222; |
|||
// System.out.print("\n otp---:"+otp); |
|||
// DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy%20HH:mm"); |
|||
// LocalDateTime now = LocalDateTime.now(); |
|||
// System.out.println(dtf.format(now)); |
|||
// //String generatedToken = "Welcome to GCC! Your OTP for C%26D waste collectors Registration process is "+otp; |
|||
// |
|||
// //String generatedToken = "Welcome to GCC "+otp+" is your OTP for gcc QR System"; |
|||
// |
|||
// String generatedToken = "Welcome to GCC! Your OTP for Birth and Death Certificate login is " + otp; |
|||
// //String generatedToken = "Welcome to GCC! Your OTP for C and D waste collectors Registration process is " + otp; |
|||
//// String key="qxg4mklD"; |
|||
// String key="pfTEYN6H"; |
|||
// String urlString= appConfig.getGetOtpUrl()+"from=GCCCRP&key="+key+"&sender=GCCCRP&to="+MobileNo+"&body="+generatedToken+"&entityid=1401572690000011081&templateid=1407174687453240990"; |
|||
// |
|||
// |
|||
// //String urlString = "https://tmegov.onex-aura.com/api/sms?from=GCCCRP&key=pfTEYN6H&sender=GCCCRP&to=9360777472&body=Welcome%20to%20GCC!%20Your%20OTP%20for%20C%26D%20waste%20collectors%20Registration%20process%20is%20"+otp+"&entityid=1401572690000011081&templateid=1407172959127552127"; |
|||
// //String urlString= appConfig.getGetOtpUrl()+"from=GCCCRP&key="+key+"&sender=GCCCRP&to="+MobileNo+"&body="+generatedToken+"&entityid=1401572690000011081&templateid=1407168250479102852"; |
|||
//// String urlString=appConfig.getGetOtpUrl()+"user=GCCtrans&authkey=92kOC1RBGBIws&sender=GCCCRP&mobile="+MobileNo+"&text="+generatedToken+"&rpt=1&summary=1&output=json&entityid=1401572690000011081&templateid=1407168250479102852"; |
|||
// System.out.print("\n urlString---: "+urlString); |
|||
// String bodyMessage = ""; |
|||
// |
|||
// |
|||
// if (mobile == null || mobile.trim().isEmpty()) { |
|||
// throw new IllegalArgumentException("Mobile number is required"); |
|||
// } |
|||
// |
|||
// // Validate mobile number is exactly 10 digits |
|||
// if (!mobile.matches("\\d{10}")) { |
|||
// throw new IllegalArgumentException("Mobile number must be exactly 10 digits"); |
|||
// } |
|||
// |
|||
// try { |
|||
// RestTemplate restTemplate = new RestTemplate(); |
|||
// String Response = restTemplate.getForObject(urlString, String.class); |
|||
// |
|||
// // Step 1: Ensure user is registered |
|||
// int userId = crsLogsService.ensureUserExists(mobile); |
|||
// System.out.println("\n User ID (existing or new): " + userId); |
|||
// |
|||
// ObjectNode jsonResponse = (ObjectNode) objectMapper.readTree(Response); |
|||
// |
|||
// // Add mobileNo and otp to the response JSON |
|||
// jsonResponse.put("MobileNo", MobileNo); |
|||
// jsonResponse.put("otp", otp); |
|||
// |
|||
// |
|||
// bodyMessage= jsonResponse.toString(); |
|||
// System.out.println("\n bodyMessage"+bodyMessage); |
|||
// |
|||
// System.out.println("OTP sent successfully!"); |
|||
// |
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// System.out.println("ERROR---: " + e.getMessage()); |
|||
// bodyMessage = "Error"; |
|||
// } |
|||
// HttpSession session = request.getSession(); |
|||
// session.setAttribute("otp", otp); |
|||
// return bodyMessage; |
|||
// |
|||
// } |
|||
|
|||
|
|||
@GetMapping(value = "/sendOTP") |
|||
public ResponseEntity<Map<String, Object>> sendOtp(HttpServletRequest request, |
|||
@RequestParam String mobile) { |
|||
Map<String, Object> response = new HashMap<>(); |
|||
|
|||
try { |
|||
if (mobile == null || mobile.trim().isEmpty()) { |
|||
response.put("status", false); |
|||
response.put("message", "Mobile number is required"); |
|||
response.put("status_code", HttpStatus.BAD_REQUEST.value()); |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); |
|||
} |
|||
|
|||
if (!mobile.matches("\\d{10}")) { |
|||
response.put("status", false); |
|||
response.put("message", "Mobile number must be exactly 10 digits"); |
|||
response.put("status_code", HttpStatus.BAD_REQUEST.value()); |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); |
|||
} |
|||
|
|||
Random rand = new Random(); |
|||
int otp = rand.nextInt(90000) + 10000; |
|||
String generatedToken = "Welcome to GCC! Your OTP for Birth and Death Certificate login is " + otp; |
|||
|
|||
String key = "pfTEYN6H"; |
|||
String urlString = appConfig.getGetOtpUrl() |
|||
+ "from=GCCCRP&key=" + key |
|||
+ "&sender=GCCCRP&to=" + mobile |
|||
+ "&body=" + generatedToken |
|||
+ "&entityid=1401572690000011081&templateid=1407174687453240990"; |
|||
|
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String smsResponse = restTemplate.getForObject(urlString, String.class); |
|||
|
|||
int userId = crsLogsService.ensureUserExists(mobile); |
|||
System.out.println("\n User ID (existing or new): " + userId); |
|||
|
|||
HttpSession session = request.getSession(); |
|||
session.setAttribute("otp", otp); |
|||
|
|||
response.put("MobileNo", mobile); |
|||
response.put("otp", otp); |
|||
response.put("message", "OTP sent successfully"); |
|||
response.put("status", HttpStatus.OK.value()); |
|||
|
|||
return ResponseEntity.ok(response); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
response.put("status", false); |
|||
response.put("message", "Error while sending OTP: " + e.getMessage()); |
|||
response.put("status_code", HttpStatus.INTERNAL_SERVER_ERROR.value()); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,80 @@ |
|||
package com.gcc.restapiservices.crslogs.service; |
|||
|
|||
import java.util.List; |
|||
|
|||
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 CrsLogsService { |
|||
|
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCrsLogsDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
// public ResponseEntity<?> saveCrsCertificateLogs(String regNo, String eventDate, String url, String service, String application_flag, String mobile_number) { |
|||
// String sql = "INSERT INTO certificate_logs (regno, event_date, english_url, service, application_flag, mobile_number) VALUES (?, ?, ?, ?, ?, ?)"; |
|||
// Integer count = jdbcTemplate.update(sql, regNo, eventDate, url, service, application_flag, mobile_number); |
|||
// return count != null && count > 0 ? ResponseEntity.ok(count) : ResponseEntity.notFound().build(); |
|||
// } |
|||
|
|||
// public int saveCrsCertificateLogs(String regNo, String eventDate, String url, String service, String application_flag, String mobile_number) { |
|||
// String sql = "INSERT INTO certificate_logs (regno, event_date, english_url, service, application_flag, user_mobile) VALUES (?, ?, ?, ?, ?, ?)"; |
|||
// |
|||
// try { |
|||
// return jdbcTemplate.update(sql, regNo, eventDate, url, service, application_flag, mobile_number); |
|||
// } catch (Exception e) { |
|||
// System.err.println("SQL Error: " + e.getMessage()); |
|||
// throw e; // rethrow to let controller handle it |
|||
// } |
|||
// } |
|||
|
|||
|
|||
public int saveCrsCertificateLogs(String regNo, String eventDate, String url, String service, |
|||
String application_flag, String mobile_number) { |
|||
try { |
|||
Integer userId = null; |
|||
if (mobile_number != null && !mobile_number.trim().isEmpty()) { |
|||
userId = ensureUserExists(mobile_number.trim()); |
|||
} |
|||
|
|||
String sql = "INSERT INTO certificate_logs (regno, event_date, english_url, service, application_flag, user_id,user_mobile) " + |
|||
"VALUES (?, ?, ?, ?, ?, ?,?)"; |
|||
|
|||
return jdbcTemplate.update(sql, regNo, eventDate, url, service, application_flag, userId,mobile_number); |
|||
} catch (Exception e) { |
|||
System.err.println("SQL Error: " + e.getMessage()); |
|||
throw e; |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
public int ensureUserExists(String mobile) { |
|||
String checkUserSql = "SELECT user_id FROM users WHERE user_mobile = ? "; |
|||
String insertUserSql = "INSERT INTO users (user_name, user_address, user_mobile) VALUES (?, ?, ?)"; |
|||
|
|||
List<Integer> result = jdbcTemplate.query(checkUserSql, (rs, rowNum) -> rs.getInt("user_id"), mobile); |
|||
|
|||
if (result.isEmpty()) { |
|||
jdbcTemplate.update(insertUserSql, "-", "-", mobile); |
|||
} |
|||
|
|||
// Always return the user id |
|||
return jdbcTemplate.queryForObject(checkUserSql, Integer.class, mobile); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,127 @@ |
|||
package com.gcc.restapiservices.feedback.controller; |
|||
|
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import com.gcc.restapiservices.cdwaste.util.ApiResponseUtil; |
|||
import com.gcc.restapiservices.feedback.service.FeedbackService; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/feedback/api") |
|||
public class FeedbackController { |
|||
|
|||
@Autowired |
|||
private FeedbackService feedbackService; |
|||
|
|||
@GetMapping("/getMasterServiceList") |
|||
public ResponseEntity<?> getMasterService() { |
|||
List<Map<String, Object>> result = feedbackService.getMasterService(); |
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} |
|||
|
|||
// @GetMapping("/getSubServiceList") |
|||
// public ResponseEntity<?> getSubServiceList(@RequestParam String serviceId) { |
|||
// int sId = 0; |
|||
// |
|||
// if (serviceId.isEmpty() ||serviceId == null) { |
|||
// return ApiResponseUtil.error("Please enter valid serviceId", HttpStatus.BAD_REQUEST); |
|||
// } |
|||
// else { |
|||
// sId = Integer.parseInt(serviceId); |
|||
// } |
|||
// |
|||
// List<Map<String, Object>> result = feedbackService.getSubServiceList(sId); |
|||
// if (result.isEmpty()) { |
|||
// return ApiResponseUtil.notFound("No data found"); |
|||
// } |
|||
// return ApiResponseUtil.success(result, "Data found"); |
|||
// } |
|||
|
|||
@GetMapping("/getSubServiceList") |
|||
public ResponseEntity<?> getSubServiceList(@RequestParam(required = false) String serviceId) { |
|||
if (serviceId == null || serviceId.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("Please enter valid serviceId", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
int sId; |
|||
try { |
|||
sId = Integer.parseInt(serviceId); |
|||
} catch (NumberFormatException e) { |
|||
return ApiResponseUtil.error("Invalid serviceId format", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Restricted service IDs (no subservice available) |
|||
List<Integer> restrictedIds = Arrays.asList(7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21); |
|||
if (restrictedIds.contains(sId)) { |
|||
return ApiResponseUtil.error("No subservice available for this serviceId", HttpStatus.NOT_FOUND); |
|||
} |
|||
|
|||
List<Map<String, Object>> result = feedbackService.getSubServiceList(sId); |
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} |
|||
|
|||
|
|||
@PostMapping("/saveFeedback") |
|||
public ResponseEntity<?> saveFeedbackDetails(@RequestParam String userName, |
|||
@RequestParam String mobno, |
|||
@RequestParam String categoryId, |
|||
@RequestParam (required =false) String subCategoryId, |
|||
@RequestParam String remarks, |
|||
@RequestParam(required = false) MultipartFile feedbackImage) { |
|||
|
|||
String imgPath=""; |
|||
int cid =0; |
|||
int subid =0; |
|||
|
|||
|
|||
try { |
|||
|
|||
if (userName.isEmpty() || userName == null) { |
|||
return ApiResponseUtil.error("Please enter valid user name", HttpStatus.BAD_REQUEST); |
|||
} |
|||
if (mobno == null || !mobno.matches("\\d{10}")) { |
|||
return ApiResponseUtil.error("Please enter a valid 10-digit mobile number", HttpStatus.BAD_REQUEST); |
|||
} |
|||
if (categoryId.isEmpty()||categoryId == null) { |
|||
return ApiResponseUtil.error("Invalid category selected", HttpStatus.BAD_REQUEST); |
|||
}else { |
|||
cid = Integer.parseInt(categoryId); |
|||
} |
|||
if (!subCategoryId.isEmpty()&& subCategoryId != null) { |
|||
subid = Integer.parseInt(subCategoryId); |
|||
} |
|||
if (remarks == null || remarks.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("Remarks cannot be empty", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
if(!feedbackImage.isEmpty()){ |
|||
imgPath = feedbackService.saveFeedbackImage(feedbackImage); |
|||
} |
|||
|
|||
return feedbackService.saveFeedbackDetails(userName, mobno, cid, subid, remarks, imgPath); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ApiResponseUtil.error("Something went wrong: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,125 @@ |
|||
package com.gcc.restapiservices.feedback.service; |
|||
|
|||
import java.io.IOException; |
|||
import java.nio.file.Files; |
|||
import java.nio.file.Path; |
|||
import java.nio.file.Paths; |
|||
import java.security.SecureRandom; |
|||
import java.sql.PreparedStatement; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Random; |
|||
|
|||
import javax.sql.DataSource; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.core.env.Environment; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import com.gcc.restapiservices.cdwaste.util.ApiResponseUtil; |
|||
import com.gcc.restapiservices.cdwaste.util.DateTimeUtil; |
|||
|
|||
@Service |
|||
public class FeedbackService { |
|||
|
|||
@Autowired |
|||
private Environment environment; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlFeedbackDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; |
|||
private static final int STRING_LENGTH = 15; |
|||
private static final Random RANDOM = new SecureRandom(); |
|||
|
|||
public List<Map<String, Object>> getMasterService() { |
|||
String sql = "Select * from master_service where is_active =1"; |
|||
return jdbcTemplate.queryForList(sql); |
|||
|
|||
} |
|||
|
|||
public List<Map<String, Object>> getSubServiceList(int serviceId) { |
|||
String sql = "Select * from sub_service where master_id =? and is_active =1"; |
|||
return jdbcTemplate.queryForList(sql, serviceId); |
|||
} |
|||
|
|||
public String saveFeedbackImage(MultipartFile FeedbackImage) throws IOException { |
|||
|
|||
String img_url = ""; |
|||
if (FeedbackImage == null || FeedbackImage.isEmpty()) { |
|||
return img_url; |
|||
} |
|||
|
|||
String uploadDirectory = environment.getProperty("file.upload.directory"); |
|||
String serviceFolderName = environment.getProperty("feedback_directory"); |
|||
var year = DateTimeUtil.getCurrentYear(); |
|||
var month = DateTimeUtil.getCurrentMonth(); |
|||
|
|||
uploadDirectory = uploadDirectory + "/" + serviceFolderName + "/" + year + "/" + month; |
|||
|
|||
Path directoryPath = Paths.get(uploadDirectory); |
|||
if (!Files.exists(directoryPath)) { |
|||
Files.createDirectories(directoryPath); |
|||
} |
|||
|
|||
String datetimetxt = DateTimeUtil.getCurrentDateTime(); |
|||
|
|||
String fileName = datetimetxt + "" + generateRandomStringForFile(10) + "_" |
|||
+ FeedbackImage.getOriginalFilename(); |
|||
|
|||
String filepath = uploadDirectory + "/" + fileName; |
|||
String filepath_txt = "/" + serviceFolderName + "/" + year + "/" + month + "/" + fileName; |
|||
Path path = Paths.get(filepath); |
|||
|
|||
Files.createDirectories(path.getParent()); |
|||
|
|||
Files.write(path, FeedbackImage.getBytes()); |
|||
|
|||
img_url = filepath_txt; |
|||
|
|||
return img_url; |
|||
} |
|||
|
|||
public static String generateRandomStringForFile(int String_Lenth) { |
|||
StringBuilder result = new StringBuilder(String_Lenth); |
|||
for (int i = 0; i < STRING_LENGTH; i++) { |
|||
result.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length()))); |
|||
} |
|||
return result.toString(); |
|||
} |
|||
|
|||
public ResponseEntity<?> saveFeedbackDetails(String userName, String mobno, int categoryId, int subCategoryId, |
|||
String remarks, |
|||
String imgPath) { |
|||
|
|||
String sql = "INSERT INTO feedback_details (user_name, mobile_no, service_id, subservice_id, remarks, img_path) " |
|||
+ "VALUES (?, ?, ?, ?, ?, ?)"; |
|||
|
|||
int rowsAffected = jdbcTemplate.update(connection -> { |
|||
PreparedStatement ps = connection.prepareStatement(sql); |
|||
ps.setString(1, userName.trim()); |
|||
ps.setString(2, mobno.trim()); |
|||
ps.setInt(3, categoryId); |
|||
ps.setInt(4, subCategoryId); |
|||
ps.setString(5, remarks.trim()); |
|||
ps.setString(6, imgPath); |
|||
return ps; |
|||
}); |
|||
|
|||
if (rowsAffected > 0) { |
|||
return ApiResponseUtil.success( null,"Feedback submitted successfully"); |
|||
} else { |
|||
return ApiResponseUtil.error("Failed to save feedback. Please try again", null); |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,108 @@ |
|||
package com.gcc.restapiservices.nearbyservices.controller; |
|||
|
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.http.*; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
|
|||
import java.net.URLEncoder; |
|||
import java.nio.charset.StandardCharsets; |
|||
import java.util.*; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/api/location") |
|||
public class LocationController { |
|||
|
|||
@Value("${google.api.key}") |
|||
private String googleApiKey; |
|||
|
|||
@Value("${gis.api.url}") |
|||
private String gisApiUrl; |
|||
|
|||
private final RestTemplate restTemplate = new RestTemplate(); |
|||
|
|||
@GetMapping("/getDetails") |
|||
public ResponseEntity<?> getLocationDetails(@RequestParam String address) { |
|||
try { |
|||
if (address == null || address.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body(Collections.singletonMap("error", "Address is required")); |
|||
} |
|||
|
|||
String searchUrl = "https://maps.googleapis.com/maps/api/place/findplacefromtext/json" |
|||
+ "?input=" + URLEncoder.encode(address, StandardCharsets.UTF_8) |
|||
+ "&inputtype=textquery" |
|||
+ "&fields=geometry" |
|||
+ "&key=" + googleApiKey; |
|||
|
|||
Map<String, Object> searchResponse = restTemplate.getForObject(searchUrl, Map.class); |
|||
if (searchResponse == null || !"OK".equals(searchResponse.get("status"))) { |
|||
return ResponseEntity.badRequest() |
|||
.body(Collections.singletonMap("error", "Invalid address or Google Places API error")); |
|||
} |
|||
|
|||
List<Map<String, Object>> candidates = (List<Map<String, Object>>) searchResponse.get("candidates"); |
|||
if (candidates == null || candidates.isEmpty()) { |
|||
return ResponseEntity.badRequest() |
|||
.body(Collections.singletonMap("error", "No location found for the given address")); |
|||
} |
|||
|
|||
Map<String, Object> firstCandidate = candidates.get(0); |
|||
Map<String, Object> geometry = (Map<String, Object>) firstCandidate.get("geometry"); |
|||
Map<String, Object> location = (Map<String, Object>) geometry.get("location"); |
|||
|
|||
double latitude = Math.floor((double) location.get("lat") * 1_000_000.0) / 1_000_000.0; |
|||
double longitude = Math.floor((double) location.get("lng") * 1_000_000.0) / 1_000_000.0; |
|||
|
|||
// String geometryJson = String.format( |
|||
// "{\"x\":%f,\"y\":%f,\"spatialReference\":{\"wkid\":4326}}", |
|||
// longitude, latitude); |
|||
|
|||
// String gisUrl = |
|||
// "https://gisgcc.chennaicorporation.gov.in/server/rest/services/GCCDepts/EDPMobile2025/FeatureServer/0/query"; |
|||
|
|||
// String params = "f=json" |
|||
// + "&geometry=" + URLEncoder.encode(geometryJson, StandardCharsets.UTF_8) |
|||
// + "&geometryType=esriGeometryPoint" |
|||
// + "&inSR=4326" |
|||
// + "&spatialRel=esriSpatialRelIntersects" |
|||
// + "&distance=25" |
|||
// + "&units=esriSRUnit_Meter" |
|||
// + "&outFields=region,new_zone,new_ward,road_id,road_name,gis_id,type" |
|||
// + "&returnGeometry=false"; |
|||
|
|||
// HttpHeaders headers = new HttpHeaders(); |
|||
// headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); |
|||
|
|||
// HttpEntity<String> request = new HttpEntity<>(params, headers); |
|||
|
|||
// Map<String, Object> gisMap = restTemplate.postForObject(gisUrl, request, |
|||
// Map.class); |
|||
|
|||
// if (gisMap == null) { |
|||
// return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) |
|||
// .body(Collections.singletonMap("error", "Empty GIS response")); |
|||
// } |
|||
// if (gisMap.containsKey("error")) { |
|||
// return ResponseEntity.badRequest().body(gisMap.get("error")); |
|||
// } |
|||
|
|||
// List<Map<String, Object>> gisResponse = |
|||
// (List<Map<String, Object>>) gisMap.getOrDefault("features", |
|||
// Collections.emptyList()); |
|||
|
|||
Map<String, Object> response = new LinkedHashMap<>(); |
|||
response.put("latitude", latitude); |
|||
response.put("longitude", longitude); |
|||
response.put("address", address); |
|||
// response.put("gis_data", gisResponse); |
|||
|
|||
return ResponseEntity.ok(response); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Collections.singletonMap("error", "Server error: " + e.getMessage())); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,94 @@ |
|||
package com.gcc.restapiservices.nearbyservices.controller; |
|||
|
|||
import java.util.HashMap; |
|||
import java.io.InputStream; |
|||
import java.net.URL; |
|||
import java.net.URLConnection; |
|||
import java.net.URLEncoder; |
|||
import java.nio.charset.StandardCharsets; |
|||
|
|||
import java.util.Map; |
|||
|
|||
|
|||
import com.gcc.restapiservices.nearbyservices.service.NearByService; |
|||
import org.json.JSONArray; |
|||
import org.json.JSONObject; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
|
|||
@RequestMapping("/gccrestservices/api/nearbyservices") |
|||
@RestController |
|||
public class NearByController { |
|||
private NearByService nearByService; |
|||
@Autowired |
|||
public NearByController(NearByService nearByService) { |
|||
this.nearByService = nearByService; |
|||
} |
|||
|
|||
// @GetMapping("/toilets") |
|||
// public ResponseEntity<Map<String, Object>> getToilets(@RequestParam(value = "lat") String lat, |
|||
// @RequestParam(value = "lng") String lng){ |
|||
// Map<String, Object> result = new HashMap<>(); |
|||
// try { |
|||
// //String url1="https://chennaicorporation.gov.in/gcc/citizen-details/location-service/mob_ser_toilet.jsp?ServiceID=GetToilet&SetInput={citizenzone:"+""+",citizendivision:"+""+",lat:"+lat+",longt:"+lng+"}"; |
|||
// String inputJson = String.format("{\"citizenzone\":\"\",\"citizendivision\":\"\",\"lat\":\"%s\",\"longt\":\"%s\"}", lat, lng); |
|||
// String encodedJson = URLEncoder.encode(inputJson, StandardCharsets.UTF_8); |
|||
// String urlString = "https://chennaicorporation.gov.in/gcc/citizen-details/location-service/mob_ser_toilet.jsp?ServiceID=GetToilet&SetInput=" + encodedJson; |
|||
// System.out.println(urlString); |
|||
// |
|||
// |
|||
// URL url = new URL(urlString); |
|||
// URLConnection urlcon=url.openConnection(); |
|||
// InputStream stream=urlcon.getInputStream(); |
|||
// StringBuilder responseBuilder = new StringBuilder(); |
|||
// int i; |
|||
// while((i=stream.read())!=-1){ |
|||
// responseBuilder.append((char) i); |
|||
// } |
|||
// stream.close(); |
|||
// |
|||
// // Clean and extract actual JSON part |
|||
// String rawResponse = responseBuilder.toString().trim(); |
|||
// System.out.println("rawResponse="+rawResponse); |
|||
// // Get JSON object |
|||
// JSONObject responseJson = new JSONObject(rawResponse); |
|||
// |
|||
// // Check if TOILETS exists and is not empty |
|||
// if (responseJson.has("TOILETS")) { |
|||
// JSONArray toiletsArray = responseJson.getJSONArray("TOILETS"); |
|||
// |
|||
// if (toiletsArray.length() == 0) { |
|||
// result.put("Message", "No Data Found"); |
|||
// result.put("Data", new JSONObject()); // or result.put("Data", Collections.emptyMap()); |
|||
// } else { |
|||
// result.put("Message", "Success"); |
|||
// result.put("Data", responseJson.toMap()); // Convert full response JSON to Map |
|||
// } |
|||
// } else { |
|||
// result.put("Message", "TOILETS key missing"); |
|||
// result.put("Data", new JSONObject()); |
|||
// } |
|||
// |
|||
// |
|||
// |
|||
// } |
|||
// catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// result.put("Message", "Error"); |
|||
// } |
|||
// return ResponseEntity.ok(result); |
|||
// } |
|||
|
|||
@PostMapping(value = "/details") |
|||
public Map<String, Object> getServiceDetails(@RequestParam(value = "lat") String lat, |
|||
@RequestParam(value = "lng") String lng, |
|||
@RequestParam(value = "service") String service) { |
|||
return nearByService.getPropertyList(lat, lng, service); |
|||
} |
|||
@PostMapping(value = "/services") |
|||
public Map<String, Object> getServices() { |
|||
return nearByService.getServices(); |
|||
} |
|||
} |
|||
@ -0,0 +1,633 @@ |
|||
package com.gcc.restapiservices.nearbyservices.service; |
|||
|
|||
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; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.http.ResponseEntity; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.core.JsonProcessingException; |
|||
import com.fasterxml.jackson.databind.JsonMappingException; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
@Service |
|||
public class NearByService { |
|||
private JdbcTemplate mysqlJdbcTemplate; |
|||
private JdbcTemplate communityJdbcTemplate; |
|||
|
|||
@Autowired |
|||
public void setMysqlDataSource(@Qualifier("mysqlServicespdfDataSource") DataSource mysqlDataSource) { |
|||
this.mysqlJdbcTemplate = new JdbcTemplate(mysqlDataSource); |
|||
} |
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCommunityHallDataSource") DataSource dataSource) { |
|||
this.communityJdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
// @Transactional("mysqlNearByServicesfDataSource") |
|||
public Map<String, Object> getPropertyList(String lat, String lng, String service) { |
|||
Map<String, Object> response = new HashMap<>(); |
|||
Map<String, Object> result = new HashMap<>(); |
|||
if(service.equalsIgnoreCase("Burial Ground")){ |
|||
result = getburialGround(lat,lng); |
|||
} else if(service.equalsIgnoreCase("Amma Unavagam")){ |
|||
result = getammaUnavagam(lat,lng); |
|||
} else if(service.equalsIgnoreCase("Bus Shelter")) { |
|||
result = getbusShelter(lat,lng); |
|||
} else if(service.equalsIgnoreCase("Toilets")) { |
|||
result = gettoilets(lat,lng); |
|||
} else if(service.equalsIgnoreCase("School")) { |
|||
result = getschools(lat,lng); |
|||
} else if(service.equalsIgnoreCase("Community Center")) { |
|||
result = getCommunityCenter(lat,lng); |
|||
} else if(service.equalsIgnoreCase("UPHC") || service.equalsIgnoreCase("UCHC")) { |
|||
result = getUphcUchc(lat,lng,service); |
|||
} |
|||
response.put("Response", result); |
|||
return response; |
|||
} |
|||
|
|||
private Map<String, Object> getCommunityCenter(String lat, String lng) { |
|||
Map<String, Object> result = new HashMap<>(); |
|||
String sql = "SELECT hd.hall_name, " + |
|||
" hd.zone, " + |
|||
" hd.division, " + |
|||
" hd.door_no, " + |
|||
" hd.street, " + |
|||
" hd.area, " + |
|||
" hd.city, " + |
|||
" hd.pin_code, " + |
|||
" hd.parking_capacity, " + |
|||
" hd.seating_capacity, " + |
|||
" hd.half_day_rent, " + |
|||
" hd.full_day_rent, " + |
|||
" hd.half_deposit_amount, " + |
|||
" hd.deposit_amount, " + |
|||
" hd.eb_cost_per_unit, " + |
|||
" hd.gst, " + |
|||
" hd.latitude, " + |
|||
" hd.longitude " + |
|||
" FROM hall_details hd WHERE (hd.is_active=1) AND " + |
|||
" ((6371008.8 * acos( ROUND(cos(radians(?)) * cos(radians(hd.latitude)) * cos(radians(hd.longitude) - radians(?)) + " + |
|||
" sin(radians(?)) * sin(radians(hd.latitude)), 9) )) < 1000)"; |
|||
try{ |
|||
List<Map<String, Object>> data = communityJdbcTemplate.queryForList(sql, lat, lng, lat); |
|||
if (!data.isEmpty()) { |
|||
result.put("Community Center", data); |
|||
result.put("Status", "Sucess"); |
|||
result.put("Status Code", 200); |
|||
result.put("Message", "Community Center List fetched successfully"); |
|||
|
|||
} else { |
|||
result.put("Status", "Not Found"); |
|||
result.put("Message", "Community Center Not Found"); |
|||
result.put("Status Code", 404); |
|||
} |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
result.put("Status", "Error"); |
|||
result.put("Message", "Error in fetching Community Center list :" + e); |
|||
result.put("Status Code", 500); |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
private Map<String, Object> getUphcUchc(String lat, String lng, String service) { |
|||
Map<String, Object> result = new HashMap<>(); |
|||
String sql = "SELECT " + |
|||
" uc.zone, " + |
|||
" uc.ward, " + |
|||
" uc.uc_name, " + |
|||
" uc.address, " + |
|||
" uc.mail_id, " + |
|||
" uc.contact, " + |
|||
" uc.contact_name, " + |
|||
" uc.contact_number, " + |
|||
" uc.special_facilities, " + |
|||
" uc.latitude, " + |
|||
" uc.longitude " + |
|||
" FROM uphc_uchc uc WHERE (uc.is_active=1 AND uc.is_delete=0 AND uc.type=?) AND " + |
|||
" ((6371008.8 * acos( ROUND(cos(radians(?)) * cos(radians(uc.latitude)) * cos(radians(uc.longitude) - radians(?)) + " + |
|||
" sin(radians(?)) * sin(radians(uc.latitude)), 9) )) < 1000)"; |
|||
try{ |
|||
List<Map<String, Object>> data = mysqlJdbcTemplate.queryForList(sql, service, lat, lng, lat); |
|||
if (!data.isEmpty()) { |
|||
result.put(service, data); |
|||
result.put("Status", "Sucess"); |
|||
result.put("Status Code", 200); |
|||
result.put("Message", service+" List fetched successfully"); |
|||
|
|||
} else { |
|||
result.put("Status", "Not Found"); |
|||
result.put("Message", service+" Not Found"); |
|||
result.put("Status Code", 404); |
|||
} |
|||
} catch (Exception e) { |
|||
result.put("Status", "Error"); |
|||
result.put("Message", "Error in fetching "+service+" list :" + e); |
|||
result.put("Status Code", 500); |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
private Map<String, Object> getschools(String lat, String lng) { |
|||
Map<String, Object> result = new HashMap<>(); |
|||
List<Map<String, Object>> data1 = new ArrayList<>(); |
|||
String urlString="https://gccservices.in/gccofficialapp/api/gcceducation/getSchoolList?latitude="+lat+"&longitude="+lng; |
|||
|
|||
try{ |
|||
List<Map<String, Object>> dataList = geturldata(urlString); |
|||
|
|||
if (!dataList.isEmpty()) { |
|||
for(Map<String, Object> i:dataList) { |
|||
Map<String, Object> data = new HashMap<>(); |
|||
String zone = (i.get("zone") != null && !i.get("zone").toString().trim().isEmpty()) |
|||
? i.get("zone").toString().trim() |
|||
: ""; |
|||
String ward = (i.get("division") != null && !i.get("division").toString().trim().isEmpty()) |
|||
? i.get("division").toString().trim() |
|||
: ""; |
|||
String latitude = (i.get("latitude") != null && !i.get("latitude").toString().trim().isEmpty()) |
|||
? i.get("latitude").toString().trim() |
|||
: ""; |
|||
String longitude = (i.get("longitude") != null && !i.get("longitude").toString().trim().isEmpty()) |
|||
? i.get("longitude").toString().trim() |
|||
: ""; |
|||
String udise = (i.get("udise") != null && !i.get("udise").toString().trim().isEmpty()) |
|||
? i.get("udise").toString().trim() |
|||
: ""; |
|||
String school_name = (i.get("school_name") != null && !i.get("school_name").toString().trim().isEmpty()) |
|||
? i.get("school_name").toString().trim() |
|||
: ""; |
|||
String school_address = (i.get("address") != null && !i.get("address").toString().trim().isEmpty()) |
|||
? i.get("address").toString().trim() |
|||
: ""; |
|||
String category = (i.get("category_type") != null && !i.get("category_type").toString().trim().isEmpty()) |
|||
? i.get("category_type").toString().trim() |
|||
: ""; |
|||
String hm_name = (i.get("hm_name") != null && !i.get("hm_name").toString().trim().isEmpty()) |
|||
? i.get("hm_name").toString().trim() |
|||
: ""; |
|||
String hm_mobile = (i.get("hm_phone_number") != null && !i.get("hm_phone_number").toString().trim().isEmpty()) |
|||
? i.get("hm_phone_number").toString().trim() |
|||
: ""; |
|||
|
|||
data.put("Zone", zone); |
|||
data.put("Ward", ward); |
|||
data.put("Latitude", latitude); |
|||
data.put("Longitude", longitude); |
|||
data.put("UDISE", udise); |
|||
data.put("School Name", school_name); |
|||
data.put("School Address", school_address); |
|||
data.put("Category", category); |
|||
data.put("HM_Name", hm_name); |
|||
data.put("HM_Mobile", hm_mobile); |
|||
data1.add(data); |
|||
} |
|||
result.put("Bus Shelter", data1); |
|||
result.put("Status", "Sucess"); |
|||
result.put("Status Code", 200); |
|||
result.put("Message", "School List fetched successfully"); |
|||
|
|||
} else { |
|||
result.put("Status", "Not Found"); |
|||
result.put("Message", "School List Not Found"); |
|||
result.put("Status Code", 404); |
|||
} |
|||
} catch (Exception e) { |
|||
result.put("Status", "Error"); |
|||
result.put("Message", "Error in fetching Bus School List :" + e); |
|||
result.put("Status Code", 500); |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
private Map<String, Object> gettoilets(String lat, String lng) { |
|||
Map<String, Object> result = new HashMap<>(); |
|||
List<Map<String, Object>> data1 = new ArrayList<>(); |
|||
String urlString = "https://gccservices.in/gccofficialapp/api/toilets/toiletlistRest?latitude=" + lat + "&longitude=" + lng; |
|||
String urlString1 = "https://gccservices.in/gccofficialapp/api/privatetoilets/toiletlistRest?latitude=" + lat + "&longitude=" + lng; |
|||
try { |
|||
|
|||
List<Map<String, Object>> dataList = geturldata(urlString); |
|||
List<Map<String, Object>> dataList1 = geturldata(urlString1); |
|||
// GCC Toilet |
|||
if (!dataList.isEmpty()) { |
|||
for (Map<String, Object> i : dataList) { |
|||
Map<String, Object> data = new HashMap<>(); |
|||
|
|||
String zone = (i.get("zone") != null && !i.get("zone").toString().trim().isEmpty()) |
|||
? i.get("zone").toString().trim() |
|||
: ""; |
|||
String ward = (i.get("ward") != null && !i.get("ward").toString().trim().isEmpty()) |
|||
? i.get("ward").toString().trim() |
|||
: ""; |
|||
String latitude = (i.get("latitude") != null && !i.get("latitude").toString().trim().isEmpty()) |
|||
? i.get("latitude").toString().trim() |
|||
: ""; |
|||
String longitude = (i.get("longitude") != null && !i.get("longitude").toString().trim().isEmpty()) |
|||
? i.get("longitude").toString().trim() |
|||
: ""; |
|||
String street_name = (i.get("name") != null && !i.get("name").toString().trim().isEmpty()) |
|||
? i.get("name").toString().trim() |
|||
: ""; |
|||
String area = (i.get("locality") != null && !i.get("locality").toString().trim().isEmpty()) |
|||
? i.get("locality").toString().trim() |
|||
: ""; |
|||
|
|||
|
|||
String locality = ""; |
|||
String model = ""; |
|||
data.put("Zone", zone); |
|||
data.put("Ward", ward); |
|||
data.put("Latitude", latitude); |
|||
data.put("Longitude", longitude); |
|||
data.put("Area", area); |
|||
data.put("Street Name", street_name); |
|||
// data.put("Locality", locality); |
|||
// data.put("Model", model); |
|||
data1.add(data); |
|||
|
|||
} |
|||
result.put("GCC Toilet", data1); |
|||
result.put("Status", "Sucess"); |
|||
result.put("Status Code", 200); |
|||
result.put("Message", "GCC Toilet List fetched successfully"); |
|||
|
|||
} else { |
|||
result.put("Status", "Not Found"); |
|||
result.put("Message", "GCC Toilet Not Found"); |
|||
result.put("Status Code", 404); |
|||
} |
|||
// Private Toilet |
|||
if (!dataList1.isEmpty()) { |
|||
for (Map<String, Object> i : dataList) { |
|||
Map<String, Object> data = new HashMap<>(); |
|||
|
|||
String zone = (i.get("zone") != null && !i.get("zone").toString().trim().isEmpty()) |
|||
? i.get("zone").toString().trim() |
|||
: ""; |
|||
String ward = (i.get("ward") != null && !i.get("ward").toString().trim().isEmpty()) |
|||
? i.get("ward").toString().trim() |
|||
: ""; |
|||
String latitude = (i.get("latitude") != null && !i.get("latitude").toString().trim().isEmpty()) |
|||
? i.get("latitude").toString().trim() |
|||
: ""; |
|||
String longitude = (i.get("longitude") != null && !i.get("longitude").toString().trim().isEmpty()) |
|||
? i.get("longitude").toString().trim() |
|||
: ""; |
|||
// String area = (i.get("locality") != null && !i.get("locality").toString().trim().isEmpty()) |
|||
// ? i.get("locality").toString().trim() |
|||
// : ""; |
|||
String street_name = (i.get("pct_name") != null && !i.get("pct_name").toString().trim().isEmpty()) |
|||
? i.get("pct_name").toString().trim() |
|||
: ""; |
|||
|
|||
String locality = ""; |
|||
String model = ""; |
|||
String area = ""; |
|||
data.put("Zone", zone); |
|||
data.put("Ward", ward); |
|||
data.put("Latitude", latitude); |
|||
data.put("Longitude", longitude); |
|||
// data.put("Area", area); |
|||
data.put("Street Name", street_name); |
|||
// data.put("Locality", locality); |
|||
// data.put("Model", model); |
|||
data1.add(data); |
|||
|
|||
} |
|||
result.put("Private Toilet", data1); |
|||
result.put("Status", "Sucess"); |
|||
result.put("Status Code", 200); |
|||
result.put("Message", "Private Toilet List fetched successfully"); |
|||
|
|||
} else { |
|||
result.put("Status", "Not Found"); |
|||
result.put("Message", "Private Toilet Not Found"); |
|||
result.put("Status Code", 404); |
|||
} |
|||
} catch (Exception e) { |
|||
result.put("Status", "Error"); |
|||
result.put("Message", "Error in fetching Toilet list :" + e); |
|||
result.put("Status Code", 500); |
|||
} |
|||
return result; |
|||
} |
|||
private Map<String, Object> getbusShelter(String lat, String lng) { |
|||
Map<String, Object> result = new HashMap<>(); |
|||
List<Map<String, Object>> data1 = new ArrayList<>(); |
|||
String urlString="https://gccservices.in/gccofficialapp/api/busshelter/getBusShelterList?latitude="+lat+"&longitude="+lng; |
|||
|
|||
try{ |
|||
List<Map<String, Object>> dataList = geturldata(urlString); |
|||
|
|||
if (!dataList.isEmpty()) { |
|||
for(Map<String, Object> i:dataList) { |
|||
Map<String, Object> data = new HashMap<>(); |
|||
String zone = (i.get("zone") != null && !i.get("zone").toString().trim().isEmpty()) |
|||
? i.get("zone").toString().trim() |
|||
: ""; |
|||
String ward = (i.get("ward") != null && !i.get("ward").toString().trim().isEmpty()) |
|||
? i.get("ward").toString().trim() |
|||
: ""; |
|||
String latitude = (i.get("latitude") != null && !i.get("latitude").toString().trim().isEmpty()) |
|||
? i.get("latitude").toString().trim() |
|||
: ""; |
|||
String longitude = (i.get("longitude") != null && !i.get("longitude").toString().trim().isEmpty()) |
|||
? i.get("longitude").toString().trim() |
|||
: ""; |
|||
String area = (i.get("area") != null && !i.get("area").toString().trim().isEmpty()) |
|||
? i.get("area").toString().trim() |
|||
: ""; |
|||
String road = (i.get("road") != null && !i.get("road").toString().trim().isEmpty()) |
|||
? i.get("road").toString().trim() |
|||
: ""; |
|||
String name = ""; |
|||
data.put("Zone", zone); |
|||
data.put("Ward", ward); |
|||
data.put("Latitude", latitude); |
|||
data.put("Longitude", longitude); |
|||
data.put("Area", area); |
|||
data.put("Road", road); |
|||
//data.put("Name", name); |
|||
data1.add(data); |
|||
} |
|||
result.put("Bus Shelter", data1); |
|||
result.put("Status", "Sucess"); |
|||
result.put("Status Code", 200); |
|||
result.put("Message", "Bus Shelter List fetched successfully"); |
|||
|
|||
} else { |
|||
result.put("Status", "Not Found"); |
|||
result.put("Message", "Bus Shelter Not Found"); |
|||
result.put("Status Code", 404); |
|||
} |
|||
} catch (Exception e) { |
|||
result.put("Status", "Error"); |
|||
result.put("Message", "Error in fetching Bus Shelter list :" + e); |
|||
result.put("Status Code", 500); |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
private Map<String, Object> getammaUnavagam(String lat, String lng) { |
|||
Map<String, Object> result = new HashMap<>(); |
|||
String sql = "SELECT " + |
|||
" am.zone, " + |
|||
" am.ward, " + |
|||
" am.address, " + |
|||
" am.breakfast, " + |
|||
" am.lunch, " + |
|||
" am.dinner, " + |
|||
" am. open_time, " + |
|||
" am. close_time, " + |
|||
" am.latitude, " + |
|||
" am.longitude " + |
|||
" FROM ammaunavagam am WHERE (am.is_active=1 AND am.is_delete=0) AND " + |
|||
" ((6371008.8 * acos( ROUND(cos(radians(?)) * cos(radians(am.latitude)) * cos(radians(am.longitude) - radians(?)) + " + |
|||
" sin(radians(?)) * sin(radians(am.latitude)), 9) )) < 1000)"; |
|||
try{ |
|||
List<Map<String, Object>> data = mysqlJdbcTemplate.queryForList(sql, lat, lng, lat); |
|||
List<Map<String, Object>> data1 = new ArrayList<>(); |
|||
if (!data.isEmpty()) { |
|||
for (Map<String, Object> i:data) { |
|||
Map<String, Object> check = new HashMap<>(); |
|||
String zone = (i.get("zone") != null && !i.get("zone").toString().trim().isEmpty()) |
|||
? i.get("zone").toString().trim() |
|||
: ""; |
|||
String ward = (i.get("ward") != null && !i.get("ward").toString().trim().isEmpty()) |
|||
? i.get("ward").toString().trim() |
|||
: ""; |
|||
String address = (i.get("address") != null && !i.get("address").toString().trim().isEmpty()) |
|||
? i.get("address").toString().trim() |
|||
: ""; |
|||
String breakfast = (i.get("breakfast") != null && !i.get("breakfast").toString().trim().isEmpty()) |
|||
? i.get("breakfast").toString().trim() |
|||
: ""; |
|||
String lunch = (i.get("lunch") != null && !i.get("lunch").toString().trim().isEmpty()) |
|||
? i.get("lunch").toString().trim() |
|||
: ""; |
|||
String dinner = (i.get("dinner") != null && !i.get("dinner").toString().trim().isEmpty()) |
|||
? i.get("dinner").toString().trim() |
|||
: ""; |
|||
String open_time = (i.get("open_time") != null && !i.get("open_time").toString().trim().isEmpty()) |
|||
? i.get("open_time").toString().trim() |
|||
: ""; |
|||
String close_time = (i.get("close_time") != null && !i.get("close_time").toString().trim().isEmpty()) |
|||
? i.get("close_time").toString().trim() |
|||
: ""; |
|||
String latitude = (i.get("latitude") != null && !i.get("latitude").toString().trim().isEmpty()) |
|||
? i.get("latitude").toString().trim() |
|||
: ""; |
|||
String longitude = (i.get("longitude") != null && !i.get("longitude").toString().trim().isEmpty()) |
|||
? i.get("longitude").toString().trim() |
|||
: ""; |
|||
|
|||
if(!zone.isEmpty() || !zone.isBlank()) { |
|||
check.put("zone", zone); |
|||
} |
|||
if(!ward.isEmpty() || !ward.isBlank()) { |
|||
check.put("ward", ward); |
|||
} |
|||
if(!address.isEmpty() || !address.isBlank()) { |
|||
check.put("address", address); |
|||
} |
|||
if(!breakfast.isEmpty() || !breakfast.isBlank()) { |
|||
check.put("burial_name", breakfast); |
|||
} |
|||
if(!lunch.isEmpty() || !lunch.isBlank()) { |
|||
check.put("burial_name", lunch); |
|||
} |
|||
if(!dinner.isEmpty() || !dinner.isBlank()) { |
|||
check.put("burial_name", dinner); |
|||
} |
|||
if(!open_time.isEmpty() || !open_time.isBlank()) { |
|||
check.put("open_time", open_time); |
|||
} |
|||
if(!close_time.isEmpty() || !close_time.isBlank()) { |
|||
check.put("close_time", close_time); |
|||
} |
|||
if(!latitude.isEmpty() || !latitude.isBlank()) { |
|||
check.put("latitude", latitude); |
|||
} |
|||
if(!longitude.isEmpty() || !longitude.isBlank()) { |
|||
check.put("longitude", longitude); |
|||
} |
|||
|
|||
data1.add(check); |
|||
} |
|||
result.put("Amma Unavagam", data1); |
|||
result.put("Status", "Sucess"); |
|||
result.put("Status Code", 200); |
|||
result.put("Message", "Amma Unavagam List fetched successfully"); |
|||
|
|||
} else { |
|||
result.put("Status", "Not Found"); |
|||
result.put("Message", "Amma Unavagam Not Found"); |
|||
result.put("Status Code", 404); |
|||
} |
|||
} catch (Exception e) { |
|||
result.put("Status", "Error"); |
|||
result.put("Message", "Error in fetching Amma Unavagam list :" + e); |
|||
result.put("Status Code", 500); |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
private Map<String, Object> getburialGround(String lat, String lng) { |
|||
Map<String, Object> result = new HashMap<>(); |
|||
String sql = "SELECT " + |
|||
" bg.zone, " + |
|||
" bg.ward, " + |
|||
" bg.burial_name, " + |
|||
" bg.address, " + |
|||
" bg.open_time, " + |
|||
" bg.close_time, " + |
|||
" bg.latitude, " + |
|||
" bg.longitude " + |
|||
" FROM burial_ground bg WHERE (bg.is_active=1 AND bg.is_delete=0) AND " + |
|||
" ((6371008.8 * acos( ROUND(cos(radians(?)) * cos(radians(bg.latitude)) * cos(radians(bg.longitude) - radians(?)) + " + |
|||
" sin(radians(?)) * sin(radians(bg.latitude)), 9) )) < 1000)"; |
|||
|
|||
|
|||
|
|||
|
|||
try{ |
|||
List<Map<String, Object>> data = mysqlJdbcTemplate.queryForList(sql, lat, lng, lat); |
|||
List<Map<String, Object>> data1 = new ArrayList<>(); |
|||
if (!data.isEmpty()) { |
|||
for (Map<String, Object> i:data) { |
|||
Map<String, Object> check = new HashMap<>(); |
|||
String zone = (i.get("zone") != null && !i.get("zone").toString().trim().isEmpty()) |
|||
? i.get("zone").toString().trim() |
|||
: ""; |
|||
String ward = (i.get("ward") != null && !i.get("ward").toString().trim().isEmpty()) |
|||
? i.get("ward").toString().trim() |
|||
: ""; |
|||
String burial_name = (i.get("burial_name") != null && !i.get("burial_name").toString().trim().isEmpty()) |
|||
? i.get("burial_name").toString().trim() |
|||
: ""; |
|||
String address = (i.get("address") != null && !i.get("address").toString().trim().isEmpty()) |
|||
? i.get("address").toString().trim() |
|||
: ""; |
|||
String open_time = (i.get("open_time") != null && !i.get("open_time").toString().trim().isEmpty()) |
|||
? i.get("open_time").toString().trim() |
|||
: ""; |
|||
String close_time = (i.get("close_time") != null && !i.get("close_time").toString().trim().isEmpty()) |
|||
? i.get("close_time").toString().trim() |
|||
: ""; |
|||
String latitude = (i.get("latitude") != null && !i.get("latitude").toString().trim().isEmpty()) |
|||
? i.get("latitude").toString().trim() |
|||
: ""; |
|||
String longitude = (i.get("longitude") != null && !i.get("longitude").toString().trim().isEmpty()) |
|||
? i.get("longitude").toString().trim() |
|||
: ""; |
|||
if(!zone.isEmpty() || !zone.isBlank()) { |
|||
check.put("zone", zone); |
|||
} |
|||
if(!ward.isEmpty() || !ward.isBlank()) { |
|||
check.put("ward", ward); |
|||
} |
|||
if(!burial_name.isEmpty() || !burial_name.isBlank()) { |
|||
check.put("burial_name", burial_name); |
|||
} |
|||
if(!address.isEmpty() || !address.isBlank()) { |
|||
check.put("address", address); |
|||
} |
|||
if(!open_time.isEmpty() || !open_time.isBlank()) { |
|||
check.put("open_time", open_time); |
|||
} |
|||
if(!close_time.isEmpty() || !close_time.isBlank()) { |
|||
check.put("close_time", close_time); |
|||
} |
|||
if(!latitude.isEmpty() || !latitude.isBlank()) { |
|||
check.put("latitude", latitude); |
|||
} |
|||
if(!longitude.isEmpty() || !longitude.isBlank()) { |
|||
check.put("longitude", longitude); |
|||
} |
|||
data1.add(check); |
|||
} |
|||
result.put("Burial Ground", data1); |
|||
result.put("Status", "Sucess"); |
|||
result.put("Status Code", 200); |
|||
result.put("Message", "Burial Ground List fetched successfully"); |
|||
|
|||
} else { |
|||
result.put("Status", "Not Found"); |
|||
result.put("Message", "Burial Ground Not Found"); |
|||
result.put("Status Code", 404); |
|||
} |
|||
} catch (Exception e) { |
|||
result.put("Status", "Error"); |
|||
result.put("Message", "Error in fetching Burial Ground list :" + e); |
|||
result.put("Status Code", 500); |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
public List<Map<String, Object>> geturldata(String urlString) { |
|||
|
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
List<Map<String, Object>> details = null; |
|||
|
|||
ResponseEntity<String> response = restTemplate.getForEntity(urlString, String.class); |
|||
String rawResponse = response.getBody(); |
|||
|
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
try { |
|||
List<Map<String, Object>> responseList = objectMapper.readValue(rawResponse, List.class); |
|||
|
|||
if (!responseList.isEmpty()) { |
|||
Map<String, Object> firstItem = responseList.get(0); |
|||
details = (List<Map<String, Object>>) firstItem.get("data"); |
|||
} |
|||
|
|||
System.out.println("details === " + details); |
|||
|
|||
} catch (JsonMappingException e) { |
|||
e.printStackTrace(); |
|||
} catch (JsonProcessingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return details; |
|||
|
|||
} |
|||
|
|||
public Map<String, Object> getServices() { |
|||
Map<String, Object> response = new HashMap<>(); |
|||
Map<String, Object> result = new HashMap<>(); |
|||
String sql = "SELECT service_type FROM service_master ORDER BY execution_order"; |
|||
try { |
|||
List<Map<String, Object>> data = mysqlJdbcTemplate.queryForList(sql); |
|||
if (!data.isEmpty()) { |
|||
result.put("Service List", data); |
|||
result.put("Status", "Sucess"); |
|||
result.put("Status Code", 200); |
|||
result.put("Message", "Service List fetched successfully"); |
|||
response.put("Response", result); |
|||
} else { |
|||
result.put("Status", "Not Found"); |
|||
result.put("Message", "Service List Not Found"); |
|||
result.put("Status Code", 404); |
|||
response.put("Response", result); |
|||
} |
|||
} catch (Exception e) { |
|||
result.put("Status", "Error"); |
|||
result.put("Message", "Error in fetching Service list :" + e); |
|||
result.put("Status Code", 500); |
|||
response.put("Response", result); |
|||
} |
|||
|
|||
return response; |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
package com.gcc.restapiservices.petregistration.constants; |
|||
|
|||
public final class AppConstants { |
|||
//public static String key_id="rzp_live_ySI5Ns54Y7qOcJ"; |
|||
// public static String key_secret="Nwf1TjhUtaskof8vePkRR8Sb"; |
|||
|
|||
|
|||
//uncomment for testing payment |
|||
public static String key_id="rzp_test_tDkHFEqWXmuEi8"; |
|||
public static String key_secret="cBQUjMcKZ4J6vmOKSyNZ92py"; |
|||
} |
|||
@ -0,0 +1,76 @@ |
|||
package com.gcc.restapiservices.petregistration.controller; |
|||
|
|||
import com.gcc.restapiservices.petregistration.service.PetRegistrationApiService; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Controller; |
|||
import org.springframework.ui.Model; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PathVariable; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
|
|||
import java.text.SimpleDateFormat; |
|||
import java.time.LocalDateTime; |
|||
import java.time.ZoneId; |
|||
import java.util.Calendar; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
@Controller |
|||
@RequestMapping("/gccrestservices/petregistration") |
|||
public class PetController { |
|||
|
|||
|
|||
@Autowired |
|||
private PetRegistrationApiService petRegistrationApiService; |
|||
|
|||
@GetMapping("/getlicense/{id}") |
|||
public String viewLicense(Model model, @PathVariable("id") int id, @RequestParam(required =false) String mobileNo) { |
|||
System.out.println("mobileNo"+mobileNo); |
|||
model.addAttribute("title","license"); |
|||
|
|||
int uniqueid = id; |
|||
Map<String, Object> lic =petRegistrationApiService.getbylicensemobnoanduniqueId(mobileNo, uniqueid); |
|||
Map<String, Object> own =petRegistrationApiService.getOwnerDetailsbymobile(mobileNo); |
|||
Map<String, Object> pet =petRegistrationApiService.getbymobnoanduniqueId(mobileNo, uniqueid); |
|||
System.out.println(lic); |
|||
System.out.println(own); |
|||
System.out.println(pet); |
|||
model.addAttribute("lic",lic); |
|||
model.addAttribute("own",own); |
|||
model.addAttribute("pet",pet); |
|||
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); |
|||
Calendar c = Calendar.getInstance(); |
|||
LocalDateTime licenseDateTime = (LocalDateTime) lic.get("date"); |
|||
Date licenseDate = Date.from(licenseDateTime.atZone(ZoneId.systemDefault()).toInstant()); |
|||
c.setTime(licenseDate); |
|||
//c.setTime(lic.getDate()); |
|||
String issuedate=dateFormat.format(c.getTime()); |
|||
model.addAttribute("issue",issuedate); |
|||
c.add(Calendar.YEAR, 1); |
|||
c.add(Calendar.DATE, -1); |
|||
String dateInString=dateFormat.format(c.getTime()); |
|||
model.addAttribute("valid",dateInString); |
|||
|
|||
Date date1; |
|||
|
|||
return "owners/petlicense"; |
|||
} |
|||
|
|||
/* @GetMapping("/downloadLicense") |
|||
public String dowmloadLicense(Model model) { |
|||
|
|||
return "owners/downloadlic"; |
|||
}*/ |
|||
|
|||
@GetMapping("/downloadLicense") |
|||
public String dowmloadLicense(Model model, @RequestParam("id") int id, @RequestParam(required =true) String mobileNo) { |
|||
System.out.println("Download License called......."); |
|||
model.addAttribute("mobileNo", mobileNo); |
|||
model.addAttribute("id", id); |
|||
model.addAttribute("name", "downloadLic"); |
|||
return "owners/downloadlic"; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,757 @@ |
|||
package com.gcc.restapiservices.petregistration.controller; |
|||
|
|||
import java.time.LocalDate; |
|||
|
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.time.format.DateTimeParseException; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Random; |
|||
|
|||
import org.json.JSONObject; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
import com.gcc.restapiservices.petregistration.constants.AppConstants; |
|||
import com.gcc.restapiservices.petregistration.service.PetRegistrationApiService; |
|||
import com.gcc.restapiservices.petregistration.util.ApiResponseUtil; |
|||
import com.gcc.restapiservices.swimmingpool.util.ApiResponse; |
|||
import com.razorpay.Order; |
|||
import com.razorpay.RazorpayClient; |
|||
import com.razorpay.RazorpayException; |
|||
|
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/petregistration/api") |
|||
|
|||
public class PetRegistrationApiController { |
|||
|
|||
@Autowired |
|||
private PetRegistrationApiService petRegistrationApiService; |
|||
|
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
|
|||
@GetMapping("/breed") |
|||
public ResponseEntity<?> getBreedList(@RequestParam int type) { |
|||
|
|||
List<Map<String, Object>> result = petRegistrationApiService.getBreedList(type); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
// get owner details |
|||
|
|||
@GetMapping("/ownerinfo") |
|||
public ResponseEntity<?> getOwnerDetails(@RequestParam String mobile) { |
|||
|
|||
List<Map<String, Object>> result = petRegistrationApiService.getOwnerDetails(mobile); |
|||
try { |
|||
|
|||
// Check if mobile is missing or blank |
|||
if (mobile == null || mobile.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("Mobile number is required", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Check if mobile is not 10 digits |
|||
if (!mobile.matches("\\d{10}")) { |
|||
return ApiResponseUtil.error("Mobile number must be exactly 10 digits", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
// get pet type |
|||
@GetMapping("/pettypes") |
|||
public ResponseEntity<?> getPetTypes() { |
|||
|
|||
List<Map<String, Object>> result = petRegistrationApiService.getTypeOfPets(); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
// get pet type |
|||
@GetMapping("/allyears") |
|||
public ResponseEntity<?> getAllYears() { |
|||
|
|||
List<Map<String, Object>> result = petRegistrationApiService.getAllYears(); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
// get pet type |
|||
@GetMapping("/allmonths") |
|||
public ResponseEntity<?> getAllMonths() { |
|||
|
|||
List<Map<String, Object>> result = petRegistrationApiService.getAllMonths(); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
@GetMapping("/userexistornot") |
|||
public ResponseEntity<?> userExistOrNot(@RequestParam String mobilenum) { |
|||
try { |
|||
|
|||
// Check if mobile is missing or blank |
|||
if (mobilenum == null || mobilenum.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("Mobile number is required", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Check if mobile is not 10 digits |
|||
if (!mobilenum.matches("\\d{10}")) { |
|||
return ApiResponseUtil.error("Mobile number must be exactly 10 digits", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
boolean result = petRegistrationApiService.isPhoneRegistered(mobilenum); |
|||
System.out.println("result: " + result); |
|||
|
|||
String message = result ? "Mobile number already registered" : "Mobile number not registered"; |
|||
|
|||
return ApiResponseUtil.success(result, message); |
|||
|
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
// save new owner registration |
|||
|
|||
@PostMapping("/pet-owner/register") |
|||
public ResponseEntity<?> savePinDetails(HttpServletRequest request, |
|||
@RequestParam(required = false) String title, |
|||
@RequestParam(required = false) String username, |
|||
@RequestParam(required = false) String doornumber, |
|||
@RequestParam(required = false) String street, |
|||
@RequestParam(required = false) String area, |
|||
@RequestParam(required = false) String city, |
|||
@RequestParam(required = false) String pincode, |
|||
@RequestParam(required = false) String zone, |
|||
@RequestParam(required = false) String ward, |
|||
@RequestParam(required = false) String phone, |
|||
@RequestParam(required = false) String email, |
|||
@RequestParam(required = false) String pin) { |
|||
|
|||
List<String> missingFields = new ArrayList<>(); |
|||
if (title == null || title.trim().isEmpty()) |
|||
missingFields.add("title"); |
|||
if (username == null || username.trim().isEmpty()) |
|||
missingFields.add("username"); |
|||
if (doornumber == null || doornumber.trim().isEmpty()) |
|||
missingFields.add("doornumber"); |
|||
if (street == null || street.trim().isEmpty()) |
|||
missingFields.add("street"); |
|||
if (area == null || area.trim().isEmpty()) |
|||
missingFields.add("area"); |
|||
if (city == null || city.trim().isEmpty()) |
|||
missingFields.add("city"); |
|||
if (pincode == null || pincode.trim().isEmpty()) |
|||
missingFields.add("pincode"); |
|||
if (zone == null || zone.trim().isEmpty()) |
|||
missingFields.add("zone"); |
|||
if (ward == null || ward.trim().isEmpty()) |
|||
missingFields.add("ward"); |
|||
if (phone == null || phone.trim().isEmpty()) |
|||
missingFields.add("phone"); |
|||
if (email == null || email.trim().isEmpty()) |
|||
missingFields.add("email"); |
|||
if (pin == null || pin.trim().isEmpty()) |
|||
missingFields.add("pin"); |
|||
|
|||
if (!missingFields.isEmpty()) { |
|||
return ApiResponseUtil.invalidRequest("Missing required fields: " + String.join(", ", missingFields)); |
|||
} |
|||
|
|||
try { |
|||
|
|||
// Check if mobile is missing or blank |
|||
if (phone == null || phone.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("Mobile number is required", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Check if mobile is not 10 digits |
|||
if (!phone.matches("\\d{10}")) { |
|||
return ApiResponseUtil.error("Mobile number must be exactly 10 digits", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Check if mobile is not 10 digits |
|||
if (!pincode.matches("\\d{6}")) { |
|||
return ApiResponseUtil.error("Pincode must be exactly 6 digits", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Validate email if provided |
|||
if (email != null && !email.isBlank()) { |
|||
String emailRegex = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.com$"; |
|||
if (!email.matches(emailRegex)) { |
|||
return ApiResponseUtil.error("Invalid email id", HttpStatus.BAD_REQUEST); |
|||
} |
|||
} |
|||
|
|||
// Check if mobile is not 10 digits |
|||
if (!pincode.matches("\\d{6}")) { |
|||
return ApiResponseUtil.error("Pincode must be exactly 6 digits", HttpStatus.BAD_REQUEST); |
|||
} |
|||
// pin validation |
|||
|
|||
if (!pin.matches("\\d{4}")) { |
|||
return ApiResponseUtil.error("pin must be 4 digits only", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
return petRegistrationApiService.insertPetOwner( |
|||
title, username, doornumber, street, area, city, pincode, zone, ward, phone, email, pin); |
|||
} catch (Exception ex) { |
|||
return ApiResponseUtil.error("Internal server error: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
@PostMapping("/saveregistrationdetails") |
|||
public ResponseEntity<?> saveRegistrationDetails( |
|||
@RequestParam(required = false) String petname, |
|||
@RequestParam(required = false) String species, |
|||
@RequestParam(required = false) String breed, |
|||
@RequestParam(required = false) String identification_mark, |
|||
@RequestParam(required = false) String petcolor, |
|||
@RequestParam(required = false) String gender, |
|||
@RequestParam(required = false) String age_year, |
|||
@RequestParam(required = false) String months, |
|||
@RequestParam(required = false) String is_sterilized, |
|||
@RequestParam(required = false) String is_adopted_street, |
|||
@RequestParam(required = false) String is_rabies_vaccination, |
|||
@RequestParam(required = false) String arv_date, |
|||
@RequestParam(required = false) String lastdate_of_deworming, |
|||
@RequestParam(required = false) String other_vaccination, |
|||
@RequestParam(required = false) String previous_licenseNo, |
|||
@RequestParam(required = false) String consultant_name, |
|||
@RequestParam(required = false) String council_number, |
|||
@RequestParam(required = false) String mobilenum, |
|||
@RequestParam(required = false) MultipartFile applicantphoto, |
|||
@RequestParam(required = false) MultipartFile addressproof, |
|||
@RequestParam(required = false) MultipartFile petphoto, |
|||
@RequestParam(required = false) MultipartFile rabiesvacCertificate) { |
|||
|
|||
LocalDate today = LocalDate.now(); |
|||
String registerdate = today.toString(); |
|||
|
|||
List<String> missingFields = new ArrayList<>(); |
|||
|
|||
if (petname == null || petname.trim().isEmpty()) |
|||
missingFields.add("petname"); |
|||
if (species == null || species.trim().isEmpty()) |
|||
missingFields.add("species"); |
|||
if (breed == null || breed.trim().isEmpty()) |
|||
missingFields.add("breed"); |
|||
// if (identification_mark == null || identification_mark.trim().isEmpty()) |
|||
// missingFields.add("identification_mark"); optional |
|||
if (petcolor == null || petcolor.trim().isEmpty()) |
|||
missingFields.add("petcolor"); |
|||
if (gender == null || gender.trim().isEmpty()) |
|||
missingFields.add("gender"); |
|||
if (age_year == null || age_year.trim().isEmpty()) |
|||
missingFields.add("age_year"); |
|||
if (months == null || months.trim().isEmpty()) |
|||
missingFields.add("months"); |
|||
if (is_sterilized == null || is_sterilized.trim().isEmpty()) |
|||
missingFields.add("is_sterilized"); |
|||
if (is_adopted_street == null || is_adopted_street.trim().isEmpty()) |
|||
missingFields.add("is_adopted_street"); |
|||
if (is_rabies_vaccination == null || is_rabies_vaccination.trim().isEmpty()) |
|||
missingFields.add("is_rabies_vaccination"); |
|||
if (arv_date == null || arv_date.trim().isEmpty()) |
|||
missingFields.add("arv_date"); |
|||
// if (lastdate_of_deworming == null || lastdate_of_deworming.trim().isEmpty()) |
|||
// missingFields.add("lastdate_of_deworming"); optional |
|||
// if (other_vaccination == null || other_vaccination.trim().isEmpty()) |
|||
// missingFields.add("other_vaccination"); optional |
|||
// if (previous_licenseNo == null || previous_licenseNo.trim().isEmpty()) |
|||
// missingFields.add("previous_licenseNo"); optional |
|||
// if (consultant_name == null || consultant_name.trim().isEmpty()) |
|||
// missingFields.add("consultant_name"); optional |
|||
// if (council_number == null || council_number.trim().isEmpty()) |
|||
// missingFields.add("council_number"); optional |
|||
if (mobilenum == null || mobilenum.trim().isEmpty()) |
|||
missingFields.add("mobilenum"); |
|||
|
|||
if (applicantphoto == null || applicantphoto.isEmpty()) |
|||
missingFields.add("applicantphoto"); |
|||
if (addressproof == null || addressproof.isEmpty()) |
|||
missingFields.add("addressproof"); |
|||
if (petphoto == null || petphoto.isEmpty()) |
|||
missingFields.add("petphoto"); |
|||
if (rabiesvacCertificate == null || rabiesvacCertificate.isEmpty()) |
|||
missingFields.add("rabiesvacCertificate"); |
|||
|
|||
if (!missingFields.isEmpty()) { |
|||
return ApiResponseUtil.invalidRequest("Missing required fields: " + String.join(", ", missingFields)); |
|||
} |
|||
|
|||
try { |
|||
// Save to DB |
|||
String saveStatus = petRegistrationApiService.saveAllRegistrationDetails(petname, species, breed, |
|||
identification_mark, petcolor, gender, age_year, months, |
|||
is_sterilized, is_adopted_street, is_rabies_vaccination, |
|||
arv_date, lastdate_of_deworming, other_vaccination, previous_licenseNo, consultant_name, |
|||
council_number, mobilenum, |
|||
applicantphoto, addressproof, petphoto, rabiesvacCertificate, registerdate); |
|||
|
|||
Map<String, Object> response = new HashMap<>(); |
|||
|
|||
System.out.println("saveStatus " + saveStatus); |
|||
|
|||
// Check if mobile is missing or blank |
|||
if (mobilenum == null || mobilenum.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("Mobile number is required", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Check if mobile is not 10 digits |
|||
if (!mobilenum.matches("\\d{10}")) { |
|||
return ApiResponseUtil.error("Mobile number must be exactly 10 digits", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
if (is_rabies_vaccination != null && !is_rabies_vaccination.isBlank() |
|||
&& is_rabies_vaccination.equalsIgnoreCase("Yes")) { |
|||
// Continue registration |
|||
} else { |
|||
return ApiResponseUtil.error( |
|||
"You can't register a pet without Rabies Vaccination. Please select 'Yes' only.", |
|||
HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Define the date format used in the request (adjust as needed) |
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
|
|||
if (arv_date != null && !arv_date.isBlank()) { |
|||
LocalDate arvDate = LocalDate.parse(arv_date.trim(), formatter); |
|||
if (arvDate.isAfter(LocalDate.now())) { |
|||
return ApiResponseUtil.error("ARV date cannot be in the future", HttpStatus.BAD_REQUEST); |
|||
} |
|||
} |
|||
|
|||
if (lastdate_of_deworming != null && !lastdate_of_deworming.isBlank()) { |
|||
LocalDate dewormDate = LocalDate.parse(lastdate_of_deworming.trim(), formatter); |
|||
if (dewormDate.isAfter(LocalDate.now())) { |
|||
return ApiResponseUtil.error("Deworming date cannot be in the future", HttpStatus.BAD_REQUEST); |
|||
} |
|||
} |
|||
|
|||
int yearsInt = 0; |
|||
int monthsInt = 0; |
|||
|
|||
try { |
|||
if (age_year != null && !age_year.isBlank()) { |
|||
yearsInt = Integer.parseInt(age_year.trim()); |
|||
} |
|||
if (months != null && !months.isBlank()) { |
|||
monthsInt = Integer.parseInt(months.trim()); |
|||
} |
|||
|
|||
if (yearsInt <= 0 && monthsInt <= 0) { |
|||
return ApiResponseUtil.error("Pet age must be at least 1 month (either in years or months)", |
|||
HttpStatus.BAD_REQUEST); |
|||
} |
|||
} catch (NumberFormatException e) { |
|||
return ApiResponseUtil.error("Invalid value for age_year or months. Both must be numbers.", |
|||
HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
if (saveStatus == null || saveStatus.isEmpty() || saveStatus.contains("error")) { |
|||
|
|||
response.put("status", false); |
|||
response.put("message", saveStatus); |
|||
response.put("description", "Failed to save the details"); |
|||
return ResponseEntity.ok(response); |
|||
} else { |
|||
response.put("status", true); |
|||
response.put("message", "success"); |
|||
response.put("description", "Details were saved successfully"); |
|||
response.put("petId", saveStatus); |
|||
} |
|||
|
|||
// Add uniqueid to response |
|||
|
|||
return ResponseEntity.ok(response); |
|||
|
|||
} catch (Exception ex) { |
|||
return ApiResponseUtil.error("Internal server error: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
// getpetdetails |
|||
|
|||
// get pet type |
|||
@GetMapping("/getpetdetails") |
|||
public ResponseEntity<?> getPetDetails(@RequestParam String mobilenum) { |
|||
try { |
|||
|
|||
// Check if mobile is missing or blank |
|||
if (mobilenum == null || mobilenum.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("Mobile number is required", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Check if mobile is not 10 digits |
|||
if (!mobilenum.matches("\\d{10}")) { |
|||
return ApiResponseUtil.error("Mobile number must be exactly 10 digits", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
List<Map<String, Object>> results = petRegistrationApiService.getPetRegistrationDetailsbyMobile(mobilenum); |
|||
|
|||
// if (results == null || results.isEmpty()) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
// .body("No Registration Data for mobile number: " + mobilenum); |
|||
// } |
|||
|
|||
if (results == null || results.isEmpty()) { |
|||
return ApiResponseUtil.error("No PET Registration Details for mobile number ", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(results, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
// renewal the pet certificate |
|||
@PostMapping("/updateARVDetails") |
|||
public ResponseEntity<?> updateARVDetails( |
|||
@RequestParam("uniqueid") String uniqueid, |
|||
@RequestParam("arvdate") String arvdate, |
|||
@RequestParam("rabiesvacCertificate") MultipartFile rabiesvacCertificate) { |
|||
try { |
|||
if (uniqueid == null || uniqueid.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("Unique ID is required", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
if (arvdate == null || arvdate.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("ARV date is required", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
|
|||
LocalDate arvDate; |
|||
try { |
|||
arvDate = LocalDate.parse(arvdate.trim(), formatter); |
|||
} catch (DateTimeParseException e) { |
|||
return ApiResponseUtil.error("Invalid date format. Please use dd-MM-yyyy", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// if (arvDate.isAfter(LocalDate.now())) { |
|||
// return ApiResponseUtil.error("ARV date cannot be in the future", |
|||
// HttpStatus.BAD_REQUEST); |
|||
// } |
|||
|
|||
if (rabiesvacCertificate == null || rabiesvacCertificate.isEmpty()) { |
|||
return ApiResponseUtil.error("Rabies vaccination certificate is required", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
String result = petRegistrationApiService.updateARVAndRabiesCertificate(uniqueid, arvdate, |
|||
rabiesvacCertificate); |
|||
|
|||
if ("success".equalsIgnoreCase(result)) { |
|||
return ApiResponseUtil.success(null, "Details updated successfully"); |
|||
} else if (result.startsWith("Renewal allowed only after:")) { |
|||
return ApiResponseUtil.error(result, HttpStatus.BAD_REQUEST); |
|||
} else if (result.startsWith("No license validity")) { |
|||
return ApiResponseUtil.error(result, HttpStatus.NOT_FOUND); |
|||
} else if (result.startsWith("Invalid ARV date format")) { |
|||
return ApiResponseUtil.error(result, HttpStatus.BAD_REQUEST); |
|||
} else { |
|||
return ApiResponseUtil.error(result, HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
// if ("success".equalsIgnoreCase(result)) { |
|||
// return ApiResponseUtil.success(null, "Details updated successfully"); |
|||
// } else { |
|||
// return ApiResponseUtil.error(result, HttpStatus.NOT_FOUND); |
|||
// } |
|||
|
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Exception: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
// @PostMapping("/create_order") |
|||
// public ResponseEntity<?> createOrder(@RequestParam String petId) throws RazorpayException { |
|||
|
|||
// try { |
|||
// Map<String, Object> petDetail = petRegistrationApiService.getpetdetails(petId); |
|||
|
|||
// int petStatus = 0; |
|||
// // Check if petDetail is empty |
|||
// if (!petDetail.isEmpty()) { |
|||
// petStatus = (int) petDetail.get("status"); |
|||
// } |
|||
|
|||
// if (petStatus != 2 && petStatus != 4) { |
|||
// return new ResponseEntity<>( |
|||
// new ApiResponse("error", "PET request must be accepted by the officer to proceed with payment.", |
|||
// null, HttpStatus.BAD_REQUEST.value()), |
|||
// HttpStatus.BAD_REQUEST); |
|||
// } |
|||
|
|||
// System.out.println("key ID :-----" + appConfig.getKeyId()); |
|||
// int pet_id = Integer.parseInt(petId); |
|||
|
|||
// double amount = Double.parseDouble("50"); |
|||
|
|||
// // To enable testing mode in appConstants if required for testing & development |
|||
// var client = new RazorpayClient(AppConstants.key_id, AppConstants.key_secret); |
|||
// JSONObject options = new JSONObject(); |
|||
// options.put("amount", amount * 100); |
|||
// options.put("currency", "INR"); |
|||
// // options.put("receipt","Pet_ID/"+pet_id); |
|||
// Order od = client.orders.create(options); |
|||
// petRegistrationApiService.saveorderLog(od.get("id").toString(), od.toString(), pet_id); |
|||
// System.out.println(od); |
|||
// return ResponseEntity.ok(new ApiResponse("success", "Order created successfully", od.toJson().toMap(), |
|||
// HttpStatus.OK.value())); |
|||
// } catch (NumberFormatException ex) { |
|||
// throw new RuntimeException(ex); |
|||
// } catch (RazorpayException e) { |
|||
// return new ResponseEntity<>(new ApiResponse("error", "Razorpay error: " + e.getMessage(), null, |
|||
// HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
// } catch (EmptyResultDataAccessException ex) { |
|||
// return new ResponseEntity<>( |
|||
// new ApiResponse("error", "PET request must be accepted by the officer to proceed with payment.", |
|||
// null, HttpStatus.BAD_REQUEST.value()), |
|||
// HttpStatus.BAD_REQUEST); |
|||
// } catch (Exception e) { |
|||
// return new ResponseEntity<>(new ApiResponse("error", "Unexpected error: " + e.getMessage(), null, |
|||
// HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
// } |
|||
// } |
|||
|
|||
@PostMapping("/Confirm") |
|||
public ResponseEntity<?> confirmPayment( |
|||
@RequestParam("petId") String petId, |
|||
@RequestParam(name = "source", defaultValue = "0") String source, |
|||
@RequestParam("mobno") String mobno, |
|||
@RequestParam(value = "orderId", required = true) String orderId, |
|||
@RequestBody Map<String, Object> paymentResponse) { |
|||
|
|||
try { |
|||
// Validate orderId is not null or empty |
|||
if (orderId == null || orderId.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body(Map.of( |
|||
"message", "Order ID is required and cannot be null or empty", |
|||
"error", "Missing required parameter: orderId")); |
|||
} |
|||
|
|||
System.out.println("Controller Testing................."); |
|||
return petRegistrationApiService.processPaymentConfirmation(petId, source, mobno, orderId, paymentResponse); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Map.of("message", "Failed to confirm payment", "error", e.getMessage())); |
|||
} |
|||
} |
|||
|
|||
// get zones |
|||
|
|||
@GetMapping("/getZones") |
|||
public ResponseEntity<?> getZones() { |
|||
|
|||
List<Map<String, Object>> result = petRegistrationApiService.getZones(); |
|||
try { |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
// get Ward by zoneid |
|||
|
|||
@GetMapping("/getWardByZoneId") |
|||
public ResponseEntity<?> getWardByZoneId(@RequestParam String zoneid) { |
|||
|
|||
List<Map<String, Object>> result = petRegistrationApiService.getWardByZoneId(zoneid); |
|||
try { |
|||
|
|||
// Check if mobile is missing or blank |
|||
if (zoneid == null || zoneid.trim().isEmpty()) { |
|||
return ApiResponseUtil.error("ZoneId is required", HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
if (result.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No data found"); |
|||
} |
|||
|
|||
return ApiResponseUtil.success(result, "Data found"); |
|||
} catch (Exception e) { |
|||
return ApiResponseUtil.error("Internal server error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
|
|||
} |
|||
|
|||
@GetMapping(value = "/sendOTP") |
|||
public String sendOtp(HttpServletRequest request, @RequestParam String mobileNo) { |
|||
|
|||
Map<String, Object> response = new HashMap<>(); |
|||
|
|||
String MobileNo = mobileNo; |
|||
System.out.print("\n MobileNo---:" + mobileNo); |
|||
Random rand = new Random(); |
|||
int otp = rand.nextInt(90000) + 10000; |
|||
|
|||
System.out.print("\n otp---:" + otp); |
|||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy%20HH:mm"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
System.out.println(dtf.format(now)); |
|||
|
|||
String generatedToken = "Welcome to GCC " + otp + " is your OTP for gcc QR System"; |
|||
|
|||
String key = "pfTEYN6H"; |
|||
String urlString = appConfig.getGetOtpUrl() + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + generatedToken + "&entityid=1401572690000011081&templateid=1407168250479102852"; |
|||
|
|||
System.out.print("\n urlString---: " + urlString); |
|||
String bodyMessage = ""; |
|||
|
|||
if (mobileNo == null || mobileNo.trim().isEmpty()) { |
|||
throw new IllegalArgumentException("Mobile number is required"); |
|||
} |
|||
|
|||
// Validate mobile number is exactly 10 digits |
|||
if (!mobileNo.matches("\\d{10}")) { |
|||
throw new IllegalArgumentException("Mobile number must be exactly 10 digits"); |
|||
} |
|||
|
|||
try { |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String Response = restTemplate.getForObject(urlString, String.class); |
|||
|
|||
// Using Jackson ObjectMapper to parse the response JSON |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
ObjectNode jsonResponse = (ObjectNode) objectMapper.readTree(Response); |
|||
|
|||
// Add mobileNo and otp to the response JSON |
|||
jsonResponse.put("MobileNo", MobileNo); |
|||
jsonResponse.put("otp", otp); |
|||
|
|||
// Convert the updated JSON object back to string |
|||
bodyMessage = jsonResponse.toString(); |
|||
// bodyMessage=Response; |
|||
System.out.println("\n bodyMessage" + bodyMessage); |
|||
|
|||
System.out.println("OTP sent successfully!"); |
|||
|
|||
} catch (Exception e) { |
|||
System.out.print("ERROR---: " + e); |
|||
bodyMessage = "Error"; |
|||
} |
|||
HttpSession session = request.getSession(); |
|||
session.setAttribute("otp", otp); |
|||
return bodyMessage; |
|||
|
|||
} |
|||
|
|||
// get licensedetails api |
|||
@GetMapping("/getLicenseDetails") |
|||
public ResponseEntity<?> getLicenseDetailsByMobileNo( |
|||
@RequestParam(value = "licenseno", required = false) String licenseno) { |
|||
if (licenseno == null || licenseno.isEmpty()) { |
|||
return ApiResponseUtil.invalidRequest("license number is required."); |
|||
} |
|||
|
|||
try { |
|||
|
|||
List<Map<String, Object>> licenseDetails = petRegistrationApiService.getLicenseListByMobNo(licenseno); |
|||
if (licenseDetails == null || licenseDetails.isEmpty()) { |
|||
return ApiResponseUtil.notFound("No bookings found for licenseno: " + licenseno); |
|||
} |
|||
|
|||
// Success response |
|||
Map<String, Object> response = new HashMap<>(); |
|||
response.put("status", "SUCCESS"); |
|||
response.put("statuscode", "200"); |
|||
response.put("licenseDetails", licenseDetails); |
|||
|
|||
return ResponseEntity.ok(response); |
|||
|
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
|
|||
@GetMapping("/getCountByMobileNo") |
|||
public ResponseEntity<?> getCountByMobileNo(String mobileno) { |
|||
|
|||
int mobileCount = petRegistrationApiService.getCountByMobileNo(mobileno); |
|||
|
|||
System.out.println("mobileCount: " + mobileCount); |
|||
if(mobileCount>=3) { |
|||
return ApiResponseUtil.success(mobileCount, "Already you reached the license limit (Max 3 pets)"); |
|||
}else { |
|||
return ApiResponseUtil.success(mobileCount, "You can proceed with the license registration"); |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,32 @@ |
|||
package com.gcc.restapiservices.petregistration.controller; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import com.gcc.restapiservices.petregistration.service.PetSMSService; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/api/sms") |
|||
public class SMSController { |
|||
|
|||
@Autowired |
|||
private PetSMSService smsService; |
|||
|
|||
@PostMapping("/send") |
|||
public String sendMessage( |
|||
@RequestParam String channel, // WHATSAPP or SMS |
|||
@RequestParam int scenarioId, |
|||
@RequestParam String var1, // name |
|||
@RequestParam(required = false) String var2, // refId / OTP |
|||
@RequestParam(required = false) String var3, // link/status |
|||
@RequestParam String mobileNumber) { |
|||
if ("SMS".equals(channel)) { |
|||
return smsService.sendMessage(scenarioId, var1, var2, var3, mobileNumber); |
|||
} else if ("WHATSAPP".equals(channel)) { |
|||
return smsService.sendWhatsappMessage(scenarioId, var1, var2, var3, mobileNumber); |
|||
} else { |
|||
return "Invalid channel input"; |
|||
} |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,949 @@ |
|||
package com.gcc.restapiservices.petregistration.service; |
|||
|
|||
import java.awt.image.BufferedImage; |
|||
import java.io.ByteArrayOutputStream; |
|||
import java.io.IOException; |
|||
import java.nio.file.Files; |
|||
import java.nio.file.Path; |
|||
import java.nio.file.Paths; |
|||
import java.security.SecureRandom; |
|||
import java.sql.PreparedStatement; |
|||
import java.sql.Timestamp; |
|||
import java.text.SimpleDateFormat; |
|||
import java.time.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.time.format.DateTimeParseException; |
|||
import java.util.Calendar; |
|||
import java.util.Collections; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Random; |
|||
import java.util.HashMap; |
|||
|
|||
import javax.imageio.ImageIO; |
|||
import javax.imageio.ImageWriteParam; |
|||
import javax.imageio.ImageWriter; |
|||
import javax.imageio.stream.ImageOutputStream; |
|||
import javax.sql.DataSource; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.core.env.Environment; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.jdbc.support.GeneratedKeyHolder; |
|||
import org.springframework.jdbc.support.KeyHolder; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.gcc.restapiservices.petregistration.util.ApiResponseUtil; |
|||
import com.gcc.restapiservices.cdwaste.util.DateTimeUtil;; |
|||
|
|||
@Service |
|||
public class PetRegistrationApiService { |
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlPetRegistrationRestServicesDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
private final Environment environment; |
|||
|
|||
private String fileBaseUrl; |
|||
|
|||
private final ObjectMapper objectMapper = new ObjectMapper(); |
|||
|
|||
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; |
|||
|
|||
private static final int STRING_LENGTH = 15; |
|||
|
|||
private static final Random RANDOM = new SecureRandom(); |
|||
|
|||
|
|||
public PetRegistrationApiService(Environment environment) { |
|||
this.environment = environment; |
|||
this.fileBaseUrl = environment.getProperty("fileBaseUrl"); |
|||
|
|||
} |
|||
|
|||
//breed list |
|||
public List<Map<String, Object>> getBreedList(int type) { |
|||
String sql = " SELECT id,breed FROM breed where type= ? "; |
|||
return jdbcTemplate.queryForList(sql, type); |
|||
} |
|||
|
|||
|
|||
//mobile number registered or not |
|||
public boolean isPhoneRegistered(String mobilenum) { |
|||
String sql = "SELECT COUNT(*) FROM pet_owner WHERE phone = ?"; |
|||
Integer count = jdbcTemplate.queryForObject(sql, Integer.class, mobilenum); |
|||
return count != null && count > 0; |
|||
} |
|||
|
|||
|
|||
|
|||
// owner registration |
|||
public ResponseEntity<?> insertPetOwner( |
|||
String title, String username, String doornumber, String street, String area, |
|||
String city, String pincode, String zone, String ward, String phone, |
|||
String email, String pin) { |
|||
|
|||
// Check if phone number already exists |
|||
String checkSql = "SELECT COUNT(*) FROM pet_owner WHERE phone = ?"; |
|||
Integer count = jdbcTemplate.queryForObject(checkSql, new Object[]{phone}, Integer.class); |
|||
|
|||
if (count != null && count > 0) { |
|||
return ApiResponseUtil.buildResponse(false, HttpStatus.CONFLICT, |
|||
"This mobile number is already registered.", null); |
|||
} |
|||
|
|||
|
|||
Date cdate = new Date(); |
|||
|
|||
// Insert into pet_owner (without pin) |
|||
String insertPetOwnerSql = """ |
|||
INSERT INTO pet_owner (title, fname, doornumber, street, area, city, pincode, zone, ward, phone, email,cdate) |
|||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?) |
|||
"""; |
|||
|
|||
int rows1 = jdbcTemplate.update(insertPetOwnerSql, |
|||
title, username, doornumber, street, area, city, pincode, zone, ward, phone, email, cdate); |
|||
|
|||
// Insert into login_details (with pin) |
|||
String insertLoginSql = """ |
|||
INSERT INTO login_detail (mobileno, pin, usertype, zone) |
|||
VALUES (?, ?, ?, ?) |
|||
"""; |
|||
|
|||
int rows2 = jdbcTemplate.update(insertLoginSql, phone, pin, "user", zone); |
|||
|
|||
if (rows1 > 0 && rows2 > 0) { |
|||
return ApiResponseUtil.success(Map.of("phone", phone), "Registered successfully"); |
|||
} else { |
|||
return ApiResponseUtil.error("Failed to register", HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
|
|||
// get owner details |
|||
public List<Map<String, Object>> getOwnerDetails(String mobile) { |
|||
String sql = "select id, " |
|||
+ " area, cdate, city, " |
|||
+ " doornumber, email, " |
|||
+ " fname as username, " |
|||
+ " phone, pincode, street, " |
|||
+ " title, ward, zone " |
|||
+ " from pet_owner where phone = ? "; |
|||
return jdbcTemplate.queryForList(sql, mobile); |
|||
} |
|||
|
|||
|
|||
//get type of pet |
|||
public List<Map<String, Object>> getTypeOfPets() { |
|||
String petsql = "select * from type"; |
|||
return jdbcTemplate.queryForList(petsql); |
|||
} |
|||
|
|||
|
|||
public List<Map<String, Object>> getAllYears() { |
|||
String yearsql = "select * from year order by id asc"; |
|||
return jdbcTemplate.queryForList(yearsql); |
|||
} |
|||
|
|||
|
|||
public List<Map<String, Object>> getAllMonths() { |
|||
String monthsql = "select * from month order by id asc"; |
|||
return jdbcTemplate.queryForList(monthsql); |
|||
} |
|||
|
|||
|
|||
public String saveAllRegistrationDetails(String petname, String species, String breed, String identification_mark, |
|||
String petcolor, String gender, String age_year, String months, |
|||
String is_sterilized, String is_adopted_street, String is_rabies_vaccination, |
|||
String arv_date, String lastdate_of_deworming, String other_vaccination, |
|||
String previous_licenseNo, String consultant_name, String council_number, String mobilenum, |
|||
MultipartFile applicantphoto, MultipartFile addressproof, |
|||
MultipartFile petphoto, MultipartFile rabiesvacCertificate,String registerdate) { |
|||
|
|||
// Convert age to string format like "2.3" where 2 = years and 3 = months |
|||
String computedAge; |
|||
|
|||
String source="2"; |
|||
try { |
|||
String yearPart = (age_year != null && !age_year.isEmpty()) ? age_year.trim() : "0"; |
|||
String monthPart = (months != null && !months.isEmpty()) ? months.trim() : "0"; |
|||
|
|||
// Validate numeric input |
|||
Integer.parseInt(yearPart); |
|||
Integer.parseInt(monthPart); |
|||
|
|||
computedAge = yearPart + "." + monthPart; |
|||
} catch (NumberFormatException e) { |
|||
e.printStackTrace(); |
|||
return "error: invalid age input"; |
|||
} |
|||
|
|||
// Declare as final after computation |
|||
final String finalAge = computedAge; |
|||
|
|||
// // Step 1: Fetch zone from pet_owner using mobile number |
|||
// String zoneFetched = null; |
|||
// try { |
|||
// zoneFetched = jdbcTemplate.queryForObject( |
|||
// "SELECT zone FROM pet_owner WHERE phone = ?", |
|||
// new Object[]{mobilenum}, |
|||
// String.class |
|||
// ); |
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// return "error: unable to fetch zone from pet_owner"; |
|||
// } |
|||
// |
|||
// final String zone = zoneFetched; |
|||
|
|||
|
|||
// Step 1: Fetch zone from pet_owner using mobile number |
|||
String zoneFetched = null; |
|||
try { |
|||
List<String> zones = jdbcTemplate.query( |
|||
"SELECT zone FROM pet_owner WHERE phone = ? ", |
|||
new Object[]{mobilenum}, |
|||
(rs, rowNum) -> rs.getString("zone") |
|||
); |
|||
|
|||
|
|||
if (zones.isEmpty()) { |
|||
return "error: mobile number not found in pet_owner"; |
|||
} |
|||
|
|||
zoneFetched = zones.get(0); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return "error: database error while fetching zone"; |
|||
} |
|||
|
|||
final String zone = zoneFetched; |
|||
|
|||
|
|||
|
|||
String sql = "INSERT INTO petdetails (" + |
|||
"petname, species, breed, identificationmark, petcolor, gender, age, " + |
|||
"sterilized, stray, vaccinated, arvdate, dewormdate, othervac, " + |
|||
"previoslicense_no, veterinary_consultant, tnvcno, mobilenum,zone,status,registerdate,source) " + |
|||
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?)"; |
|||
|
|||
|
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
|
|||
try { |
|||
//String finalAge = age; |
|||
|
|||
int result = jdbcTemplate.update(connection -> { |
|||
PreparedStatement ps = connection.prepareStatement(sql, new String[]{"id"}); |
|||
ps.setString(1, petname); |
|||
ps.setString(2, species); |
|||
ps.setString(3, breed); |
|||
ps.setString(4, identification_mark); |
|||
ps.setString(5, petcolor); |
|||
ps.setString(6, gender); |
|||
ps.setString(7, finalAge); |
|||
ps.setString(8, is_sterilized); |
|||
ps.setString(9, is_adopted_street); |
|||
ps.setString(10, is_rabies_vaccination); |
|||
ps.setString(11, arv_date); |
|||
ps.setString(12, lastdate_of_deworming); |
|||
ps.setString(13, other_vaccination); |
|||
ps.setString(14, previous_licenseNo); |
|||
ps.setString(15, consultant_name); |
|||
ps.setString(16, council_number); |
|||
ps.setString(17, mobilenum); |
|||
ps.setString(18, zone); |
|||
ps.setInt(19, 0); |
|||
ps.setString(20,registerdate); |
|||
ps.setString(21,source); |
|||
return ps; |
|||
}, keyHolder); |
|||
|
|||
|
|||
if (result > 0 && keyHolder.getKey() != null) { |
|||
Number petId = keyHolder.getKey(); |
|||
|
|||
// 4. Get uniqueid using petId |
|||
String uniqueId; |
|||
try { |
|||
uniqueId = jdbcTemplate.queryForObject( |
|||
"SELECT uniqueid FROM petdetails WHERE uniqueid = ?", |
|||
new Object[]{petId}, |
|||
String.class |
|||
); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return "error: unable to fetch uniqueid after insert"; |
|||
} |
|||
|
|||
// File upload and metadata |
|||
String applicantOriginalName = applicantphoto != null ? applicantphoto.getOriginalFilename() : ""; |
|||
String applicantMimeType = applicantphoto != null ? applicantphoto.getContentType() : ""; |
|||
String applicantPath = applicantphoto != null ? fileUpload(applicantphoto, "applicant_photo") : ""; |
|||
|
|||
String addressOriginalName = addressproof != null ? addressproof.getOriginalFilename() : ""; |
|||
String addressMimeType = addressproof != null ? addressproof.getContentType() : ""; |
|||
String addressPath = addressproof != null ? fileUpload(addressproof, "address_proof") : ""; |
|||
|
|||
String petOriginalName = petphoto != null ? petphoto.getOriginalFilename() : ""; |
|||
String petMimeType = petphoto != null ? petphoto.getContentType() : ""; |
|||
String petPath = petphoto != null ? fileUpload(petphoto, "pet_photo") : ""; |
|||
|
|||
String rabiesOriginalName = rabiesvacCertificate != null ? rabiesvacCertificate.getOriginalFilename() : ""; |
|||
String rabiesMimeType = rabiesvacCertificate != null ? rabiesvacCertificate.getContentType() : ""; |
|||
String rabiesPath = rabiesvacCertificate != null ? fileUpload(rabiesvacCertificate, "rabies_certificate") : ""; |
|||
|
|||
// Insert into pet_support_doc |
|||
String docSql = "INSERT INTO pet_support_doc (" + |
|||
"petdetails_uniqueid, address_file_name, address_file_type, address_proof_url, " + |
|||
"applicant_file_name, applicant_file_type, applicant_photo_url, " + |
|||
"pet_file_name, pet_file_type, pet_photo_url, " + |
|||
"rabies_file_name, rabies_file_type, rabies_certificate_url) " + |
|||
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
|||
|
|||
jdbcTemplate.update(docSql, |
|||
uniqueId, |
|||
addressOriginalName, addressMimeType, addressPath, |
|||
applicantOriginalName, applicantMimeType, applicantPath, |
|||
petOriginalName, petMimeType, petPath, |
|||
rabiesOriginalName, rabiesMimeType, rabiesPath |
|||
); |
|||
|
|||
return uniqueId; |
|||
|
|||
//return String.valueOf(petId); |
|||
|
|||
} |
|||
|
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return "error"; |
|||
} |
|||
|
|||
|
|||
//generate randomstring |
|||
|
|||
public static String generateRandomString() { |
|||
StringBuilder result = new StringBuilder(STRING_LENGTH); |
|||
for (int i = 0; i < STRING_LENGTH; i++) { |
|||
result.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length()))); |
|||
} |
|||
return result.toString(); |
|||
} |
|||
|
|||
|
|||
private byte[] compressImage(BufferedImage image, float quality) throws IOException { |
|||
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
|||
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(byteArrayOutputStream); |
|||
|
|||
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); |
|||
writer.setOutput(imageOutputStream); |
|||
|
|||
ImageWriteParam param = writer.getDefaultWriteParam(); |
|||
if (param.canWriteCompressed()) { |
|||
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); |
|||
param.setCompressionQuality(quality); |
|||
} |
|||
|
|||
writer.write(null, new javax.imageio.IIOImage(image, null, null), param); |
|||
|
|||
writer.dispose(); |
|||
imageOutputStream.close(); |
|||
|
|||
return byteArrayOutputStream.toByteArray(); |
|||
} |
|||
|
|||
|
|||
//fileupload |
|||
|
|||
public String fileUpload(MultipartFile file, String docType) { |
|||
if (file == null || file.isEmpty()) { |
|||
return ""; |
|||
} |
|||
|
|||
try { |
|||
// Get base upload directory from application.properties |
|||
String baseDir = environment.getProperty("file.upload.directory"); |
|||
|
|||
// Decide folder based on document type |
|||
String folderName; |
|||
switch (docType) { |
|||
case "applicant_photo": |
|||
folderName = "applicantPhotos"; |
|||
break; |
|||
case "address_proof": |
|||
folderName = "addressProofs"; |
|||
break; |
|||
case "pet_photo": |
|||
folderName = "petPhotos"; |
|||
break; |
|||
case "rabies_certificate": |
|||
folderName = "rabiesCertificates"; |
|||
break; |
|||
default: |
|||
folderName = "/others"; |
|||
} |
|||
|
|||
// Add year/month subfolders |
|||
String year = DateTimeUtil.getCurrentYear(); |
|||
String month = DateTimeUtil.getCurrentMonth(); |
|||
String fullDirPath = baseDir + "/" + folderName; |
|||
|
|||
// Ensure directory exists |
|||
Path directoryPath = Paths.get(fullDirPath); |
|||
if (!Files.exists(directoryPath)) { |
|||
Files.createDirectories(directoryPath); |
|||
} |
|||
|
|||
// Generate safe and unique file name |
|||
String timestamp = DateTimeUtil.getCurrentDateTime(); // like 20250715143210 |
|||
String originalFileName = file.getOriginalFilename(); |
|||
String fileName = docType + "_" + timestamp + "_" + originalFileName.replaceAll("\\s+", ""); |
|||
Path filePath = Paths.get(fullDirPath, fileName); |
|||
|
|||
// Compress image and write to disk |
|||
BufferedImage image = ImageIO.read(file.getInputStream()); |
|||
byte[] compressedBytes = compressImage(image, 0.5f); // 50% quality |
|||
Files.write(filePath, compressedBytes); |
|||
|
|||
// Return relative path for DB |
|||
return fileBaseUrl +"/gccrestservices/files/" + folderName + "/" + fileName; |
|||
|
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
return ""; |
|||
} |
|||
} |
|||
|
|||
|
|||
public List<Map<String, Object>> getPetRegistrationDetailsbyMobile(String mobilenum) { |
|||
String sql = |
|||
"SELECT " + |
|||
" pd.uniqueid, " + |
|||
" pd.tnvcno, " + |
|||
" pd.veterinary_consultant, " + |
|||
" pd.age, " + |
|||
" pd.arvdate, " + |
|||
" pd.breed, " + |
|||
" pd.dewormdate, " + |
|||
" pd.gender, " + |
|||
" pd.identificationmark, " + |
|||
" pd.mobilenum, " + |
|||
" pd.other_breed, " + |
|||
" pd.othervac, " + |
|||
" pd.petcolor, " + |
|||
" pd.petname, " + |
|||
" pd.previoslicense_no, " + |
|||
" DATE_FORMAT(pd.registerdate, '%d-%m-%Y') AS registerdate, " + |
|||
" pd.species, " + |
|||
" pd.sterilized, " + |
|||
" pd.stray, " + |
|||
" pd.updatedby, " + |
|||
" pd.vaccinated, " + |
|||
" pd.zone, " + |
|||
|
|||
" psd.address_proof_url, " + |
|||
" psd.applicant_photo_url, " + |
|||
" psd.pet_photo_url, " + |
|||
" psd.rabies_certificate_url, " + |
|||
|
|||
// Status mapping as flags |
|||
" CASE WHEN pd.status = 0 THEN 'in_progress' " + |
|||
" WHEN pd.status = 1 THEN 'pending_for_payment' " + |
|||
" WHEN pd.status = 2 THEN 'license_issued' " + |
|||
" WHEN pd.status = 3 THEN 'rejected' " + |
|||
" WHEN pd.status = 4 THEN 'expired' ELSE 'UNKNOWN' " + |
|||
|
|||
" END AS status " + |
|||
|
|||
"FROM petdetails pd " + |
|||
"JOIN pet_support_doc psd ON pd.uniqueid = psd.petdetails_uniqueid " + |
|||
"WHERE pd.mobilenum = ?"; |
|||
|
|||
List<Map<String, Object>> results= jdbcTemplate.queryForList(sql, mobilenum); |
|||
for (Map<String, Object> result : results) { |
|||
Object petId = result.get("uniqueid"); |
|||
Object mobile = result.get("mobilenum"); |
|||
|
|||
if (petId != null && mobile != null) { |
|||
String licenseUrl = "https://gccservices.chennaicorporation.gov.in/gccrestservices/petregistration/downloadLicense" |
|||
+ "?name=downloadLic" |
|||
+ "&id=" + petId |
|||
+ "&mobileNo=" + mobile; |
|||
result.put("licenseUrl", licenseUrl); |
|||
} |
|||
} |
|||
return results; |
|||
} |
|||
|
|||
|
|||
|
|||
public String updateARVAndRabiesCertificate( |
|||
String uniqueid, |
|||
String arvDateStr, |
|||
MultipartFile rabiesvacCertificate |
|||
) { |
|||
try { |
|||
// Parse arvDate |
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
LocalDate arvDate = LocalDate.parse(arvDateStr.trim(), formatter); |
|||
|
|||
// Step 1: Fetch previous license validity date |
|||
String fetchValiditySql = "SELECT pl.validity FROM pet_license pl " + |
|||
"JOIN petdetails pd ON pd.uniqueid = pl.uniqueid " + |
|||
"WHERE pd.uniqueid = ?"; |
|||
|
|||
LocalDate validityDate = jdbcTemplate.queryForObject(fetchValiditySql, new Object[]{uniqueid}, |
|||
(rs, rowNum) -> { |
|||
String validityStr = rs.getString("validity"); // e.g., "29-07-2026" |
|||
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
return LocalDate.parse(validityStr, inputFormat); |
|||
}); |
|||
|
|||
|
|||
// Step 2: Check if the renewal is allowed |
|||
LocalDate allowedRenewalDate = validityDate.plusYears(1); |
|||
if (arvDate.isBefore(allowedRenewalDate)) { |
|||
return "Renewal allowed only after: " + allowedRenewalDate.toString(); |
|||
} |
|||
|
|||
// Step 3: Extract file metadata |
|||
String rabiesOriginalName = rabiesvacCertificate != null ? rabiesvacCertificate.getOriginalFilename() : ""; |
|||
String rabiesMimeType = rabiesvacCertificate != null ? rabiesvacCertificate.getContentType() : ""; |
|||
String rabiesPath = rabiesvacCertificate != null ? fileUpload(rabiesvacCertificate, "rabiesCertificates") : ""; |
|||
|
|||
// Step 4: Perform update |
|||
String updateSql = "UPDATE petdetails pd " + |
|||
"JOIN pet_support_doc psd ON pd.uniqueid = psd.pet_doc_id " + |
|||
"SET pd.arvdate = ?, " + |
|||
"psd.rabies_file_name = ?, " + |
|||
"psd.rabies_file_type = ?, " + |
|||
"psd.rabies_certificate_url = ? " + |
|||
"WHERE pd.uniqueid = ?"; |
|||
|
|||
int updated = jdbcTemplate.update(updateSql, |
|||
arvDateStr, |
|||
rabiesOriginalName, |
|||
rabiesMimeType, |
|||
rabiesPath, |
|||
uniqueid |
|||
); |
|||
|
|||
return updated > 0 ? "success" : "No record found for uniqueid: " + uniqueid; |
|||
|
|||
} catch (EmptyResultDataAccessException e) { |
|||
return "No license validity found for this unique ID"; |
|||
} catch (DateTimeParseException e) { |
|||
return "Invalid ARV date format. Please use yyyy-MM-dd"; |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return "Error while updating: " + e.getMessage(); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
// public String updateARVAndRabiesCertificate( |
|||
// String uniqueid, |
|||
// String arvDate, |
|||
// MultipartFile rabiesvacCertificate |
|||
// ) { |
|||
// try { |
|||
// // Extract rabies certificate file metadata |
|||
// String rabiesOriginalName = rabiesvacCertificate != null ? rabiesvacCertificate.getOriginalFilename() : ""; |
|||
// String rabiesMimeType = rabiesvacCertificate != null ? rabiesvacCertificate.getContentType() : ""; |
|||
// String rabiesPath = rabiesvacCertificate != null ? fileUpload(rabiesvacCertificate, "rabiesCertificates") : ""; |
|||
// |
|||
// // SQL query to update both tables using join |
|||
// String sql = |
|||
// "UPDATE petdetails pd " + |
|||
// "JOIN pet_support_doc psd ON pd.uniqueid = psd.pet_doc_id " + |
|||
// "SET pd.arvdate = ?, " + |
|||
// "psd.rabies_file_name = ?, " + |
|||
// "psd.rabies_file_type = ?, " + |
|||
// "psd.rabies_certificate_url = ? " + |
|||
// "WHERE pd.uniqueid = ?"; |
|||
// |
|||
// int updated = jdbcTemplate.update(sql, |
|||
// arvDate, |
|||
// rabiesOriginalName, |
|||
// rabiesMimeType, |
|||
// rabiesPath, |
|||
// uniqueid |
|||
// ); |
|||
// |
|||
// if (updated > 0) { |
|||
// return "success"; |
|||
// } else { |
|||
// return "No record found for uniqueid: " + uniqueid; |
|||
// } |
|||
// |
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// return "Error while updating: " + e.getMessage(); |
|||
// } |
|||
// } |
|||
|
|||
|
|||
public int saveorderLog(String id, String orderInfo, int petId) { |
|||
if (id == null || petId == 0) { |
|||
System.out.println("❌ Missing required fields. Order ID: " + id + ", Temp Book ID: " + petId); |
|||
return 0; |
|||
} |
|||
|
|||
String sqlQuery = "INSERT INTO orderslogs(order_id, order_info, uniqueid) VALUES (?,?,?)"; |
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
|
|||
try { |
|||
int affectedRows = jdbcTemplate.update(connection -> { |
|||
PreparedStatement ps = connection.prepareStatement(sqlQuery, new String[]{"id"}); |
|||
ps.setString(1, id); |
|||
ps.setString(2, orderInfo); |
|||
ps.setInt(3, petId); |
|||
return ps; |
|||
}, keyHolder); |
|||
|
|||
if (affectedRows > 0) { |
|||
Number generatedId = keyHolder.getKey(); |
|||
return (generatedId != null) ? generatedId.intValue() : 0; |
|||
} else { |
|||
System.out.println("❌ Failed to insert into order_log."); |
|||
return 0; |
|||
} |
|||
} catch (Exception e) { |
|||
System.out.println("🚨 Exception during insert to order_log: " + e.getMessage()); |
|||
e.printStackTrace(); |
|||
return 0; |
|||
} |
|||
} |
|||
|
|||
public List<Map<String, Object>> getZones() { |
|||
String zonesql = "select id,zone_name from zone_master"; |
|||
return jdbcTemplate.queryForList(zonesql); |
|||
} |
|||
|
|||
|
|||
public List<Map<String, Object>> getWardByZoneId(String zoneid) { |
|||
String wardsql = "select id,ward_name,zone_id from ward_master where zone_id = ?"; |
|||
return jdbcTemplate.queryForList(wardsql, zoneid); |
|||
} |
|||
|
|||
|
|||
public ResponseEntity<?> processPaymentConfirmation(String petId, String source, String mobno, String orderId, Map<String, Object> paymentResponse) { |
|||
|
|||
System.out.println("petId:--"+petId); |
|||
System.out.println("Payment Response: " + paymentResponse); |
|||
System.out.println("OrderId from parameter: " + orderId); |
|||
|
|||
int uniqueid = Integer.parseInt(petId); |
|||
|
|||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
|
|||
Double amount = 50.0; |
|||
|
|||
try { |
|||
// Debug: Print the structure to understand it better |
|||
System.out.println("Payment Response Keys: " + paymentResponse.keySet()); |
|||
|
|||
// Handle the new nested payment response structure |
|||
Map<String, Object> transaction = null; |
|||
String paymentId = null; |
|||
String status = null; |
|||
|
|||
// Check if transaction is directly in paymentResponse |
|||
if (paymentResponse.containsKey("transaction")) { |
|||
transaction = (Map<String, Object>) paymentResponse.get("transaction"); |
|||
System.out.println("Found transaction directly: " + transaction); |
|||
} else if (paymentResponse.containsKey("currency")) { |
|||
// New structure with nested transaction inside currency |
|||
Map<String, Object> currency = (Map<String, Object>) paymentResponse.get("currency"); |
|||
System.out.println("Currency keys: " + currency.keySet()); |
|||
if (currency.containsKey("transaction")) { |
|||
transaction = (Map<String, Object>) currency.get("transaction"); |
|||
System.out.println("Found transaction in currency: " + transaction); |
|||
} |
|||
} |
|||
|
|||
if (transaction != null) { |
|||
System.out.println("Transaction keys: " + transaction.keySet()); |
|||
// Extract payment details from transaction with null checks |
|||
paymentId = transaction.get("pg_transaction_id") != null ? transaction.get("pg_transaction_id").toString() : null; |
|||
status = transaction.get("status") != null ? transaction.get("status").toString() : null; |
|||
|
|||
System.out.println("Parsed values - paymentId: " + paymentId + ", status: " + status); |
|||
} else { |
|||
System.out.println("No transaction found in payment response"); |
|||
} |
|||
|
|||
// Use the provided orderId parameter directly (not from payment response) |
|||
String finalOrderId = orderId; |
|||
|
|||
// Validate required fields from payment response |
|||
if (paymentId == null || status == null) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("message", "Invalid payment response structure"); |
|||
errorResponse.put("error", "Missing required transaction fields. Found - paymentId: " + paymentId + ", status: " + status); |
|||
errorResponse.put("paymentResponse", paymentResponse); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
savePaymentResponse(finalOrderId, paymentId, status, paymentResponse, uniqueid); |
|||
|
|||
if ("failed".equalsIgnoreCase(status)) { |
|||
// Convert entire response map to JSON string |
|||
ObjectMapper mapper = new ObjectMapper(); |
|||
String fullResponseJson = mapper.writeValueAsString(paymentResponse); |
|||
|
|||
// Save to DB (assuming you have a method) |
|||
saveFailedTransaction(finalOrderId, paymentId, status, fullResponseJson, uniqueid); |
|||
|
|||
return ResponseEntity.ok(Map.of( |
|||
"message", "Your payment failed. Please try again." |
|||
)); |
|||
} else if ("success".equalsIgnoreCase(status)) { |
|||
|
|||
int s = Integer.parseInt(source) ; |
|||
|
|||
int result = savePaymentInfo(mobno, uniqueid, paymentId, status, dtf.format(now), finalOrderId, amount, s); |
|||
|
|||
System.out.println("result...result"+result); |
|||
|
|||
if (result > 0) { |
|||
String licNo = savePetLicense(uniqueid, Long.parseLong(mobno)); |
|||
System.out.println("Service Testing........."); |
|||
return ResponseEntity.ok(Map.of( |
|||
"message", "Your payment was successful " |
|||
|
|||
|
|||
)); |
|||
} |
|||
|
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Map.of("message", "Failed to confirm payment")); |
|||
} |
|||
|
|||
} catch (Exception ex) { |
|||
ex.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Map.of("message", "Failed to confirm payment", "error", ex.getMessage())); |
|||
|
|||
} |
|||
|
|||
|
|||
return ResponseEntity.ok(Map.of("msg", "updated")); |
|||
} |
|||
|
|||
public void savePaymentResponse(String orderId, String payId, String status, |
|||
Map<String, Object> paymentResponse, int uniqueId) { |
|||
|
|||
String sql = "INSERT INTO payment_response (order_id, payment_id, payment_status, response, uniqueId) " + |
|||
"VALUES (?, ?, ?, ?, ?)"; |
|||
|
|||
try { |
|||
String jsonResponse = objectMapper.writeValueAsString(paymentResponse); |
|||
jdbcTemplate.update(sql, orderId, payId, status, jsonResponse, uniqueId); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); // log or rethrow as needed |
|||
} |
|||
} |
|||
|
|||
public void saveFailedTransaction(String orderId, String paymentId, String status, String fullJsonResponse, int uniqueId) { |
|||
String sql = "INSERT INTO payment_failed_response (order_id, payment_id, payment_status, response, uniqueId) " + |
|||
"VALUES (?, ?, ?, ?, ?)"; |
|||
|
|||
jdbcTemplate.update(sql, orderId, paymentId, status, fullJsonResponse, uniqueId); |
|||
} |
|||
|
|||
public int savePaymentInfo(String mobno, int uniqueid, String payId, String status, String format, String orderId, Double amount, int source) { |
|||
String sql = "INSERT INTO payment (amount, mobno, order_id, payment_id, payment_status, paymentdate, uniqueid) " + |
|||
"VALUES (?, ?, ?, ?, ?, ?, ?)"; |
|||
|
|||
int count = jdbcTemplate.update(sql, amount, mobno, orderId, payId, status, format, uniqueid); |
|||
|
|||
return count; |
|||
} |
|||
|
|||
public String savePetLicense(int uniqueid, long mobno) { |
|||
Date date = new Date(); |
|||
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); |
|||
Calendar c = Calendar.getInstance(); |
|||
c.setTime(date); |
|||
String issueDate = dateFormat.format(c.getTime()); |
|||
c.add(Calendar.YEAR, 1); |
|||
c.add(Calendar.DATE, -1); |
|||
String validityDate = dateFormat.format(c.getTime()); |
|||
|
|||
Map<String, Object> ownerDetails = getOwnerDetailsByMobNo(mobno); |
|||
int year = LocalDate.now().getYear(); |
|||
|
|||
// int z = (int) ownerDetails.get("zone"); |
|||
int z = Integer.parseInt(ownerDetails.get("zone").toString()); |
|||
|
|||
System.out.println("zone..."+z); |
|||
// Generate license number |
|||
String licenseNo = year + "/" + String.format("%02d", z) + "/" + String.format("%05d", uniqueid); |
|||
|
|||
Map<String, Object> existingLicenses = checkLincenseExistsByMobNoAndUniqueid(mobno, uniqueid); |
|||
|
|||
if (!existingLicenses.isEmpty()) { |
|||
addOldPetLic(existingLicenses); |
|||
// Renewal case - update existing license |
|||
String updateSql = "UPDATE pet_license SET license_no = ?, date = ?, validity = ? WHERE phone = ? AND uniqueid = ?"; |
|||
jdbcTemplate.update(updateSql, licenseNo, new java.sql.Date(date.getTime()), validityDate, mobno, uniqueid); |
|||
} else { |
|||
// New license case - insert |
|||
String insertSql = "INSERT INTO pet_license (license_no, phone, uniqueid, date, validity) VALUES (?, ?, ?, ?, ?)"; |
|||
jdbcTemplate.update(insertSql, licenseNo, mobno, uniqueid, new java.sql.Date(date.getTime()), validityDate); |
|||
} |
|||
|
|||
// Update pet status |
|||
System.out.println("before update pet status"+mobno+"\n"+uniqueid); |
|||
updatePetStatus(mobno, uniqueid, 2); |
|||
|
|||
return licenseNo; |
|||
} |
|||
|
|||
private Map<String, Object> getOwnerDetailsByMobNo(long mobno) { |
|||
String query = "SELECT * FROM pet_owner WHERE phone = ?"; |
|||
try { |
|||
return jdbcTemplate.queryForMap(query, mobno); |
|||
} catch (EmptyResultDataAccessException e) { |
|||
return Collections.emptyMap(); |
|||
} |
|||
} |
|||
|
|||
private Map<String, Object> checkLincenseExistsByMobNoAndUniqueid(long mobno, int uniqueid) { |
|||
// Check if license already exists |
|||
String checkSql = "SELECT * FROM pet_license WHERE phone = ? AND uniqueid = ?"; |
|||
// Map<String, Object> existingLicenses = jdbcTemplate.queryForMap(checkSql, mobno, uniqueid); |
|||
// return existingLicenses; |
|||
try { |
|||
return jdbcTemplate.queryForMap(checkSql, mobno, uniqueid); |
|||
} catch (EmptyResultDataAccessException e) { |
|||
return Collections.emptyMap(); |
|||
} |
|||
|
|||
} |
|||
|
|||
private void addOldPetLic(Map<String, Object> existingLicenses) { |
|||
|
|||
LocalDateTime localDateTime = (LocalDateTime) existingLicenses.get("date"); |
|||
Timestamp timestamp = Timestamp.valueOf(localDateTime); |
|||
|
|||
|
|||
String licenseNo = (String) existingLicenses.get("license_no"); |
|||
long mobno = (long) existingLicenses.get("phone"); |
|||
int uniqueid = (int) existingLicenses.get("uniqueid"); |
|||
String validityDate = (String) existingLicenses.get("validity"); |
|||
// Timestamp dateTime = (Timestamp) existingLicenses.get("date"); |
|||
String sql = "Insert into old_pet_license (license_no, phone, uniqueid, date, validity) VALUES (?, ?, ?, ?, ?)"; |
|||
jdbcTemplate.update(sql, licenseNo, mobno, uniqueid, timestamp, validityDate); |
|||
} |
|||
|
|||
private void updatePetStatus(long mobno, int uniqueid, int status) { |
|||
System.out.println("inside pet status method"); |
|||
String sql = "UPDATE petdetails SET status =?, mobilenum =? WHERE uniqueid = ?"; |
|||
jdbcTemplate.update(sql, status, mobno, uniqueid); |
|||
} |
|||
|
|||
|
|||
// get licensedetails api |
|||
public List<Map<String, Object>> getLicenseListByMobNo(String licenseno) { |
|||
String sql = "SELECT " + |
|||
"pd.uniqueid, " + |
|||
"pd.tnvcno, " + |
|||
"pd.veterinary_consultant, " + |
|||
"pd.age, " + |
|||
"pd.arvdate, " + |
|||
"pd.breed, " + |
|||
"pd.dewormdate, " + |
|||
"pd.gender, " + |
|||
"pd.identificationmark, " + |
|||
"pd.mobilenum, " + |
|||
"pd.other_breed, " + |
|||
"pd.othervac, " + |
|||
"pd.petcolor, " + |
|||
"pd.petname, " + |
|||
"pd.previoslicense_no, " + |
|||
"DATE_FORMAT(pd.registerdate, '%d-%m-%Y') AS registerdate, " + |
|||
"pd.rejectreason, " + |
|||
"pd.species, " + |
|||
" DATE_FORMAT(pd.statusdate, '%d-%m-%Y') AS statusdate, " + |
|||
"pd.sterilized, " + |
|||
"pd.stray, " + |
|||
"pd.updatedby, " + |
|||
"pd.vaccinated, " + |
|||
"pd.zone, " + |
|||
"pl.license_no, " + |
|||
"psd.address_proof_url, " + |
|||
"psd.applicant_photo_url, " + |
|||
"psd.pet_photo_url, " + |
|||
"psd.rabies_certificate_url, " + |
|||
"CASE " + |
|||
" WHEN pd.status = 0 THEN 'in_progress' " + |
|||
" WHEN pd.status = 1 THEN 'pending_for_payment' " + |
|||
" WHEN pd.status = 2 THEN 'license_issued' " + |
|||
" WHEN pd.status = 3 THEN 'rejected' " + |
|||
" WHEN pd.status = 4 THEN 'expired' " + |
|||
" ELSE 'UNKNOWN' " + |
|||
"END AS application_status " + |
|||
"FROM petdetails pd " + |
|||
"JOIN pet_license pl ON pd.uniqueid = pl.uniqueid " + |
|||
"JOIN pet_support_doc psd ON pd.uniqueid = psd.petdetails_uniqueid " + |
|||
"WHERE pl.license_no = ?"; |
|||
return jdbcTemplate.queryForList(sql, licenseno); |
|||
} |
|||
|
|||
|
|||
public Map<String, Object> getbymobnoanduniqueId(String mobno,int uniqueid) { |
|||
String sql = " select pd.* ,pl.validity,psd.pet_photo_url,psd.pet_file_name" + |
|||
" from petdetails pd" + |
|||
" left join pet_license pl on pl.uniqueid=pd.uniqueid" + |
|||
" left join pet_support_doc psd on psd.petdetails_uniqueid=pd.uniqueid" + |
|||
" where pl.phone=? AND pd.uniqueid= ?"; |
|||
return jdbcTemplate.queryForMap(sql, mobno,uniqueid); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
public Map<String, Object> getbylicensemobnoanduniqueId(String mobno, int uniqueid) { |
|||
String sql = "SELECT * FROM pet_license WHERE phone= ? and uniqueid= ? "; |
|||
return jdbcTemplate.queryForMap(sql, mobno, uniqueid); |
|||
} |
|||
|
|||
public Map<String, Object> getOwnerDetailsbymobile(String mobile) { |
|||
String sql = "select * " |
|||
+ " from pet_owner where phone = ? "; |
|||
return jdbcTemplate.queryForMap(sql, mobile); |
|||
} |
|||
|
|||
// add by sanjay use of allow only accept request |
|||
public Map<String, Object> getpetdetails(String petId) { |
|||
|
|||
String sql ="select * from petdetails where uniqueid = ? AND status IN (2,4)"; |
|||
return jdbcTemplate.queryForMap(sql, petId); |
|||
} |
|||
|
|||
public int getCountByMobileNo(String mobileno) { |
|||
String sql = "SELECT COUNT(*) FROM petdetails pd WHERE pd.mobilenum = ? AND pd.status IN (0,1,2,4)"; |
|||
return jdbcTemplate.queryForObject(sql, Integer.class, mobileno); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,603 @@ |
|||
package com.gcc.restapiservices.petregistration.service; |
|||
|
|||
import java.io.UnsupportedEncodingException; |
|||
import java.net.HttpURLConnection; |
|||
import java.net.URL; |
|||
import java.net.URLEncoder; |
|||
import java.nio.charset.StandardCharsets; |
|||
|
|||
import org.apache.commons.lang3.ObjectUtils.Null; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.web.util.UriComponentsBuilder; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
|
|||
import jakarta.servlet.http.HttpSession; |
|||
|
|||
@Service |
|||
public class PetSMSService { |
|||
|
|||
private static final String GUPSHUP_API_URL = "https://media.smsgupshup.com/GatewayAPI/rest"; |
|||
private static final String SMS_API_URL = "https://tmegov.onex-aura.com/api/sms?"; |
|||
|
|||
// Gupshup credentials |
|||
private static final String USER_ID = "2000233507"; |
|||
private static final String PASSWORD = "h2YjFNcJ"; |
|||
|
|||
// Onex-Aura credentials |
|||
private static final String SMS_ENTITY_ID = "1401572690000011081"; |
|||
private static final String SMS_TEMPLATE_ID = ""; |
|||
private static final String SMS_SENDER_ID = "GCCCRP"; |
|||
|
|||
String apikey = "5c995535-6244-11f0-98fc-02c8a5e042bd"; |
|||
String from = "919445061913"; |
|||
|
|||
String key = "pfTEYN6H"; |
|||
|
|||
public String sendMessage(int scenarioId, String var1, String var2, |
|||
String var3, String mobileNumber) { |
|||
String templateId = null; |
|||
|
|||
String message = prepareMessage(scenarioId, var1, var2, var3, mobileNumber); |
|||
|
|||
if (message.startsWith("Invalid")) { |
|||
return message; |
|||
} |
|||
|
|||
String response = sendSms(message); |
|||
|
|||
// return "Message Sent: " + message + "\nResponse: " + response; |
|||
return "Response: " + response; |
|||
} |
|||
|
|||
public String sendWhatsappMessage(int scenarioId, String var1, String var2, |
|||
String var3, String mobileNumber) { |
|||
|
|||
String message = prepareWhatsappMessage(scenarioId, var1, var2, var3, mobileNumber); |
|||
|
|||
if (message.startsWith("Invalid")) { |
|||
return message; |
|||
} |
|||
|
|||
String response = sendWhatsApp(message); |
|||
|
|||
return "Response: " + response; |
|||
} |
|||
|
|||
private String prepareMessage(int scenarioId, String var1, String var2, String var3, String MobileNo) { |
|||
String message; |
|||
String urlString = null; |
|||
|
|||
switch (scenarioId) { |
|||
case 1: // Signup OTP |
|||
message = "Dear " + var1 + ", your OTP for account sign-up is " |
|||
+ var2 + ". This code is valid for 10 minutes. Do not share it with anyone. - GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407175923154012472"; |
|||
break; |
|||
|
|||
case 2: // License Application Received |
|||
message = "Dear " + var1 + ", your application ID: " + var2 + " " |
|||
+ "is currently Received. For more details, please contact us at " |
|||
+ var3 + ". – GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407175923230686244"; |
|||
break; |
|||
|
|||
case 3: // License Application On process |
|||
message = "Dear " + var1 + ", your application ID: " + var2 + " " |
|||
+ "is currently on process. For more details, please contact us at " |
|||
+ var3 + ". – GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407175923248822204"; |
|||
break; |
|||
|
|||
case 4: // Approved |
|||
message = "Dear " + var1 + ", " |
|||
+ "We are pleased to inform you that your application ID: " + var2 |
|||
+ " has been approved. " |
|||
+ "For next steps or further details, please contact us at " + var3 + "– GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407175923274516644"; |
|||
break; |
|||
|
|||
case 5: // Rejected |
|||
message = "Dear " + var1 + ", " |
|||
+ "We regret to inform you that your application ID: " + var2 + " has been rejected. " |
|||
+ "For more details or assistance, please contact us at " + var3 + ".– GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407175923292860654"; |
|||
break; |
|||
|
|||
case 6: // Download License Link |
|||
message = "Dear " + var1 + ", your document is ready. Please use your ID: " |
|||
+ var2 + " to download it here: " + var3 + ". – GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407175923308512766"; |
|||
break; |
|||
|
|||
case 7: // Pet Transfer OTP |
|||
message = "Dear " + var1 + ", your OTP for pet transfer ID: " |
|||
+ var2 + " is " + var3 + ". Do not share this code with anyone. – GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407175923325699477"; |
|||
break; |
|||
|
|||
case 8: // Additional Details Pet License - Missing Data |
|||
message = "Dear " + var1 + ", your request (ID: " |
|||
+ var2 |
|||
+ ") is pending due to missing details: (Old Existing details, Microchip ID). Please share the info to proceed. By GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407176034136225728"; |
|||
break; |
|||
|
|||
case 9: // Reset Password OTP for Pet License |
|||
message = "Dear " + var1 |
|||
+ ", You have requested to reset your password. Please use the One-Time Password (OTP) below to proceed. OTP: " |
|||
+ var2 |
|||
+ " For your security, this OTP will be valid only for the next [time limit, e.g., 10 minutes]. If you did not request this password reset," |
|||
+ "please ignore this message or contact our support team immediately. By GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407176034124745780"; |
|||
break; |
|||
|
|||
case 10: // Pet License One Time free License Renewal |
|||
message = "Dear Pet Owner, Your previous GCC Pet License ID " + var1 |
|||
+ " is eligible for one-time free license renewal. Use this OTP " + var2 |
|||
+ " to skip the payment while applying for your new license.-GCC"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407176413912291986"; |
|||
break; |
|||
|
|||
case 11: // Pet License expires tomorrow |
|||
message = "Your Pet License expires tomorrow. Kindly visit your veterinarian today and complete the renewal process to avoid license expiry.\n" |
|||
+ |
|||
"- Greater Chennai Corporation"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407178038425363123"; |
|||
break; |
|||
|
|||
case 12: // Pet License 7 days expiry |
|||
message = "Your Pet License will expire in 7 days. Please visit your veterinarian and complete the renewal process at the earliest to ensure uninterrupted registration.\n" |
|||
+ |
|||
"- Greater Chennai Corporation"; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407178038413058122"; |
|||
break; |
|||
|
|||
case 13: // Pet License 30 days expiry |
|||
message = "Your GCC Pet License will expire in 30 days. Kindly visit your veterinarian to complete the renewal process and avoid expiry. Thank you\n" |
|||
+ "- Greater Chennai Corporation."; |
|||
urlString = SMS_API_URL + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + MobileNo |
|||
+ "&body=" + message + "&entityid=1401572690000011081&templateid=1407178038404219687"; |
|||
break; |
|||
|
|||
default: |
|||
urlString = "Invalid scenario ID."; |
|||
} |
|||
|
|||
return urlString; |
|||
|
|||
} |
|||
|
|||
private String prepareWhatsappMessage(int scenarioId, String var1, String var2, String var3, String mobNo) { |
|||
String whatsupmsg = null; |
|||
String urlString = ""; |
|||
String placeholders = ""; |
|||
|
|||
switch (scenarioId) { |
|||
|
|||
case 1: // When the Pet is added - For customer and Doctor: |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE" + |
|||
* "&msg=Hello+%2A" + var1 + |
|||
* "%2A%2C%0AYour+request+to+add+a+new+pet+has+been+received.%0APet+Name%3A+%2A" |
|||
* + var2 + |
|||
* "%2A%0APet+ID%3A+%2A" + var3 + |
|||
* "%2A%0AWe+will+notify+you+once+the+registration+is+complete." + |
|||
* "&isTemplate=true" + |
|||
* "&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2 + "|~|" + var3, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3055707&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
break; |
|||
|
|||
case 2: // Confirmation of the License application (Received) |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE" + |
|||
* "&msg=Dear+" + var1 + "%2C+your+application+%28ID%3A+%2A" + var2 + |
|||
* "%2A%29+is+currently+Received+.+%0AFor+more+details%2C+please+contact+us+at+https%3A%2F%2Fpetservice.gccservices.in%2F." |
|||
* + |
|||
* "&isTemplate=true" + |
|||
* "&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3055762&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 3: // Confirmation of the License application (On process) |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE" + |
|||
* "&msg=Dear+" + var1 + "%2C+your+application+%28ID%3A+%2A" + var2 + |
|||
* "%2A%29+is+currently+On+process+.+%0AFor+more+details%2C+please+contact+us+at+https%3A%2F%2Fpetservice.gccservices.in" |
|||
* + |
|||
* "&isTemplate=true" + |
|||
* "&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3055764&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 4: // approved |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE" + |
|||
* "&msg=Hello+" + var1 + |
|||
* "%2C%0AWe+are+pleased+to+inform+you+that+your+application+%28ID%3A+%2A" |
|||
* + var2 + |
|||
* "%2A%29+has+been+approved.%0AFor+next+steps+or+further+details%2C+please+contact+us+at+https%3A%2F%2Fpetservice.gccservices.in" |
|||
* + |
|||
* "&isTemplate=true" + |
|||
* "&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3055772&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 5: // rejected |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE" + |
|||
* "&msg=Hello+" + var1 + |
|||
* "%2C%0AWe+regret+to+inform+you+that+your+application+%28ID%3A+%2A" + var2 |
|||
* + |
|||
* "%2A%29+has+been+rejected.%0AFor+more+details+or+assistance%2C+please+contact+us+at+https%3A%2F%2Fpetservice.gccservices.in" |
|||
* + |
|||
* "&isTemplate=true" + |
|||
* "&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3055776&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 6: // 24 Hours License Status |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE" + |
|||
* "&msg=Hello+" + var1 + "%2C%0AYour+application+%28ID%3A+%2A" + var2 + |
|||
* "%2A%29+is+currently+ON+process.%0AFor+more+details%2C+please+contact+us+at+https%3A%2F%2Fpetservice.gccservices.in" |
|||
* + |
|||
* "&isTemplate=true" + |
|||
* "&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3287449&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 7: // Complaint Submitted |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE" + |
|||
* "&msg=Dear+" + var1 + |
|||
* "%2C++%0AWe+have+received+your+complaint%2Fgrievance+with+Reference+ID%3A+%2A" |
|||
* + var2 + |
|||
* "%2A.++%0AOur+support+team+will+review+the+details+and+keep+you+updated+on+the+progress.++%0AThank+you+for+reaching+out+to+us." |
|||
* + |
|||
* "&isTemplate=true" + |
|||
* "&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3055806&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 8: // Complaint Status |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE" + |
|||
* "&msg=Dear+" + var1 |
|||
* + |
|||
* "%2C++%0AWe+have+received+your+complaint%2Fgrievance+with+Reference+ID%3A+%2A" |
|||
* + var2 + |
|||
* "%2A.++%0AOur+team+is+reviewing+the+details+and+will+get+back+to+you+shortly.++%0AThank+you+for+bringing+this+to+our+attention." |
|||
* + |
|||
* "&isTemplate=true" + |
|||
* "&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3055818&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 9: // Complaint Closed |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE" + |
|||
* "&msg=Dear+" + var1 + |
|||
* "%2C++%0AYour+complaint%2Fgrievance+with+Reference+ID%3A+%2A" + var2 + |
|||
* "%2A+has+been+successfully+closed.++%0AIf+you+have+any+further+concerns+or+require+assistance%2C+please+feel+free+to+contact+us.++%0AThank+you+for+your+patience+and+for+giving+us+the+opportunity+to+serve+you." |
|||
* + |
|||
* "&isTemplate=true" + |
|||
* "&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3055836&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 10: // Additional Details Pet License - Missing Data |
|||
/* |
|||
* whatsupmsg = "https://mediaapi.smsgupshup.com/GatewayAPI/rest?" + |
|||
* "userid=2000233507" + |
|||
* "&password=h2YjFNcJ" + |
|||
* "&send_to=" + mobNo + "&v=1.1" + |
|||
* "&format=json" + |
|||
* "&msg_type=TEXT" + |
|||
* "&method=SENDMESSAGE&msg=Hello+" + var1 |
|||
* + |
|||
* "%2C++%0A%0AWe+noticed+that+some+required+details+are+missing+from+your+recent+submission+ID%3A+" |
|||
* + var2 + |
|||
* ".++%0ATo+proceed+further%2C+please+share+the+following+missing+information%3A++%0A1.+Upload+documents+%28old+health%2C+vaccine+charts%29%0A2.+Upload+address+proof%0A3.+If+microchipped%2C+share+the+microchip+id+immediately%0A%0AKindly+provide+the+details+at+your+earliest+convenience." |
|||
* + |
|||
* "++%0AThank+you+for+your+prompt+attention." + |
|||
* "&isTemplate=true&footer=-+GCC"; |
|||
*/ |
|||
|
|||
try { |
|||
placeholders = URLEncoder.encode(var1 + "|~|" + var2, "UTF-8"); |
|||
} catch (UnsupportedEncodingException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3055750&placeholders=" + placeholders + ""; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 11: // License expires tomorrow |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3270149"; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 12: // License expires in 7 days |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3270148"; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
case 13: // License expires in 30 days |
|||
|
|||
urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from=" |
|||
+ from |
|||
+ "&to=91" + mobNo + "" |
|||
+ "&type=template&templateid=3270142"; |
|||
|
|||
System.out.println(urlString + ":" + mobNo); |
|||
|
|||
break; |
|||
|
|||
default: |
|||
whatsupmsg = "Invalid scenario ID."; |
|||
} |
|||
|
|||
// return whatsupmsg; |
|||
return urlString; |
|||
} |
|||
|
|||
private String sendWhatsApp(String msgUrl) { |
|||
System.out.println("Whatsapp URL :-" + msgUrl); |
|||
|
|||
String response = ""; |
|||
try { |
|||
HttpURLConnection connection = null; |
|||
|
|||
URL url = new URL(msgUrl); |
|||
connection = (HttpURLConnection) url.openConnection(); |
|||
connection.setRequestMethod("GET"); |
|||
|
|||
int responseCode = connection.getResponseCode(); |
|||
response = responseCode + ""; |
|||
System.out.println("Response Code: " + responseCode); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return response; |
|||
} |
|||
|
|||
private String sendSms(String urlString) { |
|||
System.out.print(" urlString---: " + urlString); |
|||
String bodyMessage = ""; |
|||
try { |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String Response = restTemplate.getForObject(urlString, String.class); |
|||
|
|||
// Create ObjectMapper instance |
|||
ObjectMapper mapper = new ObjectMapper(); |
|||
|
|||
// Parse response to ObjectNode |
|||
ObjectNode jsonResponse = (ObjectNode) mapper.readTree(Response); |
|||
|
|||
bodyMessage = jsonResponse.toString(); |
|||
System.out.println(" bodyMessage: " + bodyMessage); |
|||
|
|||
System.out.println("OTP sent successfully!"); |
|||
|
|||
} catch (Exception e) { |
|||
System.out.print("ERROR---: " + e); |
|||
bodyMessage = "Error"; |
|||
} |
|||
|
|||
return bodyMessage; |
|||
} |
|||
} |
|||
@ -0,0 +1,46 @@ |
|||
package com.gcc.restapiservices.petregistration.util; |
|||
|
|||
import java.util.Collections; |
|||
import java.util.LinkedHashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
|
|||
public class ApiResponseUtil { |
|||
|
|||
public static ResponseEntity<List<Map<String, Object>>> success(Object data, String message) { |
|||
return buildResponse(true, HttpStatus.OK, message, data); |
|||
} |
|||
|
|||
public static ResponseEntity<List<Map<String, Object>>> notFound(String message) { |
|||
return buildResponse(false, HttpStatus.NOT_FOUND, message, Collections.emptyList()); |
|||
} |
|||
|
|||
public static ResponseEntity<List<Map<String, Object>>> error(String message, HttpStatus status) { |
|||
return buildResponse(false, status, message, null); |
|||
} |
|||
|
|||
public static ResponseEntity<List<Map<String, Object>>> invalidRequest(String message) { |
|||
return buildResponse(false, HttpStatus.BAD_REQUEST, message, Collections.emptyList()); |
|||
} |
|||
|
|||
|
|||
public static ResponseEntity<List<Map<String, Object>>> buildResponse( |
|||
boolean statusFlag, |
|||
HttpStatus httpStatus, |
|||
String message, |
|||
Object data |
|||
) { |
|||
Map<String, Object> response = new LinkedHashMap<>(); |
|||
response.put("status", statusFlag); |
|||
response.put("code", httpStatus.value()); |
|||
response.put("message", message); |
|||
response.put("data", data); |
|||
|
|||
List<Map<String, Object>> responseList = Collections.singletonList(response); |
|||
return ResponseEntity.status(httpStatus).body(responseList); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
// package com.gcc.restapiservices.petregistration.util; |
|||
|
|||
// import org.springframework.stereotype.Service; |
|||
|
|||
// import java.time.LocalDateTime; |
|||
// import java.time.format.DateTimeFormatter; |
|||
|
|||
// @Service |
|||
// public class DateTimeUtil { |
|||
// public static String getCurrentDateTime() { |
|||
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMyyyyHHmmss"); |
|||
// LocalDateTime now = LocalDateTime.now(); |
|||
// return now.format(formatter); |
|||
// } |
|||
// public static String getCurrentYear() { |
|||
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy"); |
|||
// LocalDateTime now = LocalDateTime.now(); |
|||
// return now.format(formatter); |
|||
// } |
|||
// public static String getCurrentMonth() { |
|||
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM"); |
|||
// LocalDateTime now = LocalDateTime.now(); |
|||
// return now.format(formatter); |
|||
// } |
|||
// public static String getCurrentDay() { |
|||
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd"); |
|||
// LocalDateTime now = LocalDateTime.now(); |
|||
// return now.format(formatter); |
|||
// } |
|||
// public static String getCurrentDateTimeMysql() { |
|||
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
|||
// LocalDateTime now = LocalDateTime.now(); |
|||
// return now.format(formatter); |
|||
// } |
|||
// } |
|||
@ -0,0 +1,324 @@ |
|||
package com.gcc.restapiservices.propertytax.controller; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import com.gcc.restapiservices.propertytax.service.PropertyTaxOtpService; |
|||
|
|||
@RequestMapping("/gccrestservices/api/propertytax") |
|||
@RestController |
|||
public class PropertyTaxOtpController { |
|||
|
|||
private PropertyTaxOtpService propertyTaxOtpService; |
|||
|
|||
@Autowired |
|||
public PropertyTaxOtpController(PropertyTaxOtpService propertyTaxOtpService) { |
|||
this.propertyTaxOtpService = propertyTaxOtpService; |
|||
} |
|||
|
|||
// @GetMapping("/getErpDetails") |
|||
// public ResponseEntity<Map<String, Object>> getErpDetails( |
|||
// @RequestParam String zone, |
|||
// @RequestParam String division, |
|||
// @RequestParam String billNo, |
|||
// @RequestParam(required = false) String subBill) { |
|||
|
|||
// try { |
|||
// System.out.println("zone = " + zone); |
|||
// System.out.println("division = " + division); |
|||
// System.out.println("billNo = " + billNo); |
|||
// System.out.println("subBill = " + subBill); |
|||
|
|||
// // Validate required parameters |
|||
// if (zone == null || zone.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Zone parameter is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (division == null || division.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Division parameter is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (billNo == null || billNo.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Bill number parameter is required" |
|||
// )); |
|||
// } |
|||
|
|||
// Map<String, Object> result = propertyTaxOtpService.getErpDetails(zone, division, billNo, subBill); |
|||
|
|||
// if (result == null || result.isEmpty()) { |
|||
// return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 404, |
|||
// "message", "No ERP details found for the provided parameters" |
|||
// )); |
|||
// } |
|||
|
|||
// return ResponseEntity.ok(Map.of( |
|||
// "status", "success", |
|||
// "status_code", 200, |
|||
// "data", result |
|||
// )); |
|||
|
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 500, |
|||
// "message", "Internal Server Error: " + e.getMessage() |
|||
// )); |
|||
// } |
|||
// } |
|||
|
|||
@GetMapping("/getWardByZoneId") |
|||
public ResponseEntity<Map<String, Object>> getWardByZoneId(@RequestParam int zoneId) { |
|||
try { |
|||
Map<String, Object> result = propertyTaxOtpService.getWardByZoneId(zoneId); |
|||
|
|||
// Check if the result contains data |
|||
List<Map<String, Object>> data = (List<Map<String, Object>>) result.get("data"); |
|||
if (data == null || data.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of( |
|||
"status", "error", |
|||
"status_code", 404, |
|||
"message", "No ward data found for zoneId: " + zoneId |
|||
)); |
|||
} |
|||
|
|||
return ResponseEntity.ok(Map.of( |
|||
"status", "success", |
|||
"status_code", 200, |
|||
"data", data |
|||
)); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of( |
|||
"status", "error", |
|||
"status_code", 500, |
|||
"message", "Internal Server Error: " + e.getMessage() |
|||
)); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getZoneMaster") |
|||
public ResponseEntity<Map<String, Object>> getZoneMaster() { |
|||
try { |
|||
Map<String, Object> result = propertyTaxOtpService.getZoneMaster(); |
|||
|
|||
// Check if the result contains data |
|||
List<Map<String, Object>> data = (List<Map<String, Object>>) result.get("data"); |
|||
if (data == null || data.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of( |
|||
"status", "error", |
|||
"status_code", 404, |
|||
"message", "No zone master data found" |
|||
)); |
|||
} |
|||
|
|||
return ResponseEntity.ok(Map.of( |
|||
"status", "success", |
|||
"status_code", 200, |
|||
"data", data |
|||
)); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of( |
|||
"status", "error", |
|||
"status_code", 500, |
|||
"message", "Internal Server Error: " + e.getMessage() |
|||
)); |
|||
} |
|||
} |
|||
|
|||
// @PostMapping("/sendOTPNew") |
|||
// public ResponseEntity<Map<String, Object>> sendOTP(@RequestParam String mobile) { |
|||
// try { |
|||
// // Validate mobile number |
|||
// if (mobile == null || mobile.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Mobile number is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (!mobile.matches("\\d{10}")) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Mobile number must be exactly 10 digits" |
|||
// )); |
|||
// } |
|||
|
|||
// Map<String, Object> result = propertyTaxOtpService.sendOTP(mobile); |
|||
|
|||
// return ResponseEntity.ok(Map.of( |
|||
// "status", "success", |
|||
// "status_code", 200, |
|||
// "data", result |
|||
// )); |
|||
|
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 500, |
|||
// "message", "Internal Server Error: " + e.getMessage() |
|||
// )); |
|||
// } |
|||
// } |
|||
|
|||
// @PostMapping("/verifyOTP") |
|||
// public ResponseEntity<Map<String, Object>> verifyOTP(@RequestParam String mobile, @RequestParam String otp) { |
|||
// try { |
|||
// // Validate parameters |
|||
// if (mobile == null || mobile.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Mobile number is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (otp == null || otp.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "OTP is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (!mobile.matches("\\d{10}")) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Mobile number must be exactly 10 digits" |
|||
// )); |
|||
// } |
|||
|
|||
// Map<String, Object> result = propertyTaxOtpService.verifyOTP(mobile, otp); |
|||
|
|||
// return ResponseEntity.ok(Map.of( |
|||
// "status", "success", |
|||
// "status_code", 200, |
|||
// "data", result |
|||
// )); |
|||
|
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 500, |
|||
// "message", "Internal Server Error: " + e.getMessage() |
|||
// )); |
|||
// } |
|||
// } |
|||
|
|||
// @PostMapping("/submitData") |
|||
// public ResponseEntity<Map<String, Object>> submitData( |
|||
// @RequestParam String mobile, |
|||
// @RequestParam(value = "zone", required = false) String zone, |
|||
// @RequestParam(value = "ZONE", required = false) String zoneUpper, |
|||
// @RequestParam(value = "division", required = false) String division, |
|||
// @RequestParam(value = "DIVISION", required = false) String divisionUpper, |
|||
// @RequestParam(value = "billNo", required = false) String billNo, |
|||
// @RequestParam(value = "BILL", required = false) String billUpper, |
|||
// @RequestParam(required = false) String subBill, |
|||
// @RequestParam(required = false) String SUBBILL, |
|||
// @RequestParam String email, |
|||
// @RequestParam(required = false) String famCardNo) { |
|||
|
|||
// try { |
|||
// // Handle both uppercase and lowercase parameters |
|||
// String finalZone = (zone != null && !zone.trim().isEmpty()) ? zone : zoneUpper; |
|||
// String finalDivision = (division != null && !division.trim().isEmpty()) ? division : divisionUpper; |
|||
// String finalBillNo = (billNo != null && !billNo.trim().isEmpty()) ? billNo : billUpper; |
|||
// String finalSubBill = (subBill != null && !subBill.trim().isEmpty()) ? subBill : SUBBILL; |
|||
|
|||
// // Validate required parameters |
|||
// if (mobile == null || mobile.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Mobile number is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (finalZone == null || finalZone.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Zone is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (finalDivision == null || finalDivision.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Division is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (finalBillNo == null || finalBillNo.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Bill number is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (email == null || email.trim().isEmpty()) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Email is required" |
|||
// )); |
|||
// } |
|||
|
|||
// if (!mobile.matches("\\d{10}")) { |
|||
// return ResponseEntity.badRequest().body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 400, |
|||
// "message", "Mobile number must be exactly 10 digits" |
|||
// )); |
|||
// } |
|||
|
|||
// Map<String, Object> result = propertyTaxOtpService.submitData(mobile, finalZone, finalDivision, finalBillNo, finalSubBill, email, famCardNo); |
|||
|
|||
// return ResponseEntity.ok(Map.of( |
|||
// "status", "success", |
|||
// "status_code", 200, |
|||
// "data", result |
|||
// )); |
|||
|
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of( |
|||
// "status", "error", |
|||
// "status_code", 500, |
|||
// "message", "Internal Server Error: " + e.getMessage() |
|||
// )); |
|||
// } |
|||
// } |
|||
} |
|||
@ -0,0 +1,313 @@ |
|||
package com.gcc.restapiservices.propertytax.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; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
@Service |
|||
public class PropertyTaxOtpService { |
|||
|
|||
// private JdbcTemplate oracleJdbcTemplate; |
|||
// private JdbcTemplate oraclePropertyTaxJdbcTemplate; |
|||
// private JdbcTemplate oraclePropertyTaxUatJdbcTemplate; |
|||
private JdbcTemplate mysqlJdbcTemplate; |
|||
|
|||
// @Autowired |
|||
// public void setOracleDataSource(@Qualifier("oracleDataSource") DataSource oracleDataSource) { |
|||
// this.oracleJdbcTemplate = new JdbcTemplate(oracleDataSource); |
|||
// } |
|||
|
|||
// @Autowired |
|||
// public void setOraclePropertyTaxDataSource(@Qualifier("oraclepropertytaxDataSource") DataSource oraclePropertyTaxDataSource) { |
|||
// this.oraclePropertyTaxJdbcTemplate = new JdbcTemplate(oraclePropertyTaxDataSource); |
|||
// } |
|||
|
|||
// @Autowired |
|||
// public void setOraclePropertyTaxUatDataSource(@Qualifier("oraclepropertytax_uatDataSource") DataSource oraclePropertyTaxUatDataSource) { |
|||
// this.oraclePropertyTaxUatJdbcTemplate = new JdbcTemplate(oraclePropertyTaxUatDataSource); |
|||
// } |
|||
|
|||
@Autowired |
|||
public void setMysqlDataSource(@Qualifier("mysqlGccRestServicesDataSource") DataSource mysqlDataSource) { |
|||
System.out.println("Setting MySQL DataSource: " + mysqlDataSource); |
|||
this.mysqlJdbcTemplate = new JdbcTemplate(mysqlDataSource); |
|||
System.out.println("MySQL JdbcTemplate created: " + this.mysqlJdbcTemplate); |
|||
} |
|||
|
|||
// @Transactional("oracleTransactionManager") |
|||
// public Map<String, Object> getErpDetails(String zone, String division, String billNo, String subBill) { |
|||
// Map<String, Object> response = new HashMap<>(); |
|||
// Map<String, Object> result = new HashMap<>(); |
|||
|
|||
// try { |
|||
// // Construct the UPIC number based on parameters |
|||
// String upicNo = zone + "-" + division + "-" + billNo; |
|||
// if (subBill != null && !subBill.trim().isEmpty()) { |
|||
// upicNo += "-" + subBill; |
|||
// } |
|||
|
|||
// String sql = "select upicno, ownersname, address, c.mobileno, emailaddress, fam_card_no " + |
|||
// "from mv1@erp a, egpt_basic_property@erp b, egpt_address@erp c " + |
|||
// "where a.upicno = b.propertyid and a.upicno = ? and b.ADDRESSID = c.ID_ADDRESS"; |
|||
|
|||
// List<Map<String, Object>> data = oracleJdbcTemplate.queryForList(sql, upicNo); |
|||
|
|||
// if (!data.isEmpty()) { |
|||
// Map<String, Object> erpData = data.get(0); |
|||
// result.put("upicno", erpData.get("UPICNO")); |
|||
// result.put("ownersname", erpData.get("OWNERSNAME")); |
|||
// result.put("address", erpData.get("ADDRESS")); |
|||
// result.put("mobileno", erpData.get("MOBILENO")); |
|||
// result.put("emailaddress", erpData.get("EMAILADDRESS")); |
|||
// result.put("fam_card_no", erpData.get("FAM_CARD_NO")); |
|||
// result.put("Status", "Success"); |
|||
// result.put("Status Code", 200); |
|||
// result.put("Message", "ERP details fetched successfully"); |
|||
// response.put("Response", result); |
|||
// } else { |
|||
// result.put("Status", "Not Found"); |
|||
// result.put("Status Code", 404); |
|||
// result.put("Message", "No ERP details found for UPIC: " + upicNo); |
|||
// response.put("Response", result); |
|||
// } |
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// result.put("Status", "Error"); |
|||
// result.put("Status Code", 500); |
|||
// result.put("Message", "Error in fetching ERP details: " + e.getMessage()); |
|||
// response.put("Response", result); |
|||
// } |
|||
|
|||
// return response; |
|||
// } |
|||
|
|||
public Map<String, Object> getZoneMaster() { |
|||
Map<String, Object> response = new HashMap<>(); |
|||
try { |
|||
System.out.println("Executing getZoneMaster..."); |
|||
String sql = "SELECT id, zone_name FROM zone_master"; |
|||
System.out.println("SQL: " + sql); |
|||
List<Map<String, Object>> data = mysqlJdbcTemplate.queryForList(sql); |
|||
System.out.println("Data retrieved: " + data.size() + " records"); |
|||
response.put("data", data); |
|||
return response; |
|||
} catch (Exception e) { |
|||
System.err.println("Error in getZoneMaster: " + e.getMessage()); |
|||
e.printStackTrace(); |
|||
return new HashMap<>(); |
|||
} |
|||
} |
|||
|
|||
public Map<String, Object> getWardByZoneId(int zoneId) { |
|||
Map<String, Object> response = new HashMap<>(); |
|||
try { |
|||
System.out.println("Executing getWardByZoneId for zoneId: " + zoneId); |
|||
String sql = "SELECT wm.id, wm.ward_name FROM zone_master zm JOIN ward_master wm ON zm.id = wm.zone_id WHERE zm.id = ?"; |
|||
System.out.println("SQL: " + sql); |
|||
List<Map<String, Object>> data = mysqlJdbcTemplate.queryForList(sql, zoneId); |
|||
System.out.println("Data retrieved: " + data.size() + " records"); |
|||
response.put("data", data); |
|||
return response; |
|||
} catch (Exception e) { |
|||
System.err.println("Error in getWardByZoneId: " + e.getMessage()); |
|||
e.printStackTrace(); |
|||
return new HashMap<>(); |
|||
} |
|||
} |
|||
|
|||
// @Transactional("oraclePropertyTaxTransactionManager") |
|||
// public Map<String, Object> sendOTP(String mobile) { |
|||
// Map<String, Object> response = new HashMap<>(); |
|||
// Map<String, Object> result = new HashMap<>(); |
|||
// try { |
|||
// String checkSql = "SELECT COUNT(*) FROM coc_web.tbl_ptax_mob WHERE MOB = ?"; |
|||
// int count = oraclePropertyTaxJdbcTemplate.queryForObject(checkSql, Integer.class, mobile); |
|||
|
|||
// String smsIdSql = "SELECT coc_web.seq_sms_id.NEXTVAL as sms_id, ROUND(DBMS_RANDOM.VALUE(10000,99999)) as otp FROM dual"; |
|||
// Map<String, Object> smsData = oraclePropertyTaxJdbcTemplate.queryForMap(smsIdSql); |
|||
|
|||
// String smsId = smsData.get("SMS_ID").toString(); |
|||
// String otp = smsData.get("OTP").toString(); |
|||
|
|||
// String insertSql; |
|||
// if (count > 0) { |
|||
// insertSql = "UPDATE coc_web.tbl_ptax_mob SET OTP = ?, CDATE = SYSDATE WHERE MOB = ?"; |
|||
// oraclePropertyTaxJdbcTemplate.update(insertSql, otp, mobile); |
|||
// } else { |
|||
// insertSql = "INSERT INTO coc_web.tbl_ptax_mob (OTP, MOB, CDATE) VALUES (?, ?, SYSDATE)"; |
|||
// oraclePropertyTaxJdbcTemplate.update(insertSql, otp, mobile); |
|||
// } |
|||
|
|||
// String smsMessage = "Your OTP is " + otp + ".OTP is valid for the next 5 minutes.%0aBy%0aGreater Chennai Corporation."; |
|||
// smsMessage = smsMessage.replace(" ", "%20"); |
|||
|
|||
// String urlString = "http://10.1.0.23:8060/api/sendSMS_test?MobileNo=" + mobile + "&generatedToken=" + otp; |
|||
|
|||
// try { |
|||
// String logSql = "INSERT INTO coc_web.tbl_ptax_sms (SMS_ID, MESSAGE, MOBILE, SENT_DATE) VALUES (?, ?, ?, SYSDATE)"; |
|||
// oraclePropertyTaxJdbcTemplate.update(logSql, Integer.parseInt(smsId), smsMessage, mobile); |
|||
// } catch (Exception e) { |
|||
// System.out.println("SMS logging failed: " + e.getMessage()); |
|||
// } |
|||
|
|||
// RestTemplate restTemplate = new RestTemplate(); |
|||
// String smsResponse = restTemplate.getForObject(urlString, String.class); |
|||
|
|||
// result.put("mobile", mobile); |
|||
// result.put("otp", otp); |
|||
// result.put("sms_id", smsId); |
|||
// result.put("message", "OTP sent successfully"); |
|||
// result.put("sms_response", smsResponse); |
|||
// result.put("Status", "Success"); |
|||
// result.put("Status Code", 200); |
|||
// response.put("Response", result); |
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// result.put("Status", "Error"); |
|||
// result.put("Status Code", 500); |
|||
// result.put("Message", "Error in sending OTP: " + e.getMessage()); |
|||
// response.put("Response", result); |
|||
// } |
|||
// return response; |
|||
// } |
|||
|
|||
// @Transactional("oraclePropertyTaxTransactionManager") |
|||
// public Map<String, Object> verifyOTP(String mobile, String otp) { |
|||
// Map<String, Object> response = new HashMap<>(); |
|||
// Map<String, Object> result = new HashMap<>(); |
|||
// try { |
|||
// String verifySql = "SELECT COUNT(*) FROM coc_web.tbl_ptax_mob WHERE MOB = ? AND OTP = ?"; |
|||
// int count = oraclePropertyTaxJdbcTemplate.queryForObject(verifySql, Integer.class, mobile, otp); |
|||
|
|||
// if (count > 0) { |
|||
// result.put("mobile", mobile); |
|||
// result.put("otp", otp); |
|||
// result.put("message", "OTP Verified"); |
|||
// result.put("verified", true); |
|||
// result.put("Status", "Success"); |
|||
// result.put("Status Code", 200); |
|||
// response.put("Response", result); |
|||
// } else { |
|||
// result.put("mobile", mobile); |
|||
// result.put("otp", otp); |
|||
// result.put("message", "OTP Not Verified"); |
|||
// result.put("verified", false); |
|||
// result.put("Status", "Error"); |
|||
// result.put("Status Code", 400); |
|||
// response.put("Response", result); |
|||
// } |
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// result.put("Status", "Error"); |
|||
// result.put("Status Code", 500); |
|||
// result.put("Message", "Error in verifying OTP: " + e.getMessage()); |
|||
// response.put("Response", result); |
|||
// } |
|||
// return response; |
|||
// } |
|||
|
|||
// @Transactional("oraclePropertyTaxTransactionManager") |
|||
|
|||
// public Map<String, Object> submitData(String mobile, String zone, String division, String billNo, String subBill, String email, String famCardNo) { |
|||
// Map<String, Object> response = new HashMap<>(); |
|||
// Map<String, Object> result = new HashMap<>(); |
|||
|
|||
// try { |
|||
// // Construct property ID |
|||
// String propertyId = zone + "-" + division + "-" + billNo; |
|||
// if (subBill != null && !subBill.trim().isEmpty()) { |
|||
// propertyId += "-" + subBill; |
|||
// } |
|||
|
|||
// // First, get ERP details to fetch current mobile and email |
|||
// String erpSql = "select upicno, ownersname, address, c.mobileno, emailaddress, fam_card_no " + |
|||
// "from mv1@erp a, egpt_basic_property@erp b, egpt_address@erp c " + |
|||
// "where a.upicno = b.propertyid and a.upicno = ? and b.ADDRESSID = c.ID_ADDRESS"; |
|||
|
|||
// List<Map<String, Object>> erpData = oracleJdbcTemplate.queryForList(erpSql, propertyId); |
|||
|
|||
// if (!erpData.isEmpty()) { |
|||
// Map<String, Object> erpDetails = erpData.get(0); |
|||
// String erpMobile = (String) erpDetails.get("MOBILENO"); |
|||
// String erpEmail = (String) erpDetails.get("EMAILADDRESS"); |
|||
// String erpFamCardNo = (String) erpDetails.get("FAM_CARD_NO"); |
|||
|
|||
// // Get address ID from property using Property Tax database |
|||
// String addressIdSql = "SELECT addressid FROM egpt_basic_property@erp WHERE PROPERTYID = ?"; |
|||
// String addressId = oraclePropertyTaxJdbcTemplate.queryForObject(addressIdSql, String.class, propertyId); |
|||
|
|||
// if (addressId != null) { |
|||
// // Always update with the provided mobile and email values |
|||
// // Use provided values if they are not null/empty, otherwise use ERP values as fallback |
|||
// String finalMobile = (mobile != null && !mobile.trim().isEmpty()) ? mobile : erpMobile; |
|||
// String finalEmail = (email != null && !email.trim().isEmpty()) ? email : erpEmail; |
|||
// String finalFamCardNo = (famCardNo != null && !famCardNo.trim().isEmpty()) ? famCardNo : erpFamCardNo; |
|||
|
|||
// System.out.println("Updating address with:"); |
|||
// System.out.println("Address ID: " + addressId); |
|||
// System.out.println("Final Mobile: " + finalMobile); |
|||
// System.out.println("Final Email: " + finalEmail); |
|||
// System.out.println("Provided Mobile: " + mobile); |
|||
// System.out.println("Provided Email: " + email); |
|||
// System.out.println("ERP Mobile: " + erpMobile); |
|||
// System.out.println("ERP Email: " + erpEmail); |
|||
|
|||
// String updateAddressSql = "UPDATE egpt_address@erp SET MOBILENO = ?, EMAILADDRESS = ? WHERE ID_ADDRESS = ?"; |
|||
// int updateCount = oraclePropertyTaxJdbcTemplate.update(updateAddressSql, finalMobile, finalEmail, addressId); |
|||
// System.out.println("Update count: " + updateCount); |
|||
|
|||
// // Insert into history table |
|||
// // String historySql = "INSERT INTO coc_web.tbl_ptax_mob_history (ZONE, DIVISION, BILL_NO, SUB_BILL, MOB, EMAIL, CDATE) VALUES (?, ?, ?, ?, ?, ?, SYSDATE)"; |
|||
// // oraclePropertyTaxJdbcTemplate.update(historySql, zone, division, billNo, subBill, finalMobile, finalEmail); |
|||
|
|||
// // Log the submission |
|||
// // String logSql = "INSERT INTO coc_web.tbl_ptax_submission_log (MOB, ZONE, DIVISION, BILL_NO, SUB_BILL, EMAIL, CDATE) VALUES (?, ?, ?, ?, ?, ?, SYSDATE)"; |
|||
// // oraclePropertyTaxJdbcTemplate.update(logSql, finalMobile, zone, division, billNo, subBill, finalEmail); |
|||
|
|||
// // Clear OTP after successful submission |
|||
// String clearOtpSql = "UPDATE coc_web.tbl_ptax_mob SET OTP = NULL WHERE MOB = ?"; |
|||
// oraclePropertyTaxJdbcTemplate.update(clearOtpSql, finalMobile); |
|||
|
|||
// result.put("mobile", finalMobile); |
|||
// result.put("zone", zone); |
|||
// result.put("division", division); |
|||
// result.put("billNo", billNo); |
|||
// result.put("subBill", subBill); |
|||
// result.put("email", finalEmail); |
|||
// result.put("famCardNo", finalFamCardNo); |
|||
// result.put("message", "Data submitted successfully"); |
|||
// result.put("Status", "Success"); |
|||
// result.put("Status Code", 200); |
|||
// response.put("Response", result); |
|||
// } else { |
|||
// result.put("Status", "Error"); |
|||
// result.put("Status Code", 404); |
|||
// result.put("Message", "Property not found for ID: " + propertyId); |
|||
// response.put("Response", result); |
|||
// } |
|||
// } else { |
|||
// result.put("Status", "Error"); |
|||
// result.put("Status Code", 404); |
|||
// result.put("Message", "ERP details not found for ID: " + propertyId); |
|||
// response.put("Response", result); |
|||
// } |
|||
// } catch (Exception e) { |
|||
// e.printStackTrace(); |
|||
// result.put("Status", "Error"); |
|||
// result.put("Status Code", 500); |
|||
// result.put("Message", "Error in submitting data: " + e.getMessage()); |
|||
// response.put("Response", result); |
|||
// } |
|||
// return response; |
|||
// } |
|||
} |
|||
@ -0,0 +1,126 @@ |
|||
package com.gcc.restapiservices.servicesPdf.controller; |
|||
|
|||
import com.gcc.restapiservices.servicesPdf.service.ServicePdfService; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.core.io.Resource; |
|||
import org.springframework.core.io.UrlResource; |
|||
import org.springframework.http.HttpHeaders; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.MediaType; |
|||
import org.springframework.http.ResponseEntity; |
|||
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.net.MalformedURLException; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/api/servicespdf") |
|||
public class ServicePdfController { |
|||
|
|||
@Autowired |
|||
private ServicePdfService servicePdfService; |
|||
|
|||
@GetMapping("/get-services") |
|||
public ResponseEntity<List<Map<String, Object>>> listServices() { |
|||
List<Map<String, Object>> services = servicePdfService.findAllServices(); |
|||
if (services.isEmpty()) { |
|||
return ResponseEntity.noContent().build(); |
|||
} |
|||
return ResponseEntity.ok(services); |
|||
} |
|||
|
|||
@GetMapping("/get-types") |
|||
public ResponseEntity<List<Map<String, Object>>> getTypesByService( |
|||
@RequestParam("serviceId") int serviceId |
|||
) { |
|||
List<Map<String,Object>> types = servicePdfService.findTypesByService(serviceId); |
|||
if (types.isEmpty()) { |
|||
return ResponseEntity.noContent().build(); |
|||
} |
|||
return ResponseEntity.ok(types); |
|||
} |
|||
|
|||
@GetMapping("/download") |
|||
public ResponseEntity<?> downloadPdf( |
|||
@RequestParam(value = "serviceId") String serviceIdStr, |
|||
@RequestParam(value = "typeId") String typeIdStr |
|||
) { |
|||
if (serviceIdStr == null || serviceIdStr.isBlank()) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of( |
|||
"status", "error", |
|||
"message", "Missing required parameter: serviceId" |
|||
)); |
|||
} |
|||
if (typeIdStr == null || typeIdStr.isBlank()) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of( |
|||
"status", "error", |
|||
"message", "Missing required parameter: typeId" |
|||
)); |
|||
} |
|||
|
|||
if (!serviceIdStr.matches("\\d+")) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of( |
|||
"status", "error", |
|||
"message", "Invalid parameter: 'serviceId' must be an integer" |
|||
)); |
|||
} |
|||
if (!typeIdStr.matches("\\d+")) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of( |
|||
"status", "error", |
|||
"message", "Invalid parameter: 'typeId' must be an integer" |
|||
)); |
|||
} |
|||
|
|||
int serviceId = Integer.parseInt(serviceIdStr); |
|||
int typeId = Integer.parseInt(typeIdStr); |
|||
|
|||
try { |
|||
String pdfFullPath = servicePdfService.getPdfPathByServiceAndType(serviceId, typeId); |
|||
if (pdfFullPath == null) { |
|||
return ResponseEntity.status(404).body(Map.of( |
|||
"status", "error", |
|||
"message", "No PDF found for serviceId=" + serviceId + ", typeId=" + typeId |
|||
)); |
|||
} |
|||
|
|||
Resource resource = new UrlResource(pdfFullPath); |
|||
if (!resource.exists()) { |
|||
return ResponseEntity.status(404).body(Map.of( |
|||
"status", "error", |
|||
"message", "PDF file not found on server for serviceId=" + serviceId + |
|||
", typeId=" + typeId |
|||
)); |
|||
} |
|||
|
|||
String fileName = pdfFullPath.substring(pdfFullPath.lastIndexOf("/") + 1); |
|||
return ResponseEntity.ok(Map.of( |
|||
"status", "success", |
|||
"serviceId", serviceId, |
|||
"typeId", typeId, |
|||
"fileName", fileName, |
|||
"url", pdfFullPath |
|||
)); |
|||
|
|||
} catch (MalformedURLException e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(500).body(Map.of( |
|||
"status", "error", |
|||
"message", "Invalid URL format for PDF file." |
|||
)); |
|||
} |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,47 @@ |
|||
package com.gcc.restapiservices.servicesPdf.service; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
@Service |
|||
public class ServicePdfService { |
|||
|
|||
private final JdbcTemplate jdbcTemplate; |
|||
|
|||
@Autowired |
|||
public ServicePdfService(@Qualifier("servicesPdfJdbcTemplate") JdbcTemplate jdbcTemplate) { |
|||
this.jdbcTemplate = jdbcTemplate; |
|||
} |
|||
|
|||
public String getPdfPathByServiceAndType(int serviceId, int typeId) { |
|||
String sql = "SELECT pdf_file_name FROM service_pdf_mapping WHERE service_id = ?" + |
|||
" AND type_id = ? AND is_active = 1 AND is_delete = 0"; |
|||
try { |
|||
return jdbcTemplate.queryForObject(sql, new Object[]{serviceId, typeId}, String.class); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
System.err.println("Error fetching PDF path: " + e.getMessage()); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
public List<Map<String, Object>> findAllServices() { |
|||
String sql = "SELECT id, service_name FROM services_master"; |
|||
return jdbcTemplate.queryForList(sql); |
|||
} |
|||
|
|||
public List<Map<String,Object>> findTypesByService(int serviceId) { |
|||
String sql = |
|||
"SELECT id AS type_id, type_name, service_id " + |
|||
"FROM type_master " + |
|||
"WHERE service_id = ?"; |
|||
return jdbcTemplate.queryForList(sql, serviceId); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,59 @@ |
|||
//package com.gcc.restapiservices.swimmingpool.constants; |
|||
// |
|||
//import org.springframework.beans.factory.annotation.Value; |
|||
//import org.springframework.boot.context.properties.ConfigurationProperties; |
|||
//import org.springframework.stereotype.Component; |
|||
// |
|||
//@Component |
|||
//@ConfigurationProperties(prefix = "app") |
|||
//public class AppConfig { |
|||
// |
|||
// private String title; |
|||
// private String baseUrl; |
|||
// private String getOtpUrl; |
|||
// private String erpUrl; |
|||
// |
|||
// @Value("rzp_test_tDkHFEqWXmuEi8") |
|||
// private String keyId; |
|||
// |
|||
// public String getTitle() { |
|||
// return title; |
|||
// } |
|||
// |
|||
// public void setTitle(String title) { |
|||
// this.title = title; |
|||
// } |
|||
// |
|||
// public String getBaseUrl() { |
|||
// return baseUrl; |
|||
// } |
|||
// |
|||
// public void setBaseUrl(String baseUrl) { |
|||
// this.baseUrl = baseUrl; |
|||
// } |
|||
// |
|||
// public String getGetOtpUrl() { |
|||
// return getOtpUrl; |
|||
// } |
|||
// |
|||
// public void setGetOtpUrl(String getOtpUrl) { |
|||
// this.getOtpUrl = getOtpUrl; |
|||
// } |
|||
// |
|||
// public String getErpUrl() { |
|||
// return erpUrl; |
|||
// } |
|||
// |
|||
// public void setErpUrl(String erpUrl) { |
|||
// this.erpUrl = erpUrl; |
|||
// } |
|||
// |
|||
// public String getKeyId() { |
|||
// return keyId; |
|||
// } |
|||
// |
|||
// public void setKeyId(String keyId) { |
|||
// this.keyId = keyId; |
|||
// } |
|||
//} |
|||
// |
|||
@ -0,0 +1,14 @@ |
|||
package com.gcc.restapiservices.swimmingpool.constants; |
|||
|
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
public final class AppConstants { |
|||
// public static String key_id="rzp_live_ySI5Ns54Y7qOcJ"; |
|||
// public static String key_secret="Nwf1TjhUtaskof8vePkRR8Sb"; |
|||
|
|||
|
|||
//uncomment for testing payment |
|||
public static String key_id="rzp_test_tDkHFEqWXmuEi8"; |
|||
public static String key_secret="cBQUjMcKZ4J6vmOKSyNZ92py"; |
|||
} |
|||
@ -0,0 +1,380 @@ |
|||
//package com.gcc.restapiservices.swimmingpool.controller; |
|||
// |
|||
//import com.gcc.restapiservices.configuration.AppConfig; |
|||
//import com.gcc.restapiservices.swimmingpool.constants.AppConstants; |
|||
//import com.gcc.restapiservices.swimmingpool.service.PoolService; |
|||
//import com.razorpay.Order; |
|||
//import com.razorpay.RazorpayClient; |
|||
//import com.razorpay.RazorpayException; |
|||
//import jakarta.servlet.http.HttpServletRequest; |
|||
//import org.json.JSONObject; |
|||
//import org.springframework.beans.factory.annotation.Autowired; |
|||
//import org.springframework.dao.DataAccessException; |
|||
//import org.springframework.http.HttpStatus; |
|||
//import org.springframework.http.ResponseEntity; |
|||
//import org.springframework.web.bind.annotation.*; |
|||
// |
|||
//import java.time.LocalDate; |
|||
//import java.time.format.DateTimeFormatter; |
|||
//import java.time.format.DateTimeParseException; |
|||
//import java.util.List; |
|||
//import java.util.Map; |
|||
// |
|||
// |
|||
//@RequestMapping("/gccrestservices/api/swimmingpool") |
|||
//@RestController |
|||
//public class PoolApiController { |
|||
// |
|||
// @Autowired |
|||
// private PoolService poolService; |
|||
// @Autowired |
|||
// private AppConfig appConfig; |
|||
// |
|||
// @Autowired |
|||
// public AppConstants appConstants; |
|||
// |
|||
// @GetMapping("/slots") |
|||
// public ResponseEntity<?> getSlotsWithGender( |
|||
// @RequestParam String gender, |
|||
// @RequestParam("date") String date |
|||
// ) { |
|||
// // 1) validate gender up‐front |
|||
// if (!"1".equals(gender) && !"2".equals(gender)) { |
|||
// // returns 400 + { "message": "..." } |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of( |
|||
// "message", |
|||
// "Invalid gender: must be '2' (women) or '1' (men)" |
|||
// )); |
|||
// } |
|||
// |
|||
// try { |
|||
// // 2) validate date |
|||
// LocalDate.parse(date); |
|||
// |
|||
// // 3) run your normal query |
|||
// List<Map<String, Object>> slots = poolService.getSlotsWithGender(gender, date); |
|||
// return ResponseEntity.ok(slots); |
|||
// |
|||
// } catch (DateTimeParseException dtpe) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Invalid date format, expected YYYY-MM-DD")); |
|||
// } catch (DataAccessException dae) { |
|||
// return ResponseEntity |
|||
// .status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
// .body(Map.of("message", "Something went wrong on our end")); |
|||
// } |
|||
// } |
|||
// |
|||
// @GetMapping("/getBookedCountbySlot") |
|||
// public ResponseEntity<?> getBookedCountbySlot( |
|||
// @RequestParam("slotid") String slotid, |
|||
// @RequestParam("date") String date |
|||
// ) { |
|||
// try { |
|||
// // 1) Numeric check |
|||
// Integer.parseInt(slotid); |
|||
// |
|||
// // 2) Trim & parse with explicit ISO formatter |
|||
// String trimmed = date.trim(); |
|||
// LocalDate.parse(trimmed, DateTimeFormatter.ISO_LOCAL_DATE); |
|||
// |
|||
// // 3) Safe to call the service |
|||
// List<Map<String,Object>> bookingDetails = |
|||
// poolService.getBookedCountbySlot(slotid, trimmed); |
|||
// |
|||
// return ResponseEntity.ok(bookingDetails); |
|||
// |
|||
// } catch (NumberFormatException nfe) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Invalid slotid: must be a number")); |
|||
// |
|||
// } catch (DateTimeParseException dtpe) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Invalid date format, expected YYYY-MM-DD")); |
|||
// |
|||
// } catch (DataAccessException dae) { |
|||
// return ResponseEntity |
|||
// .status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
// .body(Map.of("message", "Something went wrong on our end")); |
|||
// } |
|||
// } |
|||
// |
|||
// |
|||
// @GetMapping("/calculatePayment") |
|||
// public ResponseEntity<?> calculatePayment( |
|||
// @RequestParam("adultsCount") String adultsCountStr, |
|||
// @RequestParam("kidsCount") String kidsCountStr, |
|||
// @RequestParam(value = "bookingMode", defaultValue = "ONLINE") |
|||
// String bookingMode |
|||
// ) { |
|||
// int adultsCount, kidsCount; |
|||
// // 1) parse and validate counts |
|||
// try { |
|||
// adultsCount = Integer.parseInt(adultsCountStr); |
|||
// kidsCount = Integer.parseInt(kidsCountStr); |
|||
// } catch (NumberFormatException nfe) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "adultsCount and kidsCount must be integers")); |
|||
// } |
|||
// |
|||
// // 2) validate bookingMode |
|||
// if (!"ONLINE".equalsIgnoreCase(bookingMode)) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Invalid bookingMode: must be 'ONLINE'")); |
|||
// } |
|||
// |
|||
// // 3) delegate to service |
|||
// Map<String, Object> result = poolService.calculatePayment(adultsCount, kidsCount, bookingMode); |
|||
// |
|||
// // 4) if service signals an error, propagate as 400 |
|||
// if (result.containsKey("error")) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", result.get("error"))); |
|||
// } |
|||
// |
|||
// // 5) successful response |
|||
// return ResponseEntity.ok(result); |
|||
// } |
|||
// |
|||
// |
|||
// @PostMapping("/saveTempBooking") |
|||
// public ResponseEntity<?> saveTempBooking( |
|||
// // HttpServletRequest request, |
|||
// @RequestParam String name, |
|||
// @RequestParam String mobileNo, |
|||
// @RequestParam String noofadults, |
|||
// @RequestParam String noofkids, |
|||
// @RequestParam String slotfromdate, |
|||
// @RequestParam String slottodate, |
|||
// @RequestParam String totalAmount, |
|||
// @RequestParam String bookingtype, |
|||
// @RequestParam String slotorder, |
|||
// @RequestParam String poolId, |
|||
// @RequestParam String bookingMode |
|||
// ) { |
|||
// // 1) Required-field checks |
|||
// if (name.isBlank()) { |
|||
// return ResponseEntity.badRequest().body(Map.of("message", "Missing required parameter: name")); |
|||
// } |
|||
// if (mobileNo.isBlank()) { |
|||
// return ResponseEntity.badRequest().body(Map.of("message", "Missing required parameter: mobileNo")); |
|||
// } |
|||
// |
|||
// // 2) mobileNo must be digits and at least 10 characters |
|||
// if (!mobileNo.matches("\\d{10,}")) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Invalid mobileNo: must be at least 10 digits")); |
|||
// } |
|||
// |
|||
// // 3) Numeric-only checks |
|||
// if (!noofadults.matches("\\d+")) { |
|||
// return ResponseEntity.badRequest().body(Map.of("message", "Invalid noofadults: must be a whole number")); |
|||
// } |
|||
// if (!noofkids.matches("\\d+")) { |
|||
// return ResponseEntity.badRequest().body(Map.of("message", "Invalid noofkids: must be a whole number")); |
|||
// } |
|||
// if (!slotorder.matches("\\d+")) { |
|||
// return ResponseEntity.badRequest().body(Map.of("message", "Invalid slotorder: must be a whole number")); |
|||
// } |
|||
// if (!poolId.matches("\\d+")) { |
|||
// return ResponseEntity.badRequest().body(Map.of("message", "Invalid poolId: must be a whole number")); |
|||
// } |
|||
// if (!totalAmount.matches("\\d+(\\.\\d+)?")) { |
|||
// return ResponseEntity.badRequest().body(Map.of("message", "Invalid totalAmount: must be a number")); |
|||
// } |
|||
// |
|||
// // 4) Date format |
|||
// try { |
|||
// LocalDate.parse(slotfromdate); |
|||
// LocalDate.parse(slottodate); |
|||
// } catch (DateTimeParseException e) { |
|||
// return ResponseEntity.badRequest().body(Map.of("message", "Invalid date format, expected YYYY-MM-DD")); |
|||
// } |
|||
// |
|||
// // 5) Booking‐mode |
|||
// if (!List.of("ONLINE", "OFFLINE").contains(bookingMode.toUpperCase())) { |
|||
// return ResponseEntity.badRequest().body(Map.of("message", "Invalid bookingMode: must be ONLINE or OFFLINE")); |
|||
// } |
|||
// |
|||
// // 6) Delegate to service |
|||
// try { |
|||
// String tempId = poolService.saveBooking( |
|||
// name, mobileNo, noofadults, noofkids, |
|||
// slotfromdate, slottodate, totalAmount, |
|||
// bookingtype, slotorder, poolId, bookingMode |
|||
// ); |
|||
// return ResponseEntity.ok(Map.of( |
|||
// "tempId", tempId, |
|||
// "message", "Your booking has been saved! Use this tempId to create your payment order." |
|||
// )); |
|||
// } |
|||
// catch (IllegalArgumentException iae) { |
|||
// // thrown by your service (e.g. mobile-too-long) |
|||
// return ResponseEntity.badRequest().body(Map.of("message", iae.getMessage())); |
|||
// } |
|||
// catch (DataAccessException dae) { |
|||
// return ResponseEntity |
|||
// .status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
// .body(Map.of("message", "Database error, please try again later")); |
|||
// } |
|||
// } |
|||
// |
|||
// |
|||
//// @PostMapping("/saveTempBooking") |
|||
//// public String saveTempBooking(HttpServletRequest request, |
|||
//// @RequestParam String name, |
|||
//// @RequestParam String mobileNo, |
|||
//// @RequestParam String noofadults, |
|||
//// @RequestParam String noofkids, |
|||
//// @RequestParam String slotfromdate, |
|||
//// @RequestParam String slottodate, |
|||
//// @RequestParam String totalAmount, |
|||
//// @RequestParam String bookingtype, |
|||
//// @RequestParam String slotorder, |
|||
//// @RequestParam String poolId, |
|||
//// @RequestParam String bookingMode) { |
|||
//// System.out.println("bookingMode: " + bookingMode); |
|||
//// return poolService.saveBooking(name,mobileNo,noofadults,noofkids,slotfromdate,slottodate,totalAmount, |
|||
//// bookingtype,slotorder,poolId,bookingMode).toString(); |
|||
//// } |
|||
// |
|||
// @PostMapping("/create_order") |
|||
// public ResponseEntity<?> createOrder(@RequestParam("tempid") String tempid) { |
|||
// // 1) Validate tempid is numeric |
|||
// int id; |
|||
// try { |
|||
// id = Integer.parseInt(tempid); |
|||
// } catch (NumberFormatException nfe) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Invalid tempid: must be a number")); |
|||
// } |
|||
// |
|||
// // 2) Fetch the temp booking; if none, 404 |
|||
// List<Map<String, Object>> tempBookingDetails = poolService.getTempBookingData(tempid); |
|||
// if (tempBookingDetails.isEmpty()) { |
|||
// return ResponseEntity |
|||
// .status(HttpStatus.NOT_FOUND) |
|||
// .body(Map.of("message", "No booking found for tempid: " + tempid)); |
|||
// } |
|||
// |
|||
// // 3) Build and call Razorpay |
|||
// Map<String, Object> tempInfo = tempBookingDetails.get(0); |
|||
// String amountStr = tempInfo.get("total_amount").toString(); |
|||
// double amount; |
|||
// try { |
|||
// amount = Double.parseDouble(amountStr); |
|||
// } catch (NumberFormatException nfe) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Stored total_amount is invalid: " + amountStr)); |
|||
// } |
|||
// |
|||
// try { |
|||
// var client = new RazorpayClient(appConstants.key_id, appConstants.key_secret); |
|||
// JSONObject opts = new JSONObject() |
|||
// .put("amount", (int)(amount * 100)) |
|||
// .put("currency", "INR"); |
|||
// Order order = client.orders.create(opts); |
|||
// return ResponseEntity.ok(order.toString()); |
|||
// |
|||
// } catch (RazorpayException re) { |
|||
// return ResponseEntity |
|||
// .status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
// .body(Map.of("message", "Failed to create Razorpay order", "error", re.getMessage())); |
|||
// } |
|||
// } |
|||
// |
|||
// @PostMapping("/Confirm") |
|||
// public ResponseEntity<?> confirmPayment( |
|||
// @RequestParam("id") String tempid, |
|||
// @RequestParam(name = "payment_id", required = false) String payId, |
|||
// @RequestParam("order_id") String orderId, |
|||
// @RequestParam("status") String status, |
|||
// @RequestParam(name = "source", defaultValue = "0") int source |
|||
// ) { |
|||
// |
|||
// if (source < 0 || source > 2) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message","Invalid source: must be 0 (web), 1 (counter) or 2 (whatsapp)")); |
|||
// } |
|||
// |
|||
// // 1) Required-param checks |
|||
// if (orderId.isBlank()) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Missing required parameter: order_id")); |
|||
// } |
|||
// if (status.isBlank()) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Missing required parameter: status")); |
|||
// } |
|||
// |
|||
// // 2) Numeric check on tempid |
|||
// int id; |
|||
// try { |
|||
// id = Integer.parseInt(tempid); |
|||
// } catch (NumberFormatException nfe) { |
|||
// return ResponseEntity |
|||
// .badRequest() |
|||
// .body(Map.of("message", "Invalid id: must be a number")); |
|||
// } |
|||
// |
|||
// // 3) Fetch the temp booking; 404 if not found |
|||
// List<Map<String, Object>> tempBookingDetails = poolService.getTempBookingData(tempid); |
|||
// if (tempBookingDetails.isEmpty()) { |
|||
// return ResponseEntity |
|||
// .status(HttpStatus.NOT_FOUND) |
|||
// .body(Map.of("message", "No booking found for id: " + tempid)); |
|||
// } |
|||
// |
|||
// // 4) Delegate to service |
|||
// try { |
|||
// poolService.savePaymentInfo( |
|||
// tempid, |
|||
// /*booking_type*/ tempBookingDetails.get(0).get("booking_type").toString(), |
|||
// /*cdate*/ tempBookingDetails.get(0).get("cdate").toString(), |
|||
// /*mobile_no*/ tempBookingDetails.get(0).get("mobile_no").toString(), |
|||
// /*name*/ tempBookingDetails.get(0).get("name").toString(), |
|||
// /*no_of_adults*/ tempBookingDetails.get(0).get("no_of_adults").toString(), |
|||
// /*no_of_kids*/ tempBookingDetails.get(0).get("no_of_kids").toString(), |
|||
// /*pool_id*/ tempBookingDetails.get(0).get("pool_id").toString(), |
|||
// /*slot_from_date*/tempBookingDetails.get(0).get("slot_from_date").toString(), |
|||
// /*slot_order*/ tempBookingDetails.get(0).get("slot_order").toString(), |
|||
// /*slot_to_date*/ tempBookingDetails.get(0).get("slot_to_date").toString(), |
|||
// /*totalAmount*/ tempBookingDetails.get(0).get("total_amount").toString(), |
|||
// payId, |
|||
// orderId, |
|||
// status, |
|||
// /*paymentdate*/ tempBookingDetails.get(0).get("cdate").toString(), |
|||
// tempid, |
|||
// /*booking_mode*/ tempBookingDetails.get(0).getOrDefault("booking_mode", "ONLINE").toString(), |
|||
// source |
|||
// ); |
|||
// return ResponseEntity.ok(Map.of( |
|||
// "message", |
|||
// "Your payment was successful and your booking is now confirmed! " + |
|||
// "You’ll receive the full details via WhatsApp and SMS shortly. " + |
|||
// "Please have your QR code ready at entry." |
|||
// )); |
|||
// } catch (Exception e) { |
|||
// // you could catch more specific exceptions if you want |
|||
// return ResponseEntity |
|||
// .status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
// .body(Map.of("message", "Failed to confirm payment", "error", e.getMessage())); |
|||
// } |
|||
// } |
|||
// |
|||
// |
|||
//} |
|||
@ -0,0 +1,485 @@ |
|||
package com.gcc.restapiservices.swimmingpool.controller; |
|||
|
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
import com.gcc.restapiservices.swimmingpool.constants.AppConstants; |
|||
import com.gcc.restapiservices.swimmingpool.service.SwimmingPoolService; |
|||
import com.gcc.restapiservices.swimmingpool.util.ApiResponse; |
|||
import com.razorpay.Order; |
|||
import com.razorpay.RazorpayClient; |
|||
import com.razorpay.RazorpayException; |
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
import org.json.JSONObject; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.dao.DataAccessException; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
import java.time.LocalDate; |
|||
import java.time.LocalTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.time.format.DateTimeFormatterBuilder; |
|||
import java.time.format.DateTimeParseException; |
|||
import java.time.format.ResolverStyle; |
|||
import java.util.*; |
|||
import java.util.stream.Collectors; |
|||
|
|||
|
|||
@RequestMapping("/gccrestservices/api/swimmingpool") |
|||
@RestController |
|||
public class SwimmingPoolApiController { |
|||
|
|||
@Autowired |
|||
private SwimmingPoolService swimmingPoolService; |
|||
|
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
|
|||
@Autowired |
|||
public AppConstants appConstants; |
|||
|
|||
@GetMapping("/slots") |
|||
public ResponseEntity<?> getSlotsWithGender( |
|||
@RequestParam String gender, |
|||
@RequestParam("date") String date) { |
|||
// 1) validate gender up‐front |
|||
if (!"1".equals(gender) && !"2".equals(gender)) { |
|||
// returns 400 + { "message": "..." } |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of( |
|||
"message", |
|||
"Invalid gender: must be '2' (women) or '1' (men)" |
|||
)); |
|||
} |
|||
|
|||
try { |
|||
// validate input date (still in yyyy-MM-dd format) |
|||
LocalDate parsedDate = LocalDate.parse(date, DateTimeFormatter.ISO_LOCAL_DATE); |
|||
|
|||
// query DB with yyyy-MM-dd |
|||
List<Map<String, Object>> slots = swimmingPoolService.getSlotsWithGender(gender, date); |
|||
|
|||
// format response as dd-MM-yyyy |
|||
String formattedDate = parsedDate.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")); |
|||
for (Map<String, Object> slot : slots) { |
|||
slot.put("slot_from_date", formattedDate); |
|||
} |
|||
|
|||
return ResponseEntity.ok(slots); |
|||
|
|||
} catch (DateTimeParseException dtpe) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of("message", "Invalid date format, expected YYYY-MM-DD")); |
|||
} catch (DataAccessException dae) { |
|||
return ResponseEntity |
|||
.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Map.of("message", "Something went wrong")); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getBookedCountbySlot") |
|||
public ResponseEntity<?> getBookedCountbySlot( |
|||
@RequestParam("slotid") String slotid, |
|||
@RequestParam("date") String date) { |
|||
try { |
|||
Integer.parseInt(slotid); |
|||
|
|||
String trimmed = date.trim(); |
|||
LocalDate.parse(trimmed, DateTimeFormatter.ISO_LOCAL_DATE); |
|||
|
|||
List<Map<String, Object>> bookingDetails = |
|||
swimmingPoolService.getBookedCountbySlot(slotid, trimmed); |
|||
|
|||
return ResponseEntity.ok(bookingDetails); |
|||
|
|||
} catch (NumberFormatException nfe) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of("message", "Invalid slotid: must be a number")); |
|||
|
|||
} catch (DateTimeParseException dtpe) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of("message", "Invalid date format, expected YYYY-MM-DD")); |
|||
|
|||
} catch (DataAccessException dae) { |
|||
return ResponseEntity |
|||
.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Map.of("message", "Something went wrong")); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getCountbydate") |
|||
public ResponseEntity<?> getBookedCountbySlot( |
|||
@RequestParam("date") LocalDate date, |
|||
@RequestParam(value = "slotid", required = false) String slotid, |
|||
@RequestParam(value = "gender", required = false) String gender |
|||
) { |
|||
// 0) Validate date |
|||
LocalDate today; |
|||
LocalDate parsedDate; |
|||
try { |
|||
today = LocalDate.now(); |
|||
parsedDate = LocalDate.parse(date.toString(), DateTimeFormatter.ISO_LOCAL_DATE); |
|||
} catch (DateTimeParseException e) { |
|||
return ResponseEntity.badRequest() |
|||
.body(Map.of("message","Invalid date format, expected YYYY-MM-DD")); |
|||
} |
|||
|
|||
// 1) Validate optional params |
|||
if (slotid != null && !slotid.isBlank() && !slotid.matches("\\d+")) { |
|||
return ResponseEntity.badRequest() |
|||
.body(Map.of("message","Invalid slotid: must be a number")); |
|||
} |
|||
if (gender != null && !gender.isBlank()) { |
|||
gender = gender.trim().toLowerCase(); |
|||
if (!gender.equals("men") && !gender.equals("women")) { |
|||
return ResponseEntity.badRequest() |
|||
.body(Map.of("message","Invalid gender: must be 'men' or 'women'")); |
|||
} |
|||
} |
|||
|
|||
// Women only at slot 4; if they asked for another slot + women: |
|||
if ("women".equals(gender) |
|||
&& slotid != null && !slotid.isBlank() |
|||
&& !"4".equals(slotid)) { |
|||
String msg = String.format( |
|||
"Women slots are only available for slotid 4, not slotid %s", |
|||
slotid |
|||
); |
|||
return ResponseEntity |
|||
.status(HttpStatus.NOT_FOUND) |
|||
.body(Map.of("message", msg)); |
|||
} |
|||
|
|||
|
|||
// 2) Fetch all availabilities |
|||
List<Map<String,Object>> slots = |
|||
swimmingPoolService.getAvailabilityByDate(parsedDate); |
|||
|
|||
// 3) Filter by slotid if present |
|||
if (slotid != null && !slotid.isBlank()) { |
|||
slots = slots.stream() |
|||
.filter(m -> slotid.equals(m.get("slot_order").toString())) |
|||
.collect(Collectors.toList()); |
|||
} |
|||
|
|||
// 4) If today, drop past slots |
|||
if (parsedDate.equals(today)) { |
|||
DateTimeFormatter fmt = new DateTimeFormatterBuilder() |
|||
.parseCaseInsensitive() |
|||
.appendPattern("h:mm a") |
|||
.toFormatter(Locale.ENGLISH) |
|||
.withResolverStyle(ResolverStyle.SMART); |
|||
LocalTime now = LocalTime.now(); |
|||
|
|||
slots = slots.stream() |
|||
.filter(m -> { |
|||
String start = ((String)m.get("slot_timing")) |
|||
.split("\\s*-\\s*")[0].trim(); |
|||
try { |
|||
return LocalTime.parse(start, fmt).isAfter(now); |
|||
} catch (DateTimeParseException ex) { |
|||
return true; |
|||
} |
|||
}) |
|||
.collect(Collectors.toList()); |
|||
} |
|||
|
|||
// 5) Filter by gender if present |
|||
if (gender != null && !gender.isBlank()) { |
|||
String finalGender = gender; |
|||
slots = slots.stream() |
|||
.filter(m -> finalGender.equalsIgnoreCase((String)m.get("gender"))) |
|||
.collect(Collectors.toList()); |
|||
} |
|||
|
|||
// 6) If still empty, generic 404 |
|||
if (slots.isEmpty()) { |
|||
String msg; |
|||
if (slotid != null && !slotid.isBlank()) { |
|||
msg = String.format( |
|||
"No slots available for slot %s%s on %s", |
|||
slotid, |
|||
(gender!=null? " and gender="+gender : ""), |
|||
date |
|||
); |
|||
} else { |
|||
msg = String.format( |
|||
"No slots available%s on %s", |
|||
(gender!=null? " for gender="+gender : ""), |
|||
date |
|||
); |
|||
} |
|||
return ResponseEntity |
|||
.status(HttpStatus.NOT_FOUND) |
|||
.body(Map.of("message", msg)); |
|||
} |
|||
|
|||
// 7) Otherwise OK |
|||
return ResponseEntity.ok(slots); |
|||
} |
|||
|
|||
|
|||
@GetMapping("/calculatePayment") |
|||
public ResponseEntity<?> calculatePayment( |
|||
@RequestParam("adultsCount") String adultsCountStr, |
|||
@RequestParam("kidsCount") String kidsCountStr, |
|||
@RequestParam(value = "bookingMode", defaultValue = "ONLINE") |
|||
String bookingMode) { |
|||
int adultsCount, kidsCount; |
|||
// 1) parse and validate counts |
|||
try { |
|||
adultsCount = Integer.parseInt(adultsCountStr); |
|||
kidsCount = Integer.parseInt(kidsCountStr); |
|||
} catch (NumberFormatException nfe) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of("message", "adultsCount and kidsCount must be integers")); |
|||
} |
|||
|
|||
// 2) validate bookingMode |
|||
if (!"ONLINE".equalsIgnoreCase(bookingMode)) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of("message", "Invalid bookingMode: must be 'ONLINE'")); |
|||
} |
|||
|
|||
// 3) delegate to service |
|||
Map<String, Object> result = swimmingPoolService.calculatePayment(adultsCount, kidsCount, bookingMode); |
|||
|
|||
// 4) if service signals an error, propagate as 400 |
|||
if (result.containsKey("error")) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of("message", result.get("error"))); |
|||
} |
|||
|
|||
// 5) successful response |
|||
return ResponseEntity.ok(result); |
|||
} |
|||
|
|||
|
|||
@PostMapping("/saveTempBooking") |
|||
public ResponseEntity<?> saveTempBooking( |
|||
HttpServletRequest request, |
|||
@RequestParam String name, |
|||
@RequestParam String mobileNo, |
|||
@RequestParam String noofadults, |
|||
@RequestParam String noofkids, |
|||
@RequestParam String slotfromdate, |
|||
@RequestParam String slottodate, |
|||
@RequestParam String totalAmount, |
|||
@RequestParam String bookingtype, |
|||
@RequestParam String slotorder, |
|||
@RequestParam String poolId, |
|||
@RequestParam String bookingMode) { |
|||
// 1) Required-field checks |
|||
if (name.isBlank()) { |
|||
return ResponseEntity.badRequest().body(Map.of("message", "Missing required parameter: name")); |
|||
} |
|||
if (mobileNo.isBlank()) { |
|||
return ResponseEntity.badRequest().body(Map.of("message", "Missing required parameter: mobileNo")); |
|||
} |
|||
|
|||
// 2) mobileNo must be digits and at least 10 characters |
|||
if (!mobileNo.matches("\\d{10,}")) { |
|||
return ResponseEntity |
|||
.badRequest() |
|||
.body(Map.of("message", "Invalid mobileNo: must be at least 10 digits")); |
|||
} |
|||
|
|||
// 3) Numeric-only checks |
|||
if (!noofadults.matches("\\d+")) { |
|||
return ResponseEntity.badRequest().body(Map.of("message", "Invalid noofadults: must be a whole number")); |
|||
} |
|||
if (!noofkids.matches("\\d+")) { |
|||
return ResponseEntity.badRequest().body(Map.of("message", "Invalid noofkids: must be a whole number")); |
|||
} |
|||
if (!slotorder.matches("\\d+")) { |
|||
return ResponseEntity.badRequest().body(Map.of("message", "Invalid slotorder: must be a whole number")); |
|||
} |
|||
if (!poolId.matches("\\d+")) { |
|||
return ResponseEntity.badRequest().body(Map.of("message", "Invalid poolId: must be a whole number")); |
|||
} |
|||
if (!totalAmount.matches("\\d+(\\.\\d+)?")) { |
|||
return ResponseEntity.badRequest().body(Map.of("message", "Invalid totalAmount: must be a number")); |
|||
} |
|||
|
|||
// 4) Date format |
|||
try { |
|||
LocalDate.parse(slotfromdate); |
|||
LocalDate.parse(slottodate); |
|||
} catch (DateTimeParseException e) { |
|||
return ResponseEntity.badRequest().body(Map.of("message", "Invalid date format, expected YYYY-MM-DD")); |
|||
} |
|||
|
|||
// 5) Booking‐mode |
|||
if (!List.of("ONLINE", "OFFLINE").contains(bookingMode.toUpperCase())) { |
|||
return ResponseEntity.badRequest().body(Map.of("message", "Invalid bookingMode: must be ONLINE or OFFLINE")); |
|||
} |
|||
|
|||
// 6) Delegate to service |
|||
try { |
|||
String tempId = swimmingPoolService.saveBooking( |
|||
name, mobileNo, noofadults, noofkids, |
|||
slotfromdate, slottodate, totalAmount, |
|||
bookingtype, slotorder, poolId, bookingMode |
|||
); |
|||
return ResponseEntity.ok(Map.of( |
|||
"tempId", tempId, |
|||
"message", "Your booking has been saved! Use this tempId to create your payment order." |
|||
)); |
|||
} catch (IllegalArgumentException iae) { |
|||
// thrown by your service (e.g. mobile-too-long) |
|||
return ResponseEntity.badRequest().body(Map.of("message", iae.getMessage())); |
|||
} catch (DataAccessException dae) { |
|||
return ResponseEntity |
|||
.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Map.of("message", "Database error, please try again later")); |
|||
} |
|||
} |
|||
|
|||
|
|||
@PostMapping("/create_order") |
|||
public ResponseEntity<?> createOrder(@RequestParam("tempid") String tempid) { |
|||
try { |
|||
Map<String, Object> tempBookingDetails = swimmingPoolService.getTempBookingData(tempid); |
|||
|
|||
if (tempBookingDetails != null && !tempBookingDetails.isEmpty()) { |
|||
String tempbookid = tempBookingDetails.get("temp_id").toString(); |
|||
String amount = tempBookingDetails.get("total_amount").toString(); |
|||
double amountDouble = 0.0; |
|||
|
|||
try { |
|||
amountDouble = Double.parseDouble(amount); |
|||
} catch (NumberFormatException e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Invalid amount format", null, HttpStatus.BAD_REQUEST.value()), HttpStatus.BAD_REQUEST); |
|||
} |
|||
|
|||
// Razorpay order creation |
|||
var client = new RazorpayClient(appConstants.key_id, appConstants.key_secret); |
|||
JSONObject options = new JSONObject(); |
|||
options.put("amount", amountDouble * 100); |
|||
options.put("currency", "INR"); |
|||
Order od = client.orders.create(options); |
|||
swimmingPoolService.saveorderLog(od.get("id").toString(), od.toString(), tempbookid); |
|||
|
|||
return ResponseEntity.ok(new ApiResponse("success", "Order created successfully", od.toJson().toMap(), HttpStatus.OK.value())); |
|||
} else { |
|||
return new ResponseEntity<>(new ApiResponse("error", "No data found for tempid: " + tempid, null, HttpStatus.NOT_FOUND.value()), HttpStatus.NOT_FOUND); |
|||
} |
|||
} catch (RazorpayException e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Razorpay error: " + e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} catch (Exception e) { |
|||
return new ResponseEntity<>(new ApiResponse("error", "Unexpected error: " + e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value()), HttpStatus.INTERNAL_SERVER_ERROR); |
|||
} |
|||
} |
|||
|
|||
@PostMapping("/Confirm") |
|||
public ResponseEntity<?> confirmPayment( |
|||
@RequestParam("id") String tempid, |
|||
@RequestParam(name = "source", defaultValue = "0") int source, |
|||
@RequestParam String orderid, |
|||
@RequestBody Map<String, Object> paymentResponse) { |
|||
|
|||
try { |
|||
return swimmingPoolService.processPaymentConfirmation(tempid, source, orderid, paymentResponse); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Map.of("message", "Failed to confirm payment", "error", e.getMessage())); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getbookings") |
|||
public ResponseEntity<?> getBookingByMobileNo(@RequestParam(value = "mobileNo", required = false) String mobileNo) { |
|||
|
|||
if (mobileNo == null || mobileNo.trim().isEmpty()) { |
|||
Map<String, String> errorResponse = new HashMap<>(); |
|||
errorResponse.put("status", "error"); |
|||
errorResponse.put("message", "Missing required parameter: mobileNo"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
if (!mobileNo.matches("\\d{10,}")) { |
|||
Map<String, String> errorResponse = new HashMap<>(); |
|||
errorResponse.put("status", "error"); |
|||
errorResponse.put("message", "Invalid mobile number. It should be at least 10 digits."); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
long mobile = Long.parseLong(mobileNo); |
|||
List<Map<String, Object>> bookings = swimmingPoolService.getBookingByMobileNo(mobile); |
|||
|
|||
if (bookings.isEmpty()) { |
|||
return ResponseEntity |
|||
.status(HttpStatus.NOT_FOUND) |
|||
.body(Map.of( |
|||
"status", "error", |
|||
"message", "No bookings found for mobileNo: " + mobileNo |
|||
)); |
|||
} |
|||
return ResponseEntity.ok(bookings); |
|||
} |
|||
|
|||
|
|||
@GetMapping(value = "/sendOTP") |
|||
public ResponseEntity<Map<String, Object>> sendOtp(HttpServletRequest request, @RequestParam String mobileNo) { |
|||
Map<String, Object> response = new HashMap<>(); |
|||
|
|||
if (mobileNo == null || mobileNo.isBlank()) { |
|||
response.put("status","error"); |
|||
response.put("message","Missing required parameter: mobileNo"); |
|||
return ResponseEntity.badRequest().body(response); |
|||
} |
|||
|
|||
if (!mobileNo.matches("\\d{10}")) { |
|||
response.put("status", "error"); |
|||
response.put("message", "Invalid mobile number. It should be 10 digits."); |
|||
return ResponseEntity.badRequest().body(response); |
|||
} |
|||
|
|||
List<?> bookingDetailsList = swimmingPoolService.findByMobileNo(Long.parseLong(mobileNo)); |
|||
if (bookingDetailsList == null || bookingDetailsList.isEmpty()) { |
|||
response.put("status", "error"); |
|||
response.put("message", "This number is not registered."); |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); |
|||
} |
|||
|
|||
int otp = new Random().nextInt(90000) + 10000; |
|||
String generatedToken = "Welcome to GCC! Your OTP for GCC Swimming Pool booking is " + otp; |
|||
String key = "pfTEYN6H"; |
|||
String urlString = appConfig.getGetOtpUrl() + "from=GCCCRP&key=" + key + "&sender=GCCCRP&to=" + mobileNo |
|||
+ "&body=" + generatedToken + "&entityid=1401572690000011081&templateid=1407172681010820867"; |
|||
|
|||
String bodyMessage; |
|||
try { |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
bodyMessage = restTemplate.getForObject(urlString, String.class); |
|||
} catch (Exception e) { |
|||
response.put("status", "error"); |
|||
response.put("message", "Failed to send OTP. Please try again."); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); |
|||
} |
|||
|
|||
// Save OTP in session |
|||
HttpSession session = request.getSession(); |
|||
session.setAttribute("otp", otp); |
|||
session.setAttribute("mobileNo", mobileNo); |
|||
|
|||
// Prepare response |
|||
response.put("status", "success"); |
|||
response.put("message", "OTP sent successfully"); |
|||
response.put("otp", otp); |
|||
// response.put("smsApiResponse", bodyMessage); |
|||
|
|||
return ResponseEntity.ok(response); |
|||
} |
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,525 @@ |
|||
//package com.gcc.restapiservices.swimmingpool.service; |
|||
// |
|||
//import org.springframework.beans.factory.annotation.Autowired; |
|||
//import org.springframework.beans.factory.annotation.Qualifier; |
|||
//import org.springframework.context.annotation.Configuration; |
|||
//import org.springframework.dao.DataAccessException; |
|||
//import org.springframework.http.HttpStatus; |
|||
//import org.springframework.http.ResponseEntity; |
|||
//import org.springframework.jdbc.core.JdbcTemplate; |
|||
//import org.springframework.jdbc.core.PreparedStatementCreator; |
|||
//import org.springframework.jdbc.support.GeneratedKeyHolder; |
|||
//import org.springframework.jdbc.support.KeyHolder; |
|||
//import org.springframework.stereotype.Service; |
|||
//import org.springframework.transaction.annotation.Transactional; |
|||
//import org.springframework.web.client.RestTemplate; |
|||
// |
|||
// |
|||
//import javax.sql.DataSource; |
|||
//import java.net.HttpURLConnection; |
|||
//import java.net.URL; |
|||
//import java.sql.Connection; |
|||
//import java.sql.Date; |
|||
//import java.sql.PreparedStatement; |
|||
//import java.sql.SQLException; |
|||
//import java.util.ArrayList; |
|||
//import java.util.HashMap; |
|||
//import java.util.List; |
|||
//import java.util.Map; |
|||
//import java.util.function.Function; |
|||
// |
|||
//@Service |
|||
//@Configuration |
|||
//public class PoolService { |
|||
// private JdbcTemplate jdbcTemplate; |
|||
// @Autowired |
|||
// private RestTemplate restTemplate; |
|||
// |
|||
// @Autowired |
|||
// public void setDataSource(@Qualifier("mysqlSwimmingpoolDataSource") DataSource activityDataSource) { |
|||
// // Initialize JdbcTemplate with the correct DataSource |
|||
// this.jdbcTemplate = new JdbcTemplate(activityDataSource); |
|||
// } |
|||
// |
|||
// public List<Map<String,Object>> getSlotsWithGender(String gender, String date) { |
|||
// String sql = " SELECT " + |
|||
// " st.slot_timing AS time, " + |
|||
// " CASE WHEN st.gender_avail = '1' THEN 'men' ELSE 'women' END AS gender, " + |
|||
// " st.id AS value, " + |
|||
// " ? AS slot_from_date " + |
|||
// " FROM slot_timing st " + |
|||
// " LEFT JOIN booking_details b " + |
|||
// " ON b.slot_order = st.slot_order " + |
|||
// " AND b.slot_from_date = ? " + |
|||
// " AND b.is_active = 1 " + |
|||
// " AND b.is_delete = 0 " + |
|||
// " WHERE st.gender_avail = ? " + |
|||
// " GROUP BY " + |
|||
// " st.slot_timing, st.gender_avail, st.id " + |
|||
// " ORDER BY st.id"; |
|||
// |
|||
// return jdbcTemplate.queryForList(sql, date, date, gender); |
|||
// } |
|||
// |
|||
// |
|||
// |
|||
// public List<Map<String, Object>> getBookedCountbySlot(String slotid, String date) { |
|||
// String sqlQuery = " SELECT " |
|||
// + " b.slot_from_date, " |
|||
// + " st.slot_timing, " |
|||
// + " CASE " |
|||
// + " WHEN b.slot_order = '4' THEN 'women' " |
|||
// + " ELSE 'men' " |
|||
// + " END AS gender, " |
|||
// + " 200 AS total_capacity, " |
|||
// + " 200 - (COALESCE(SUM(b.no_of_kids), 0) + COALESCE(SUM(b.no_of_adults), 0)) AS available_slots, " |
|||
// + " (COALESCE(SUM(b.no_of_kids), 0) + COALESCE(SUM(b.no_of_adults), 0)) AS booked_slots " |
|||
// + " FROM " |
|||
// + " booking_details b " |
|||
// + " JOIN " |
|||
// + " slot_timing st ON b.slot_order = st.slot_order " |
|||
// + " WHERE " |
|||
// + " b.is_active = 1 " |
|||
// + " AND b.is_delete = 0 " |
|||
// + " AND b.slot_from_date = ? " |
|||
// + " AND b.slot_order = ? " |
|||
// + " GROUP BY " |
|||
// + " b.slot_from_date, " |
|||
// + " b.slot_order, " |
|||
// + " st.slot_timing "; |
|||
// |
|||
// System.out.println(sqlQuery); |
|||
// |
|||
// List<Map<String, Object>> bookingDetails = jdbcTemplate.queryForList(sqlQuery, date, slotid); |
|||
// |
|||
// // If no data is returned, create a default response with 0 values |
|||
// if (bookingDetails.isEmpty()) { |
|||
// Map<String, Object> defaultData = new HashMap<>(); |
|||
// defaultData.put("slot_from_date", date); |
|||
// defaultData.put("slot_timing", "Not Available"); // Set a default value for slot_timing |
|||
// defaultData.put("slot_order", slotid); |
|||
// defaultData.put("total_capacity", 200); // Set total capacity to 200 |
|||
// defaultData.put("available_slots", 200); // If no bookings, all slots are available |
|||
// defaultData.put("booked_slots", 0); // No slots booked if no data |
|||
// bookingDetails.add(defaultData); |
|||
// } |
|||
// |
|||
// return bookingDetails; |
|||
// } |
|||
// |
|||
// |
|||
// public Map<String, Object> calculatePayment(int adultsCount, int kidsCount, String bookingMode) { |
|||
// int adultRate = 0; |
|||
// int kidRate = 0; |
|||
// |
|||
// // Rates based on booking mode |
|||
// if ("ONLINE".equalsIgnoreCase(bookingMode)) { |
|||
// adultRate = 45; |
|||
// kidRate = 25; |
|||
// } else { |
|||
// // Return an error response if booking mode is invalid |
|||
// Map<String, Object> errorResponse = new HashMap<>(); |
|||
// errorResponse.put("error", "Invalid booking mode"); |
|||
// return errorResponse; |
|||
// } |
|||
// |
|||
// // Calculate total amount |
|||
// int totalAdultsAmount = adultsCount * adultRate; |
|||
// int totalKidsAmount = kidsCount * kidRate; |
|||
// int totalAmount = totalAdultsAmount + totalKidsAmount; |
|||
// |
|||
// // Prepare the response map |
|||
// Map<String, Object> response = new HashMap<>(); |
|||
// response.put("adultsCount", adultsCount); |
|||
// response.put("kidsCount", kidsCount); |
|||
// response.put("totalAdultsAmount", totalAdultsAmount); |
|||
// response.put("totalKidsAmount", totalKidsAmount); |
|||
// response.put("totalAmount", totalAmount); |
|||
// |
|||
// return response; |
|||
// } |
|||
// |
|||
// public String saveBooking( |
|||
// String name, |
|||
// String mobileNo, |
|||
// String noofadults, |
|||
// String noofkids, |
|||
// String slotfromdate, |
|||
// String slottodate, |
|||
// String totalAmount, |
|||
// String bookingtype, |
|||
// String slotorder, |
|||
// String poolId, |
|||
// String bookingMode) { |
|||
// |
|||
// // helper to take everything before the first comma |
|||
// Function<String, String> firstData = s -> { |
|||
// if (s == null) return null; |
|||
// int idx = s.indexOf(','); |
|||
// return idx < 0 ? s.trim() : s.substring(0, idx).trim(); |
|||
// }; |
|||
// |
|||
// // sanitize EVERY incoming param |
|||
// name = firstData.apply(name); |
|||
// mobileNo = firstData.apply(mobileNo); |
|||
// noofadults = firstData.apply(noofadults); |
|||
// noofkids = firstData.apply(noofkids); |
|||
// slotfromdate = firstData.apply(slotfromdate); |
|||
// slottodate = firstData.apply(slottodate); |
|||
// totalAmount = firstData.apply(totalAmount); |
|||
// bookingtype = firstData.apply(bookingtype); |
|||
// slotorder = firstData.apply(slotorder); |
|||
// poolId = firstData.apply(poolId); |
|||
// bookingMode = firstData.apply(bookingMode); |
|||
// |
|||
// if (mobileNo.length() > 20) { |
|||
// throw new IllegalArgumentException("Mobile number too long: " + mobileNo); |
|||
// } |
|||
// |
|||
// // parse the numeric/date fields |
|||
// int adultsCount = Integer.parseInt(noofadults); |
|||
// int kidsCount = Integer.parseInt(noofkids); |
|||
// int pool = Integer.parseInt(poolId); |
|||
// java.sql.Date fromDate = java.sql.Date.valueOf(slotfromdate); |
|||
// java.sql.Date toDate = java.sql.Date.valueOf(slottodate); |
|||
// |
|||
// String sql = " INSERT INTO temp_booking_details( booking_type, mobile_no, name, no_of_adults, no_of_kids, pool_id, slot_from_date, slot_order, slot_to_date, total_amount, booking_mode) VALUES (?,?,?,?,?,?,?,?,?,?,?) "; |
|||
// |
|||
// KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
// String finalBookingtype = bookingtype; |
|||
// String finalMobileNo = mobileNo; |
|||
// String finalName = name; |
|||
// String finalSlotorder = slotorder; |
|||
// String finalTotalAmount = totalAmount; |
|||
// String finalBookingMode = bookingMode; |
|||
// int rows = jdbcTemplate.update(con -> { |
|||
// PreparedStatement ps = con.prepareStatement(sql, new String[]{"temp_id"}); |
|||
// ps.setString(1, finalBookingtype); |
|||
// ps.setString(2, finalMobileNo); |
|||
// ps.setString(3, finalName); |
|||
// ps.setInt (4, adultsCount); |
|||
// ps.setInt (5, kidsCount); |
|||
// ps.setInt (6, pool); |
|||
// ps.setDate (7, fromDate); |
|||
// ps.setString(8, finalSlotorder); |
|||
// ps.setDate (9, toDate); |
|||
// ps.setString(10, finalTotalAmount); |
|||
// ps.setString(11, finalBookingMode); |
|||
// return ps; |
|||
// }, keyHolder); |
|||
// |
|||
// if (rows == 0) { |
|||
// throw new RuntimeException("Insert returned 0 rows affected"); |
|||
// } |
|||
// return keyHolder.getKey().toString(); |
|||
// } |
|||
// |
|||
// public List<Map<String, Object>> getTempBookingData(String tempid) { |
|||
// String sqlQuery = "SELECT * FROM temp_booking_details WHERE temp_id='"+tempid+"'"; |
|||
// List<Map<String, Object>> tempBookingDetails = jdbcTemplate.queryForList(sqlQuery); |
|||
// return tempBookingDetails; |
|||
// } |
|||
// |
|||
// public String savePaymentInfo( |
|||
// String tempId, |
|||
// String booking_type, |
|||
// String cdate, |
|||
// String mobile_no, |
|||
// String name, |
|||
// String no_of_adults, |
|||
// String no_of_kids, |
|||
// String pool_id, |
|||
// String slot_from_date, |
|||
// String slot_order, |
|||
// String slot_to_date, |
|||
// String totalAmount, |
|||
// String payment_id, |
|||
// String payment_orderid, |
|||
// String payment_status, |
|||
// String paymentdate, |
|||
// String uniqueid, |
|||
// String booking_mode, |
|||
// int source ) { |
|||
// |
|||
// String lastInsertId = "0"; |
|||
// |
|||
// String sqlQuery = "INSERT INTO `payment`(`amount`, `mobno`, `order_id`, `payment_id`, `payment_status`, `paymentdate`, `uniqueid`) " |
|||
// + "VALUES (?,?,?,?,?,?,?)"; |
|||
// |
|||
// KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
// |
|||
// try { |
|||
// int affectedRows = jdbcTemplate.update(new PreparedStatementCreator() { |
|||
// @Override |
|||
// public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { |
|||
// PreparedStatement ps = connection.prepareStatement(sqlQuery, new String[]{"temp_id"}); |
|||
// ps.setString(1, totalAmount); |
|||
// ps.setString(2, mobile_no); |
|||
// ps.setString(3, payment_orderid); |
|||
// ps.setString(4, payment_id); |
|||
// ps.setString(5, payment_status); |
|||
// ps.setString(6, paymentdate); |
|||
// ps.setString(7, uniqueid); |
|||
// return ps; |
|||
// } |
|||
// }, keyHolder); |
|||
// |
|||
// if (affectedRows > 0) { |
|||
// Number generatedId = keyHolder.getKey(); |
|||
// lastInsertId = generatedId.toString(); |
|||
// |
|||
// lastInsertId = saveBookingInfo(tempId, booking_type, cdate, mobile_no, |
|||
// name, |
|||
// no_of_adults, |
|||
// no_of_kids, |
|||
// pool_id, |
|||
// slot_from_date, |
|||
// slot_order, |
|||
// slot_to_date, |
|||
// totalAmount, |
|||
// payment_id, |
|||
// payment_orderid, |
|||
// payment_status, |
|||
// paymentdate, |
|||
// uniqueid, |
|||
// booking_mode, |
|||
// source); |
|||
// |
|||
// |
|||
// // Define the time slots in Java |
|||
// List<Map<String, Object>> daySlots = new ArrayList<>(); |
|||
// |
|||
// daySlots.add(Map.of("time", "5:30 AM - 6:30 AM", "gender", "men", "value", 0)); |
|||
// daySlots.add(Map.of("time", "5:30 AM - 6:30 AM", "gender", "men", "value", 1)); |
|||
// daySlots.add(Map.of("time", "6:30 AM - 7:30 AM", "gender", "men", "value", 2)); |
|||
// daySlots.add(Map.of("time", "7:30 AM - 8:30 AM", "gender", "men", "value", 3)); |
|||
// daySlots.add(Map.of("time", "8:30 AM - 9:30 AM", "gender", "women", "value", 4)); |
|||
// daySlots.add(Map.of("time", "9:30 AM - 10:30 AM", "gender", "men", "value", 5)); |
|||
// daySlots.add(Map.of("time", "10:30 AM - 11:30 AM", "gender", "men", "value", 6)); |
|||
// daySlots.add(Map.of("time", "11:30 AM - 12:30 PM", "gender", "men", "value", 7)); |
|||
// daySlots.add(Map.of("time", "12:30 PM - 1:30 PM", "gender", "men", "value", 8)); |
|||
// daySlots.add(Map.of("time", "1:30 PM - 2:30 PM", "gender", "men", "value", 9)); |
|||
// daySlots.add(Map.of("time", "2:30 PM - 3:30 PM", "gender", "men", "value", 10)); |
|||
// daySlots.add(Map.of("time", "3:30 PM - 4:30 PM", "gender", "men", "value", 11)); |
|||
// daySlots.add(Map.of("time", "4:30 PM - 5:30 PM", "gender", "men", "value", 12)); |
|||
// daySlots.add(Map.of("time", "5:30 PM - 6:30 PM", "gender", "men", "value", 13)); |
|||
// daySlots.add(Map.of("time", "6:30 PM - 7:30 PM", "gender", "men", "value", 14)); |
|||
// |
|||
// // Convert the list to an array |
|||
// Map<String, Object>[] slotArray = daySlots.toArray(new Map[0]); |
|||
// |
|||
// // Access the element in the array |
|||
// int slotOrder = Integer.parseInt(slot_order); |
|||
// Map<String, Object> slot = slotArray[slotOrder]; // Index 1 (second element) |
|||
// String time = (String) slot.get("time"); |
|||
// String gender = (String) slot.get("gender"); |
|||
// |
|||
// |
|||
// int adult = Integer.parseInt(no_of_adults); |
|||
// int kids = Integer.parseInt(no_of_kids); |
|||
// int totalCount = adult + kids; |
|||
// String count = String.valueOf(totalCount); |
|||
// |
|||
// //balaji |
|||
// //sendWhatsapp("h2YjFNcJ", mobile_no, slot_from_date, time, count, totalAmount,payment_orderid); |
|||
// //System.out.println(mobile_no); |
|||
// //"9444173345" |
|||
// sendWhatsapp("h2YjFNcJ",mobile_no, slot_from_date, time, count, totalAmount,payment_orderid); |
|||
// sendSMS("h2YjFNcJ", mobile_no, slot_from_date, time, count, totalAmount,payment_orderid); |
|||
// |
|||
// } else { |
|||
// System.out.println("Error on temp save!"); |
|||
// } |
|||
// } catch (DataAccessException e) { |
|||
// System.out.println("Data Access Exception:"); |
|||
// Throwable rootCause = e.getMostSpecificCause(); |
|||
// if (rootCause instanceof SQLException) { |
|||
// SQLException sqlException = (SQLException) rootCause; |
|||
// System.out.println("SQL State: " + sqlException.getSQLState()); |
|||
// System.out.println("Error Code: " + sqlException.getErrorCode()); |
|||
// System.out.println("Message: " + sqlException.getMessage()); |
|||
// } else { |
|||
// System.out.println("Message: " + rootCause.getMessage()); |
|||
// } |
|||
// } |
|||
// |
|||
// return lastInsertId; |
|||
// } |
|||
// |
|||
// public String saveBookingInfo( |
|||
// String tempId, |
|||
// String booking_type, |
|||
// String cdate, |
|||
// String mobile_no, |
|||
// String name, |
|||
// String no_of_adults, |
|||
// String no_of_kids, |
|||
// String pool_id, |
|||
// String slot_from_date, |
|||
// String slot_order, |
|||
// String slot_to_date, |
|||
// String totalAmount, |
|||
// String payment_id, |
|||
// String payment_orderid, |
|||
// String payment_status, |
|||
// String paymentdate, |
|||
// String uniqueid, |
|||
// String booking_mode, |
|||
// int source) { |
|||
// |
|||
// String lastInsertId = "0"; |
|||
// |
|||
// String sqlQuery = "INSERT INTO `booking_details`(`booking_mode`, `booking_type`, `cdate`, " |
|||
// + "`mobile_no`, `name`, `no_of_adults`, `no_of_kids`, `pool_id`, `slot_from_date`, " |
|||
// + "`slot_order`, `slot_to_date`, `total_amount`,`orderid`, `adults_remaining`,`kids_remaining`,`source`) " |
|||
// + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; |
|||
// |
|||
// KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
// System.out.println("booking_mode:" + booking_mode); |
|||
// try { |
|||
// int affectedRows = jdbcTemplate.update(new PreparedStatementCreator() { |
|||
// @Override |
|||
// public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { |
|||
// PreparedStatement ps = connection.prepareStatement(sqlQuery, new String[]{"id"}); |
|||
// ps.setString(1, booking_mode); |
|||
// ps.setString(2, booking_type); |
|||
// ps.setString(3, cdate); |
|||
// ps.setString(4, mobile_no); |
|||
// ps.setString(5, name); |
|||
// ps.setString(6, no_of_adults); |
|||
// ps.setString(7, no_of_kids); |
|||
// ps.setString(8, pool_id); |
|||
// ps.setString(9, slot_from_date); |
|||
// ps.setString(10, slot_order); |
|||
// ps.setString(11, slot_to_date); |
|||
// ps.setString(12, totalAmount); |
|||
// ps.setString(13, payment_orderid); |
|||
// ps.setString(14, no_of_adults); |
|||
// ps.setString(15, no_of_kids); |
|||
// ps.setString(16, String.valueOf(source)); |
|||
// return ps; |
|||
// } |
|||
// }, keyHolder); |
|||
// |
|||
// if (affectedRows > 0) { |
|||
// Number generatedId = keyHolder.getKey(); |
|||
// lastInsertId = generatedId.toString(); |
|||
// } else { |
|||
// System.out.println("Error on temp save!"); |
|||
// } |
|||
// } catch (DataAccessException e) { |
|||
// System.out.println("Data Access Exception:"); |
|||
// Throwable rootCause = e.getMostSpecificCause(); |
|||
// if (rootCause instanceof SQLException) { |
|||
// SQLException sqlException = (SQLException) rootCause; |
|||
// System.out.println("SQL State: " + sqlException.getSQLState()); |
|||
// System.out.println("Error Code: " + sqlException.getErrorCode()); |
|||
// System.out.println("Message: " + sqlException.getMessage()); |
|||
// } else { |
|||
// System.out.println("Message: " + rootCause.getMessage()); |
|||
// } |
|||
// } |
|||
// |
|||
// return lastInsertId; |
|||
// } |
|||
// |
|||
// public String sendWhatsapp(String password, String mobileno,String date, String slot, String count, String amount, String orderid) { |
|||
// System.out.println("trying send whatsapp to :"+ mobileno); |
|||
// |
|||
// String[] parts = slot.split("-"); |
|||
// |
|||
// // Trim the parts to remove leading and trailing spaces |
|||
// String startTime = parts[0].trim(); |
|||
// String endTime = parts[1].trim(); |
|||
// // Manually replace characters in startTime and endTime to URL-encoded equivalents |
|||
// String formattedStartTime = startTime.replace(":", "%3A").replace(" ", "+"); |
|||
// String formattedEndTime = endTime.replace(":", "%3A").replace(" ", "+"); |
|||
// |
|||
// String tamilurl = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password="+password+"&send_to="+mobileno+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%BE%E0%AE%A9+%E0%AE%B5%E0%AE%BE%E0%AE%9F%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88%E0%AE%AF%E0%AE%BE%E0%AE%B3%E0%AE%B0%E0%AF%87%2C+%0A%E0%AE%AA%E0%AF%86%E0%AE%B0%E0%AF%81%E0%AE%A8%E0%AE%95%E0%AE%B0+%E0%AE%9A%E0%AF%86%E0%AE%A9%E0%AF%8D%E0%AE%A9%E0%AF%88+%E0%AE%AE%E0%AE%BE%E0%AE%A8%E0%AE%95%E0%AE%B0%E0%AE%BE%E0%AE%9F%E0%AF%8D%E0%AE%9A%E0%AE%BF+%E0%AE%A4%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%88+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AF%81%E0%AE%9F%E0%AE%A9%E0%AF%8D+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BF%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AE%A4%E0%AF%81.++%0A%0A%E0%AE%8E%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AE%A4%E0%AF%81+%E0%AE%AE%E0%AF%86%E0%AE%B0%E0%AE%BF%E0%AE%A9%E0%AE%BE++%E0%AE%A8%E0%AF%80%E0%AE%9A%E0%AF%8D%E0%AE%9A%E0%AE%B2%E0%AF%8D++%E0%AE%95%E0%AF%81%E0%AE%B3%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%A9%E0%AF%88+"+count+"+%E0%AE%8E%E0%AE%A3%E0%AF%8D%E0%AE%A3%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88+%E0%AE%A8%E0%AE%AA%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%81%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%81+"+date+"+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AF%81+++%E0%AE%A8%E0%AF%87%E0%AE%B0+%E0%AE%87%E0%AE%9F%E0%AF%88%E0%AE%B5%E0%AF%86%E0%AE%B3%E0%AE%BF+"+formattedStartTime+"+-+"+formattedEndTime+"++%E0%AE%B2%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%8A%E0%AE%B3%E0%AF%8D%E0%AE%B3+%E0%AE%AE%E0%AF%81%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%A4%E0%AE%BF%E0%AE%B5%E0%AF%81+%E0%AE%9A%E0%AF%86%E0%AE%AF%E0%AF%8D%E0%AE%A4%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AF%80%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D.+%0A%E0%AE%87%E0%AE%A4%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BE%E0%AE%A9+%E0%AE%95%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AE%A3%E0%AE%AE%E0%AF%8D+%2A%E0%AE%B0%E0%AF%82%2A.+"+amount+"+%E0%AE%AA%E0%AF%86%E0%AE%B1%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AE%A4%E0%AF%81.++%0A%0A%E0%AE%87%E0%AE%A9%E0%AE%BF%E0%AE%AE%E0%AF%88%E0%AE%AF%E0%AE%BE%E0%AE%A9+%E0%AE%A8%E0%AF%80%E0%AE%9A%E0%AF%8D%E0%AE%9A%E0%AE%B2%E0%AF%8D+%E0%AE%85%E0%AE%A9%E0%AF%81%E0%AE%AA%E0%AE%B5%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%A9%E0%AF%88+%E0%AE%AA%E0%AF%86%E0%AE%B1%E0%AF%8D%E0%AE%B1%E0%AF%81+%E0%AE%AE%E0%AE%95%E0%AE%BF%E0%AE%B4%E0%AF%81%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D%F0%9F%98%8A%0A%0A%E0%AE%A8%E0%AF%81%E0%AE%B4%E0%AF%88%E0%AE%B5%E0%AE%BE%E0%AE%AF%E0%AE%BF%E0%AE%B2%E0%AE%BF%E0%AE%B2%E0%AF%8D+%E0%AE%89%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+QR+%E0%AE%95%E0%AF%81%E0%AE%B1%E0%AE%BF%E0%AE%AF%E0%AF%80%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%88+%E0%AE%95%E0%AE%BE%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D%F0%9F%91%87&isTemplate=true&buttonUrlParam=swimmingpool%2FbookingQRCode%3Forderid%3D"+orderid; |
|||
// //bookingQRCode?orderid=order_P6UOll7Kn1UfrV |
|||
// String response = restTemplate.getForObject(tamilurl, String.class); |
|||
// System.out.println("response: "+ response); |
|||
// |
|||
// try{ |
|||
// HttpURLConnection connection =null; |
|||
// |
|||
// URL url = new URL(tamilurl); |
|||
// connection = (HttpURLConnection) url.openConnection(); |
|||
// connection.setRequestMethod("GET"); |
|||
// |
|||
// int responseCode = connection.getResponseCode(); |
|||
// response=responseCode+""; |
|||
// System.out.println("Response Code: " + responseCode); |
|||
// |
|||
// }catch (Exception e){ |
|||
// e.printStackTrace(); |
|||
// } |
|||
// sendenglishWhatsapp(password, mobileno,date, slot, count, amount, orderid); |
|||
// return response; |
|||
// } |
|||
// |
|||
// public String sendenglishWhatsapp(String password, String mobileno,String date, String slot, String count, String amount, String orderid) { |
|||
// System.out.println("trying send whatsapp to :"+ mobileno); |
|||
// |
|||
// String[] parts = slot.split("-"); |
|||
// |
|||
// // Trim the parts to remove leading and trailing spaces |
|||
// String startTime = parts[0].trim(); |
|||
// String endTime = parts[1].trim(); |
|||
// // Manually replace characters in startTime and endTime to URL-encoded equivalents |
|||
// String formattedStartTime = startTime.replace(":", "%3A").replace(" ", "+"); |
|||
// String formattedEndTime = endTime.replace(":", "%3A").replace(" ", "+"); |
|||
// |
|||
// String tamilurl = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password="+password+"&send_to="+mobileno+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Dear+Patron+%2C+%0AWelcome+to+Greater+Chennai+Corporation.++%0A%0AYou+have+booked+our+Marina+swimming+pool+for+"+count+"+number+of+persons+on+"+date+"+at+time+slot+"+formattedStartTime+"+-+"+formattedEndTime+"+.%0AThe+fee+for+the+slot+is+%2ARs%2A.+"+amount+"+received.+%0A%0AEnjoy+a+pleasant+swimming+experience%F0%9F%98%8A%0A%0APlease+show+your+QR+Code+at+Entrance%F0%9F%91%87&isTemplate=true&buttonUrlParam=swimmingpool%2FbookingQRCode%3Forderid%3D"+orderid; |
|||
// //bookingQRCode?orderid=order_P6UOll7Kn1UfrV |
|||
// String response = restTemplate.getForObject(tamilurl, String.class); |
|||
// System.out.println("response: "+ response); |
|||
// |
|||
// try{ |
|||
// HttpURLConnection connection =null; |
|||
// |
|||
// URL url = new URL(tamilurl); |
|||
// connection = (HttpURLConnection) url.openConnection(); |
|||
// connection.setRequestMethod("GET"); |
|||
// |
|||
// int responseCode = connection.getResponseCode(); |
|||
// response=responseCode+""; |
|||
// System.out.println("Response Code: " + responseCode); |
|||
// |
|||
// }catch (Exception e){ |
|||
// e.printStackTrace(); |
|||
// } |
|||
// |
|||
// return response; |
|||
// } |
|||
// |
|||
// public String sendSMS(String password, String mobileno,String date, String slot, String count, String amount, String orderid) { |
|||
// |
|||
// String note=""; |
|||
// String[] parts = slot.split("-"); |
|||
// |
|||
// // Trim the parts to remove leading and trailing spaces |
|||
// String startTime = parts[0].trim(); |
|||
// String endTime = parts[1].trim(); |
|||
// |
|||
// String SMSTEXT = "அன்பான வாடிக்கையாளரே, பெருநகர சென்னை மாநகராட்சி தங்களை அன்புடன் வரவேற்கின்றது. எங்களது மெரினா நீச்சல் குளத்தினை "+count+" எண்ணிக்கை நபர்களுக்கு "+date+" அன்று நேர இடைவெளி "+startTime+" முதல் "+endTime+" வரை பயன்படுத்திக்கொள்ள முன்பதிவு செய்துள்ளீர்கள். இதற்கான கட்டணம் ரூ. "+amount+" பெறப்பட்டுள்ளது. இனிமையான நீச்சல் அனுபவத்தினை பெற்று மகிழுங்கள். "+note+" நுழைவாயிலில் உங்கள் QR குறியீட்டை காட்டுங்கள்"; |
|||
// |
|||
// String urlString="https://tmegov.onex-aura.com/api/sms?key=mRSm0zym&to="+mobileno+"&from=GCCCRP&body="+SMSTEXT+"&entityid=1401572690000011081&templateid=1407172667016050918"; |
|||
// //System.out.println(urlString); |
|||
// |
|||
// RestTemplate restTemplate = new RestTemplate(); |
|||
// String Response = restTemplate.getForObject(urlString, String.class); |
|||
// |
|||
// String SMSEnglish = "Dear Patron, Welcome to Greater Chennai Corporation. You have booked our Marina swimming pool for "+count+" Nos of persons on "+date+" at time interval "+startTime+" to "+endTime+" . The fee for the slot is Rs. "+amount+" Received. Enjoy a pleasant swimming experience. "+note+" Please Show your QR Code at Entrance"; |
|||
// |
|||
// String urlString2="https://tmegov.onex-aura.com/api/sms?key=mRSm0zym&to="+mobileno+"&from=GCCCRP&body="+SMSEnglish+"&entityid=1401572690000011081&templateid=1407172666960216321"; |
|||
// //System.out.println(urlString); |
|||
// |
|||
// RestTemplate restTemplate2 = new RestTemplate(); |
|||
// String Response2 = restTemplate2.getForObject(urlString2, String.class); |
|||
// |
|||
// return Response2; |
|||
// } |
|||
// |
|||
// |
|||
//} |
|||
@ -0,0 +1,778 @@ |
|||
package com.gcc.restapiservices.swimmingpool.service; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.dao.DataAccessException; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.jdbc.core.PreparedStatementCreator; |
|||
import org.springframework.jdbc.support.GeneratedKeyHolder; |
|||
import org.springframework.jdbc.support.KeyHolder; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; // For converting JSON map to String |
|||
|
|||
|
|||
import javax.sql.DataSource; |
|||
import java.net.HttpURLConnection; |
|||
import java.net.URL; |
|||
import java.sql.Connection; |
|||
import java.sql.Date; |
|||
import java.sql.PreparedStatement; |
|||
import java.sql.SQLException; |
|||
import java.time.LocalDate; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.time.format.DateTimeParseException; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.function.Function; |
|||
|
|||
@Service |
|||
@Configuration |
|||
public class SwimmingPoolService { |
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
@Autowired |
|||
private RestTemplate restTemplate; |
|||
|
|||
private final ObjectMapper objectMapper = new ObjectMapper(); |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlSwimmingpoolDataSource") DataSource activityDataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(activityDataSource); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getSlotsWithGender(String gender, String date) { |
|||
String sql = " SELECT " + |
|||
"st.slot_timing AS time, " + |
|||
"CASE WHEN st.gender_avail = '1' THEN 'men' ELSE 'women' END AS gender, " + |
|||
"st.id AS value, " + |
|||
"? AS slot_from_date " + |
|||
"FROM slot_timing st " + |
|||
"LEFT JOIN booking_details b " + |
|||
"ON b.slot_order = st.slot_order " + |
|||
"AND b.slot_from_date = ? " + |
|||
"AND b.is_active = 1 " + |
|||
"AND b.is_delete = 0 " + |
|||
"WHERE st.gender_avail = ? " + |
|||
"GROUP BY " + |
|||
"st.slot_timing, st.gender_avail, st.id " + |
|||
"ORDER BY st.id"; |
|||
|
|||
return jdbcTemplate.queryForList(sql, date, date, gender); |
|||
} |
|||
|
|||
|
|||
public List<Map<String, Object>> getBookedCountbySlot(String slotid, String date) { |
|||
String sqlQuery = "SELECT " |
|||
+ " b.slot_from_date, " |
|||
+ " st.slot_timing, " |
|||
+ " CASE " |
|||
+ " WHEN b.slot_order = '4' THEN 'women' " |
|||
+ " ELSE 'men' " |
|||
+ " END AS gender, " |
|||
+ " 200 AS total_capacity, " |
|||
+ " 200 - (COALESCE(SUM(b.no_of_kids), 0) + COALESCE(SUM(b.no_of_adults), 0)) AS available_slots, " |
|||
+ " (COALESCE(SUM(b.no_of_kids), 0) + COALESCE(SUM(b.no_of_adults), 0)) AS booked_slots " |
|||
+ "FROM " |
|||
+ " booking_details b " |
|||
+ "JOIN " |
|||
+ " slot_timing st ON b.slot_order = st.slot_order " |
|||
+ "WHERE " |
|||
+ " b.is_active = 1 " |
|||
+ " AND b.is_delete = 0 " |
|||
+ " AND b.slot_from_date = ? " |
|||
+ " AND b.slot_order = ? " |
|||
+ "GROUP BY " |
|||
+ " b.slot_from_date, " |
|||
+ " b.slot_order, " |
|||
+ " st.slot_timing;"; |
|||
|
|||
List<Map<String, Object>> bookingDetails = jdbcTemplate.queryForList(sqlQuery, date, slotid); |
|||
|
|||
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); |
|||
|
|||
for (Map<String, Object> row : bookingDetails) { |
|||
Object dateObj = row.get("slot_from_date"); |
|||
if (dateObj != null) { |
|||
try { |
|||
LocalDate parsed = LocalDate.parse(dateObj.toString(), inputFormatter); |
|||
row.put("slot_from_date", parsed.format(outputFormatter)); |
|||
} catch (DateTimeParseException dtpe) { |
|||
System.err.println("Date parsing failed for value: " + dateObj + " | Error: " + dtpe.getMessage()); |
|||
// You could also add an explicit fallback: |
|||
row.put("slot_from_date", dateObj.toString()); |
|||
} catch (Exception ex) { |
|||
System.err.println("Unexpected error while formatting date: " + ex.getMessage()); |
|||
row.put("slot_from_date", dateObj.toString()); |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
// If no data is returned, create a default response with 0 values |
|||
if (bookingDetails.isEmpty()) { |
|||
Map<String, Object> defaultData = new HashMap<>(); |
|||
// Convert incoming date (yyyy-MM-dd) into dd-MM-yyyy |
|||
LocalDate parsed = LocalDate.parse(date, inputFormatter); |
|||
defaultData.put("slot_from_date", parsed.format(outputFormatter)); |
|||
defaultData.put("slot_timing", "Not Available"); |
|||
defaultData.put("slot_order", slotid); |
|||
String genderVal = "4".equals(slotid) ? "women" : "men"; |
|||
defaultData.put("gender", genderVal); |
|||
defaultData.put("total_capacity", 200); |
|||
defaultData.put("available_slots", 200); |
|||
defaultData.put("booked_slots", 0); |
|||
bookingDetails.add(defaultData); |
|||
} |
|||
|
|||
return bookingDetails; |
|||
} |
|||
|
|||
|
|||
public List<Map<String,Object>> getAvailabilityByDate(LocalDate date) { |
|||
String sql = """ |
|||
SELECT |
|||
st.slot_order, |
|||
st.slot_timing, |
|||
CASE WHEN st.slot_order = 4 THEN 'women' ELSE 'men' END AS gender, |
|||
200 AS total_capacity, |
|||
COALESCE(b.booked_slots, 0) AS booked_slots, |
|||
200 - COALESCE(b.booked_slots, 0) AS available_slots |
|||
FROM slot_timing st |
|||
LEFT JOIN ( |
|||
SELECT |
|||
slot_order, |
|||
SUM(no_of_adults + no_of_kids) AS booked_slots |
|||
FROM booking_details |
|||
WHERE slot_from_date = ? |
|||
AND is_active = 1 |
|||
AND is_delete = 0 |
|||
GROUP BY slot_order |
|||
) b ON CAST(st.slot_order AS UNSIGNED) = CAST(b.slot_order AS UNSIGNED) |
|||
ORDER BY CAST(st.slot_order AS UNSIGNED); |
|||
"""; |
|||
|
|||
// use the ISO date string for the JDBC call |
|||
List<Map<String,Object>> list = |
|||
jdbcTemplate.queryForList(sql, date.toString()); |
|||
|
|||
return list; |
|||
} |
|||
|
|||
|
|||
public Map<String, Object> calculatePayment(int adultsCount, int kidsCount, String bookingMode) { |
|||
int adultRate = 0; |
|||
int kidRate = 0; |
|||
|
|||
// Rates based on booking mode |
|||
if ("ONLINE".equalsIgnoreCase(bookingMode)) { |
|||
adultRate = 45; |
|||
kidRate = 25; |
|||
} else { |
|||
// Return an error response if booking mode is invalid |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Invalid booking mode"); |
|||
return errorResponse; |
|||
} |
|||
|
|||
// Calculate total amount |
|||
int totalAdultsAmount = adultsCount * adultRate; |
|||
int totalKidsAmount = kidsCount * kidRate; |
|||
int totalAmount = totalAdultsAmount + totalKidsAmount; |
|||
|
|||
// Prepare the response map |
|||
Map<String, Object> response = new HashMap<>(); |
|||
response.put("adultsCount", adultsCount); |
|||
response.put("kidsCount", kidsCount); |
|||
response.put("totalAdultsAmount", totalAdultsAmount); |
|||
response.put("totalKidsAmount", totalKidsAmount); |
|||
response.put("totalAmount", totalAmount); |
|||
|
|||
return response; |
|||
} |
|||
|
|||
public String saveBooking( |
|||
String name, |
|||
String mobileNo, |
|||
String noofadults, |
|||
String noofkids, |
|||
String slotfromdate, |
|||
String slottodate, |
|||
String totalAmount, |
|||
String bookingtype, |
|||
String slotorder, |
|||
String poolId, |
|||
String bookingMode) { |
|||
|
|||
// helper to take everything before the first comma |
|||
Function<String, String> firstData = s -> { |
|||
if (s == null) return null; |
|||
int idx = s.indexOf(','); |
|||
return idx < 0 ? s.trim() : s.substring(0, idx).trim(); |
|||
}; |
|||
|
|||
// sanitize EVERY incoming param |
|||
name = firstData.apply(name); |
|||
mobileNo = firstData.apply(mobileNo); |
|||
noofadults = firstData.apply(noofadults); |
|||
noofkids = firstData.apply(noofkids); |
|||
slotfromdate = firstData.apply(slotfromdate); |
|||
slottodate = firstData.apply(slottodate); |
|||
totalAmount = firstData.apply(totalAmount); |
|||
bookingtype = firstData.apply(bookingtype); |
|||
slotorder = firstData.apply(slotorder); |
|||
poolId = firstData.apply(poolId); |
|||
bookingMode = firstData.apply(bookingMode); |
|||
|
|||
if (mobileNo.length() > 20) { |
|||
throw new IllegalArgumentException("Mobile number too long: " + mobileNo); |
|||
} |
|||
|
|||
// parse the numeric/date fields |
|||
int adultsCount = Integer.parseInt(noofadults); |
|||
int kidsCount = Integer.parseInt(noofkids); |
|||
int pool = Integer.parseInt(poolId); |
|||
Date fromDate = Date.valueOf(slotfromdate); |
|||
Date toDate = Date.valueOf(slottodate); |
|||
|
|||
String sql = " INSERT INTO temp_booking_details( " + |
|||
"booking_type, mobile_no, name, " + |
|||
"no_of_adults, no_of_kids, pool_id, " + |
|||
"slot_from_date, slot_order, slot_to_date, " + |
|||
"total_amount, booking_mode" + |
|||
") VALUES (?,?,?,?,?,?,?,?,?,?,?) "; |
|||
|
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
String finalBookingtype = bookingtype; |
|||
String finalMobileNo = mobileNo; |
|||
String finalName = name; |
|||
String finalSlotorder = slotorder; |
|||
String finalTotalAmount = totalAmount; |
|||
String finalBookingMode = bookingMode; |
|||
int rows = jdbcTemplate.update(con -> { |
|||
PreparedStatement ps = con.prepareStatement(sql, new String[]{"temp_id"}); |
|||
ps.setString(1, finalBookingtype); |
|||
ps.setString(2, finalMobileNo); |
|||
ps.setString(3, finalName); |
|||
ps.setInt(4, adultsCount); |
|||
ps.setInt(5, kidsCount); |
|||
ps.setInt(6, pool); |
|||
ps.setDate(7, fromDate); |
|||
ps.setString(8, finalSlotorder); |
|||
ps.setDate(9, toDate); |
|||
ps.setString(10, finalTotalAmount); |
|||
ps.setString(11, finalBookingMode); |
|||
return ps; |
|||
}, keyHolder); |
|||
|
|||
if (rows == 0) { |
|||
throw new RuntimeException("Insert returned 0 rows affected"); |
|||
} |
|||
return keyHolder.getKey().toString(); |
|||
} |
|||
|
|||
public Map<String, Object> getTempBookingData(String tempid) { |
|||
String sqlQuery = "SELECT * FROM temp_booking_details WHERE temp_id='" + tempid + "'"; |
|||
Map<String, Object> tempBookingDetails = jdbcTemplate.queryForMap(sqlQuery); |
|||
return tempBookingDetails; |
|||
} |
|||
|
|||
public String savePaymentInfo( |
|||
String tempId, |
|||
String booking_type, |
|||
String cdate, |
|||
String mobile_no, |
|||
String name, |
|||
String no_of_adults, |
|||
String no_of_kids, |
|||
String pool_id, |
|||
String slot_from_date, |
|||
String slot_order, |
|||
String slot_to_date, |
|||
String totalAmount, |
|||
String payment_id, |
|||
String payment_orderid, |
|||
String payment_status, |
|||
String paymentdate, |
|||
String uniqueid, |
|||
String booking_mode, |
|||
String reference_id, |
|||
int source) { |
|||
|
|||
String lastInsertId = "0"; |
|||
|
|||
String sqlQuery = "INSERT INTO `payment`(`amount`, `mobno`, `order_id`, `payment_id`, `reference_id`,`payment_status`, `paymentdate`, `uniqueid`) " |
|||
+ "VALUES (?,?,?,?,?,?,?,?)"; |
|||
|
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
|
|||
try { |
|||
int affectedRows = jdbcTemplate.update(new PreparedStatementCreator() { |
|||
@Override |
|||
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { |
|||
PreparedStatement ps = connection.prepareStatement(sqlQuery, new String[]{"temp_id"}); |
|||
ps.setString(1, totalAmount); |
|||
ps.setString(2, mobile_no); |
|||
ps.setString(3, payment_orderid); |
|||
ps.setString(4, payment_id); |
|||
ps.setString(5, reference_id); |
|||
ps.setString(6, payment_status); |
|||
ps.setString(7, paymentdate); |
|||
ps.setString(8, uniqueid); |
|||
return ps; |
|||
} |
|||
}, keyHolder); |
|||
|
|||
if (affectedRows > 0) { |
|||
Number generatedId = keyHolder.getKey(); |
|||
lastInsertId = generatedId.toString(); |
|||
|
|||
lastInsertId = saveBookingInfo(tempId, booking_type, cdate, mobile_no, |
|||
name, |
|||
no_of_adults, |
|||
no_of_kids, |
|||
pool_id, |
|||
slot_from_date, |
|||
slot_order, |
|||
slot_to_date, |
|||
totalAmount, |
|||
payment_id, |
|||
payment_orderid, |
|||
payment_status, |
|||
paymentdate, |
|||
uniqueid, |
|||
booking_mode, |
|||
source); |
|||
|
|||
|
|||
// Define the time slots in Java |
|||
List<Map<String, Object>> daySlots = new ArrayList<>(); |
|||
|
|||
daySlots.add(Map.of("time", "5:30 AM - 6:30 AM", "gender", "men", "value", 0)); |
|||
daySlots.add(Map.of("time", "5:30 AM - 6:30 AM", "gender", "men", "value", 1)); |
|||
daySlots.add(Map.of("time", "6:30 AM - 7:30 AM", "gender", "men", "value", 2)); |
|||
daySlots.add(Map.of("time", "7:30 AM - 8:30 AM", "gender", "men", "value", 3)); |
|||
daySlots.add(Map.of("time", "8:30 AM - 9:30 AM", "gender", "women", "value", 4)); |
|||
daySlots.add(Map.of("time", "9:30 AM - 10:30 AM", "gender", "men", "value", 5)); |
|||
daySlots.add(Map.of("time", "10:30 AM - 11:30 AM", "gender", "men", "value", 6)); |
|||
daySlots.add(Map.of("time", "11:30 AM - 12:30 PM", "gender", "men", "value", 7)); |
|||
daySlots.add(Map.of("time", "12:30 PM - 1:30 PM", "gender", "men", "value", 8)); |
|||
daySlots.add(Map.of("time", "1:30 PM - 2:30 PM", "gender", "men", "value", 9)); |
|||
daySlots.add(Map.of("time", "2:30 PM - 3:30 PM", "gender", "men", "value", 10)); |
|||
daySlots.add(Map.of("time", "3:30 PM - 4:30 PM", "gender", "men", "value", 11)); |
|||
daySlots.add(Map.of("time", "4:30 PM - 5:30 PM", "gender", "men", "value", 12)); |
|||
daySlots.add(Map.of("time", "5:30 PM - 6:30 PM", "gender", "men", "value", 13)); |
|||
daySlots.add(Map.of("time", "6:30 PM - 7:30 PM", "gender", "men", "value", 14)); |
|||
|
|||
// Convert the list to an array |
|||
Map<String, Object>[] slotArray = daySlots.toArray(new Map[0]); |
|||
|
|||
// Access the element in the array |
|||
int slotOrder = Integer.parseInt(slot_order); |
|||
Map<String, Object> slot = slotArray[slotOrder]; // Index 1 (second element) |
|||
String time = (String) slot.get("time"); |
|||
String gender = (String) slot.get("gender"); |
|||
|
|||
|
|||
int adult = Integer.parseInt(no_of_adults); |
|||
int kids = Integer.parseInt(no_of_kids); |
|||
int totalCount = adult + kids; |
|||
String count = String.valueOf(totalCount); |
|||
|
|||
//balaji |
|||
//sendWhatsapp("h2YjFNcJ", mobile_no, slot_from_date, time, count, totalAmount,payment_orderid); |
|||
//System.out.println(mobile_no); |
|||
//"9444173345" |
|||
sendWhatsapp("h2YjFNcJ", mobile_no, slot_from_date, time, count, totalAmount, payment_orderid); |
|||
sendSMS("h2YjFNcJ", mobile_no, slot_from_date, time, count, totalAmount, payment_orderid); |
|||
|
|||
} else { |
|||
System.out.println("Error on temp save!"); |
|||
} |
|||
} catch (DataAccessException e) { |
|||
System.out.println("Data Access Exception:"); |
|||
Throwable rootCause = e.getMostSpecificCause(); |
|||
if (rootCause instanceof SQLException) { |
|||
SQLException sqlException = (SQLException) rootCause; |
|||
System.out.println("SQL State: " + sqlException.getSQLState()); |
|||
System.out.println("Error Code: " + sqlException.getErrorCode()); |
|||
System.out.println("Message: " + sqlException.getMessage()); |
|||
} else { |
|||
System.out.println("Message: " + rootCause.getMessage()); |
|||
} |
|||
} |
|||
|
|||
return lastInsertId; |
|||
} |
|||
|
|||
public String saveBookingInfo( |
|||
String tempId, |
|||
String booking_type, |
|||
String cdate, |
|||
String mobile_no, |
|||
String name, |
|||
String no_of_adults, |
|||
String no_of_kids, |
|||
String pool_id, |
|||
String slot_from_date, |
|||
String slot_order, |
|||
String slot_to_date, |
|||
String totalAmount, |
|||
String payment_id, |
|||
String payment_orderid, |
|||
String payment_status, |
|||
String paymentdate, |
|||
String uniqueid, |
|||
String booking_mode, |
|||
int source) { |
|||
|
|||
String lastInsertId = "0"; |
|||
|
|||
String sqlQuery = "INSERT INTO `booking_details`(`booking_mode`, `booking_type`, `cdate`, " |
|||
+ "`mobile_no`, `name`, `no_of_adults`, `no_of_kids`, `pool_id`, `slot_from_date`, " |
|||
+ "`slot_order`, `slot_to_date`, `total_amount`,`orderid`, `adults_remaining`,`kids_remaining`,`source`)" |
|||
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; |
|||
|
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
System.out.println("booking_mode:" + booking_mode); |
|||
try { |
|||
int affectedRows = jdbcTemplate.update(new PreparedStatementCreator() { |
|||
@Override |
|||
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { |
|||
PreparedStatement ps = connection.prepareStatement(sqlQuery, new String[]{"id"}); |
|||
ps.setString(1, booking_mode); |
|||
ps.setString(2, booking_type); |
|||
ps.setString(3, cdate); |
|||
ps.setString(4, mobile_no); |
|||
ps.setString(5, name); |
|||
ps.setString(6, no_of_adults); |
|||
ps.setString(7, no_of_kids); |
|||
ps.setString(8, pool_id); |
|||
ps.setString(9, slot_from_date); |
|||
ps.setString(10, slot_order); |
|||
ps.setString(11, slot_to_date); |
|||
ps.setString(12, totalAmount); |
|||
ps.setString(13, payment_orderid); |
|||
ps.setString(14, no_of_adults); |
|||
ps.setString(15, no_of_kids); |
|||
ps.setString(16, String.valueOf(source)); |
|||
return ps; |
|||
} |
|||
}, keyHolder); |
|||
|
|||
if (affectedRows > 0) { |
|||
Number generatedId = keyHolder.getKey(); |
|||
lastInsertId = generatedId.toString(); |
|||
} else { |
|||
System.out.println("Error on temp save!"); |
|||
} |
|||
} catch (DataAccessException e) { |
|||
System.out.println("Data Access Exception:"); |
|||
Throwable rootCause = e.getMostSpecificCause(); |
|||
if (rootCause instanceof SQLException) { |
|||
SQLException sqlException = (SQLException) rootCause; |
|||
System.out.println("SQL State: " + sqlException.getSQLState()); |
|||
System.out.println("Error Code: " + sqlException.getErrorCode()); |
|||
System.out.println("Message: " + sqlException.getMessage()); |
|||
} else { |
|||
System.out.println("Message: " + rootCause.getMessage()); |
|||
} |
|||
} |
|||
|
|||
return lastInsertId; |
|||
} |
|||
|
|||
public String sendWhatsapp(String password, String mobileno, String date, String slot, String count, String amount, String orderid) { |
|||
System.out.println("trying send whatsapp to :" + mobileno); |
|||
|
|||
String[] parts = slot.split("-"); |
|||
|
|||
// Trim the parts to remove leading and trailing spaces |
|||
String startTime = parts[0].trim(); |
|||
String endTime = parts[1].trim(); |
|||
// Manually replace characters in startTime and endTime to URL-encoded equivalents |
|||
String formattedStartTime = startTime.replace(":", "%3A").replace(" ", "+"); |
|||
String formattedEndTime = endTime.replace(":", "%3A").replace(" ", "+"); |
|||
|
|||
String tamilurl = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=" + password + "&send_to=" + mobileno + "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%BE%E0%AE%A9+%E0%AE%B5%E0%AE%BE%E0%AE%9F%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88%E0%AE%AF%E0%AE%BE%E0%AE%B3%E0%AE%B0%E0%AF%87%2C+%0A%E0%AE%AA%E0%AF%86%E0%AE%B0%E0%AF%81%E0%AE%A8%E0%AE%95%E0%AE%B0+%E0%AE%9A%E0%AF%86%E0%AE%A9%E0%AF%8D%E0%AE%A9%E0%AF%88+%E0%AE%AE%E0%AE%BE%E0%AE%A8%E0%AE%95%E0%AE%B0%E0%AE%BE%E0%AE%9F%E0%AF%8D%E0%AE%9A%E0%AE%BF+%E0%AE%A4%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%88+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AF%81%E0%AE%9F%E0%AE%A9%E0%AF%8D+%E0%AE%B5%E0%AE%B0%E0%AE%B5%E0%AF%87%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BF%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AE%A4%E0%AF%81.++%0A%0A%E0%AE%8E%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AE%A4%E0%AF%81+%E0%AE%AE%E0%AF%86%E0%AE%B0%E0%AE%BF%E0%AE%A9%E0%AE%BE++%E0%AE%A8%E0%AF%80%E0%AE%9A%E0%AF%8D%E0%AE%9A%E0%AE%B2%E0%AF%8D++%E0%AE%95%E0%AF%81%E0%AE%B3%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%A9%E0%AF%88+" + count + "+%E0%AE%8E%E0%AE%A3%E0%AF%8D%E0%AE%A3%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88+%E0%AE%A8%E0%AE%AA%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%81%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%81+" + date + "+%E0%AE%85%E0%AE%A9%E0%AF%8D%E0%AE%B1%E0%AF%81+++%E0%AE%A8%E0%AF%87%E0%AE%B0+%E0%AE%87%E0%AE%9F%E0%AF%88%E0%AE%B5%E0%AF%86%E0%AE%B3%E0%AE%BF+" + formattedStartTime + "+-+" + formattedEndTime + "++%E0%AE%B2%E0%AF%8D+%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%81%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%8A%E0%AE%B3%E0%AF%8D%E0%AE%B3+%E0%AE%AE%E0%AF%81%E0%AE%A9%E0%AF%8D%E0%AE%AA%E0%AE%A4%E0%AE%BF%E0%AE%B5%E0%AF%81+%E0%AE%9A%E0%AF%86%E0%AE%AF%E0%AF%8D%E0%AE%A4%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AF%80%E0%AE%B0%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D.+%0A%E0%AE%87%E0%AE%A4%E0%AE%B1%E0%AF%8D%E0%AE%95%E0%AE%BE%E0%AE%A9+%E0%AE%95%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AE%A3%E0%AE%AE%E0%AF%8D+%2A%E0%AE%B0%E0%AF%82%2A.+" + amount + "+%E0%AE%AA%E0%AF%86%E0%AE%B1%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%B3%E0%AF%8D%E0%AE%B3%E0%AE%A4%E0%AF%81.++%0A%0A%E0%AE%87%E0%AE%A9%E0%AE%BF%E0%AE%AE%E0%AF%88%E0%AE%AF%E0%AE%BE%E0%AE%A9+%E0%AE%A8%E0%AF%80%E0%AE%9A%E0%AF%8D%E0%AE%9A%E0%AE%B2%E0%AF%8D+%E0%AE%85%E0%AE%A9%E0%AF%81%E0%AE%AA%E0%AE%B5%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF%E0%AE%A9%E0%AF%88+%E0%AE%AA%E0%AF%86%E0%AE%B1%E0%AF%8D%E0%AE%B1%E0%AF%81+%E0%AE%AE%E0%AE%95%E0%AE%BF%E0%AE%B4%E0%AF%81%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D%F0%9F%98%8A%0A%0A%E0%AE%A8%E0%AF%81%E0%AE%B4%E0%AF%88%E0%AE%B5%E0%AE%BE%E0%AE%AF%E0%AE%BF%E0%AE%B2%E0%AE%BF%E0%AE%B2%E0%AF%8D+%E0%AE%89%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D+QR+%E0%AE%95%E0%AF%81%E0%AE%B1%E0%AE%BF%E0%AE%AF%E0%AF%80%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%88+%E0%AE%95%E0%AE%BE%E0%AE%9F%E0%AF%8D%E0%AE%9F%E0%AF%81%E0%AE%99%E0%AF%8D%E0%AE%95%E0%AE%B3%E0%AF%8D%F0%9F%91%87&isTemplate=true&buttonUrlParam=swimmingpool%2FbookingQRCode%3Forderid%3D" + orderid; |
|||
//bookingQRCode?orderid=order_P6UOll7Kn1UfrV |
|||
String response = restTemplate.getForObject(tamilurl, String.class); |
|||
System.out.println("response: " + response); |
|||
|
|||
try { |
|||
HttpURLConnection connection = null; |
|||
|
|||
URL url = new URL(tamilurl); |
|||
connection = (HttpURLConnection) url.openConnection(); |
|||
connection.setRequestMethod("GET"); |
|||
|
|||
int responseCode = connection.getResponseCode(); |
|||
response = responseCode + ""; |
|||
System.out.println("Response Code: " + responseCode); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
sendenglishWhatsapp(password, mobileno, date, slot, count, amount, orderid); |
|||
return response; |
|||
} |
|||
|
|||
public String sendenglishWhatsapp(String password, String mobileno, String date, String slot, String count, String amount, String orderid) { |
|||
System.out.println("trying send whatsapp to :" + mobileno); |
|||
|
|||
String[] parts = slot.split("-"); |
|||
|
|||
// Trim the parts to remove leading and trailing spaces |
|||
String startTime = parts[0].trim(); |
|||
String endTime = parts[1].trim(); |
|||
// Manually replace characters in startTime and endTime to URL-encoded equivalents |
|||
String formattedStartTime = startTime.replace(":", "%3A").replace(" ", "+"); |
|||
String formattedEndTime = endTime.replace(":", "%3A").replace(" ", "+"); |
|||
|
|||
String tamilurl = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=" + password + "&send_to=" + mobileno + "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Dear+Patron+%2C+%0AWelcome+to+Greater+Chennai+Corporation.++%0A%0AYou+have+booked+our+Marina+swimming+pool+for+" + count + "+number+of+persons+on+" + date + "+at+time+slot+" + formattedStartTime + "+-+" + formattedEndTime + "+.%0AThe+fee+for+the+slot+is+%2ARs%2A.+" + amount + "+received.+%0A%0AEnjoy+a+pleasant+swimming+experience%F0%9F%98%8A%0A%0APlease+show+your+QR+Code+at+Entrance%F0%9F%91%87&isTemplate=true&buttonUrlParam=swimmingpool%2FbookingQRCode%3Forderid%3D" + orderid; |
|||
//bookingQRCode?orderid=order_P6UOll7Kn1UfrV |
|||
String response = restTemplate.getForObject(tamilurl, String.class); |
|||
System.out.println("response: " + response); |
|||
|
|||
try { |
|||
HttpURLConnection connection = null; |
|||
|
|||
URL url = new URL(tamilurl); |
|||
connection = (HttpURLConnection) url.openConnection(); |
|||
connection.setRequestMethod("GET"); |
|||
|
|||
int responseCode = connection.getResponseCode(); |
|||
response = responseCode + ""; |
|||
System.out.println("Response Code: " + responseCode); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return response; |
|||
} |
|||
|
|||
public String sendSMS(String password, String mobileno, String date, String slot, String count, String amount, String orderid) { |
|||
|
|||
String note = ""; |
|||
String[] parts = slot.split("-"); |
|||
|
|||
// Trim the parts to remove leading and trailing spaces |
|||
String startTime = parts[0].trim(); |
|||
String endTime = parts[1].trim(); |
|||
|
|||
String SMSTEXT = "அன்பான வாடிக்கையாளரே, பெருநகர சென்னை மாநகராட்சி தங்களை அன்புடன் வரவேற்கின்றது. எங்களது மெரினா நீச்சல் குளத்தினை " + count + " எண்ணிக்கை நபர்களுக்கு " + date + " அன்று நேர இடைவெளி " + startTime + " முதல் " + endTime + " வரை பயன்படுத்திக்கொள்ள முன்பதிவு செய்துள்ளீர்கள். இதற்கான கட்டணம் ரூ. " + amount + " பெறப்பட்டுள்ளது. இனிமையான நீச்சல் அனுபவத்தினை பெற்று மகிழுங்கள். " + note + " நுழைவாயிலில் உங்கள் QR குறியீட்டை காட்டுங்கள்"; |
|||
|
|||
String urlString = "https://tmegov.onex-aura.com/api/sms?key=mRSm0zym&to=" + mobileno + "&from=GCCCRP&body=" + SMSTEXT + "&entityid=1401572690000011081&templateid=1407172667016050918"; |
|||
//System.out.println(urlString); |
|||
|
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String Response = restTemplate.getForObject(urlString, String.class); |
|||
|
|||
String SMSEnglish = "Dear Patron, Welcome to Greater Chennai Corporation. You have booked our Marina swimming pool for " + count + " Nos of persons on " + date + " at time interval " + startTime + " to " + endTime + " . The fee for the slot is Rs. " + amount + " Received. Enjoy a pleasant swimming experience. " + note + " Please Show your QR Code at Entrance"; |
|||
|
|||
String urlString2 = "https://tmegov.onex-aura.com/api/sms?key=mRSm0zym&to=" + mobileno + "&from=GCCCRP&body=" + SMSEnglish + "&entityid=1401572690000011081&templateid=1407172666960216321"; |
|||
//System.out.println(urlString); |
|||
|
|||
RestTemplate restTemplate2 = new RestTemplate(); |
|||
String Response2 = restTemplate2.getForObject(urlString2, String.class); |
|||
|
|||
return Response2; |
|||
} |
|||
|
|||
public int saveorderLog(String order_id, String order_info, String uniqueid) { |
|||
if (order_id == null || uniqueid == null) { |
|||
System.out.println("Missing required fields. Order ID: " + order_id + ", Temp Book ID: " + uniqueid); |
|||
return 0; |
|||
} |
|||
|
|||
int temp_booking_id = Integer.parseInt(uniqueid); |
|||
|
|||
String sqlQuery = "INSERT INTO orderslogs(order_id, order_info, uniqueid) VALUES (?,?,?)"; |
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
|
|||
try { |
|||
int affectedRows = jdbcTemplate.update(connection -> { |
|||
PreparedStatement ps = connection.prepareStatement(sqlQuery, new String[]{"id"}); |
|||
ps.setString(1, order_id); |
|||
ps.setString(2, order_info); |
|||
ps.setInt(3, temp_booking_id); |
|||
return ps; |
|||
}, keyHolder); |
|||
|
|||
if (affectedRows > 0) { |
|||
Number generatedId = keyHolder.getKey(); |
|||
return (generatedId != null) ? generatedId.intValue() : 0; |
|||
} else { |
|||
System.out.println("Failed to insert into order_log."); |
|||
return 0; |
|||
} |
|||
} catch (Exception e) { |
|||
System.out.println("Exception during insert to order_log: " + e.getMessage()); |
|||
e.printStackTrace(); |
|||
return 0; |
|||
} |
|||
} |
|||
|
|||
|
|||
public ResponseEntity<?> processPaymentConfirmation(String tempid, int source, String orderid, Map<String, Object> paymentResponse) { |
|||
|
|||
if (source < 0 || source > 2) { |
|||
return ResponseEntity.badRequest() |
|||
.body(Map.of("message", "Invalid source: must be 0 (web), 1 (counter) or 2 (whatsapp)")); |
|||
} |
|||
|
|||
// Validate tempid |
|||
int id; |
|||
try { |
|||
id = Integer.parseInt(tempid); |
|||
} catch (NumberFormatException nfe) { |
|||
return ResponseEntity.badRequest() |
|||
.body(Map.of("message", "Invalid id: must be a number")); |
|||
} |
|||
|
|||
// Fetch temp booking |
|||
Map<String, Object> tempBookingDetails = getTempBookingData(tempid); |
|||
if (tempBookingDetails.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body(Map.of("message", "No booking found for id: " + tempid)); |
|||
} |
|||
|
|||
try { |
|||
Map<String, Object> transaction = (Map<String, Object>) paymentResponse.get("transaction"); |
|||
Map<String, Object> amountMap = (Map<String, Object>) transaction.get("amount"); |
|||
Map<String, Object> methodMap = (Map<String, Object>) transaction.get("method"); |
|||
|
|||
String payId = transaction.get("pg_transaction_id").toString(); |
|||
String referenceId = paymentResponse.get("reference_id").toString(); |
|||
String orderId = orderid; |
|||
String status = transaction.get("status").toString(); |
|||
|
|||
savePaymentResponse(orderId, payId, status, referenceId, paymentResponse, tempid); |
|||
|
|||
// Save failed transaction |
|||
if ("failed".equalsIgnoreCase(status)) { |
|||
// Convert entire response map to JSON string |
|||
ObjectMapper mapper = new ObjectMapper(); |
|||
String fullResponseJson = mapper.writeValueAsString(paymentResponse); |
|||
|
|||
// Save to DB (assuming you have a method) |
|||
saveFailedTransaction(orderId, payId, status, referenceId, fullResponseJson, id); |
|||
|
|||
return ResponseEntity.ok(Map.of( |
|||
"message", "Your payment failed. Please try again." |
|||
)); |
|||
} else if ("success".equalsIgnoreCase(status)) { |
|||
|
|||
savePaymentInfo(tempid, |
|||
tempBookingDetails.get("booking_type").toString(), |
|||
tempBookingDetails.get("cdate").toString(), |
|||
tempBookingDetails.get("mobile_no").toString(), |
|||
tempBookingDetails.get("name").toString(), |
|||
tempBookingDetails.get("no_of_adults").toString(), |
|||
tempBookingDetails.get("no_of_kids").toString(), |
|||
tempBookingDetails.get("pool_id").toString(), |
|||
tempBookingDetails.get("slot_from_date").toString(), |
|||
tempBookingDetails.get("slot_order").toString(), |
|||
tempBookingDetails.get("slot_to_date").toString(), |
|||
tempBookingDetails.get("total_amount").toString(), |
|||
payId, |
|||
orderId, |
|||
referenceId, |
|||
status, |
|||
tempBookingDetails.get("cdate").toString(), |
|||
tempid, |
|||
tempBookingDetails.getOrDefault("booking_mode", "ONLINE").toString(), |
|||
source); |
|||
|
|||
String qrCodeUrl = "https://gccservices.chennaicorporation.gov.in/swimmingpool/bookingQRCode?orderid=" + orderId; |
|||
return ResponseEntity.ok(Map.of( |
|||
"message", "Your payment was successful and your booking is now confirmed! " + |
|||
"You’ll receive the full details via WhatsApp and SMS shortly. " + |
|||
"Please have your QR code ready at entry.", |
|||
"qrCodeUrl", qrCodeUrl |
|||
)); |
|||
|
|||
|
|||
} |
|||
|
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Map.of("message", "Failed to confirm payment")); |
|||
|
|||
|
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(Map.of("message", "Failed to confirm payment", "error", e.getMessage())); |
|||
} |
|||
} |
|||
|
|||
private void savePaymentResponse(String orderId, String payId, String status, String referenceId, |
|||
Map<String, Object> paymentResponse, String tempid) { |
|||
|
|||
String sql = "INSERT INTO payment_response (order_id, payment_id, payment_status,reference_id,response, uniqueId) " + |
|||
"VALUES (?, ?, ?, ?, ?, ?)"; |
|||
|
|||
try { |
|||
String jsonResponse = objectMapper.writeValueAsString(paymentResponse); |
|||
jdbcTemplate.update(sql, |
|||
orderId, |
|||
payId, |
|||
status, |
|||
referenceId, |
|||
jsonResponse, |
|||
tempid |
|||
); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); // log or rethrow as needed |
|||
} |
|||
} |
|||
|
|||
public void saveFailedTransaction(String orderId, String paymentId, String status, String referenceId, String fullJsonResponse, int uniqueId) { |
|||
String sql = "INSERT INTO payment_failed_response (order_id, payment_id, payment_status, response, uniqueId,reference_id) " + |
|||
"VALUES (?, ?, ?, ?, ?, ?)"; |
|||
|
|||
jdbcTemplate.update(sql, orderId, paymentId, status, referenceId, fullJsonResponse, uniqueId); |
|||
} |
|||
|
|||
|
|||
public List<Map<String,Object>> getBookingByMobileNo(long mobileNo) { |
|||
String sqlQuery = "SELECT b.id, b.booking_mode, b.booking_type, " + |
|||
"DATE_FORMAT(b.cdate, '%d-%m-%Y') AS cdate, " + // format dd-MM-yyyy |
|||
"b.mobile_no, b.name, b.no_of_adults, b.no_of_kids, " + |
|||
"DATE_FORMAT(b.slot_from_date, '%d-%m-%Y') AS slot_from_date, " + // format dd-MM-yyyy |
|||
"st.slot_timing AS slot_order, " + |
|||
"DATE_FORMAT(b.slot_to_date, '%d-%m-%Y') AS slot_to_date, " + // format dd-MM-yyyy |
|||
"b.total_amount, b.orderid, " + |
|||
"b.adults_remaining, b.kids_remaining " + |
|||
"FROM booking_details b " + |
|||
"LEFT JOIN slot_timing st ON b.slot_order = st.id " + |
|||
"WHERE b.mobile_no = ? " + |
|||
"ORDER BY b.cdate DESC"; |
|||
|
|||
List<Map<String,Object>> bookings = jdbcTemplate.queryForList(sqlQuery, mobileNo); |
|||
|
|||
String baseQrUrl = "https://gccservices.chennaicorporation.gov.in/swimmingpool/bookingQRCode?orderid="; |
|||
for (Map<String,Object> booking : bookings) { |
|||
// orderid comes back as a String in the map |
|||
String orderId = String.valueOf(booking.get("orderid")); |
|||
booking.put("acknowledgementLink", baseQrUrl + orderId); |
|||
} |
|||
|
|||
return bookings; |
|||
} |
|||
|
|||
|
|||
public List<Map<String, Object>> findByMobileNo(long mobileNo){ |
|||
String sqlQuery = "select id from booking_details where mobile_no = '"+mobileNo+"'"; |
|||
System.out.println(sqlQuery); |
|||
return jdbcTemplate.queryForList(sqlQuery); |
|||
} |
|||
} |
|||
@ -0,0 +1,49 @@ |
|||
package com.gcc.restapiservices.swimmingpool.util; |
|||
|
|||
public class ApiResponse { |
|||
private String status; |
|||
private String message; |
|||
private Object data; |
|||
private int statusCode; |
|||
|
|||
// Constructor |
|||
public ApiResponse(String status, String message, Object data, int statusCode) { |
|||
this.status = status; |
|||
this.message = message; |
|||
this.data = data; |
|||
this.statusCode = statusCode; |
|||
} |
|||
|
|||
// Getters and Setters |
|||
public String getStatus() { |
|||
return status; |
|||
} |
|||
|
|||
public void setStatus(String status) { |
|||
this.status = status; |
|||
} |
|||
|
|||
public String getMessage() { |
|||
return message; |
|||
} |
|||
|
|||
public void setMessage(String message) { |
|||
this.message = message; |
|||
} |
|||
|
|||
public Object getData() { |
|||
return data; |
|||
} |
|||
|
|||
public void setData(Object data) { |
|||
this.data = data; |
|||
} |
|||
|
|||
public int getStatusCode() { |
|||
return statusCode; |
|||
} |
|||
|
|||
public void setStatusCode(int statusCode) { |
|||
this.statusCode = statusCode; |
|||
} |
|||
} |
|||
@ -0,0 +1,42 @@ |
|||
package com.gcc.restapiservices.townplanning.controller; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
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 com.fasterxml.jackson.databind.JsonNode; |
|||
import com.gcc.restapiservices.townplanning.service.BuildingApprovalService; |
|||
|
|||
@RequestMapping("/gccrestservices/api/townplanning") |
|||
@RestController |
|||
public class BuildingApprovalApiController { |
|||
|
|||
@Autowired |
|||
private BuildingApprovalService buildingApprovalService; |
|||
|
|||
|
|||
// ✅ API 1: By BA Number |
|||
@GetMapping("/get-building-approval-details-by-ba") |
|||
public ResponseEntity<JsonNode> getDetailsByBaNumber(@RequestParam String baNumber) { |
|||
JsonNode result = buildingApprovalService.getBuildingApprovalDetailsByBaNumber(baNumber); |
|||
if (result == null) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); |
|||
} |
|||
return ResponseEntity.ok(result); |
|||
} |
|||
|
|||
// ✅ API 2: By PPA Number |
|||
@GetMapping("/get-building-approval-details-by-ppa") |
|||
public ResponseEntity<JsonNode> getDetailsByPpaNumber(@RequestParam String ppaNumber) { |
|||
JsonNode result = buildingApprovalService.getBuildingApprovalDetailsByPpaNumber(ppaNumber); |
|||
if (result == null) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); |
|||
} |
|||
return ResponseEntity.ok(result); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,53 @@ |
|||
package com.gcc.restapiservices.townplanning.service; |
|||
|
|||
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; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
import com.fasterxml.jackson.databind.JsonNode; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
@Service |
|||
public class BuildingApprovalService { |
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
private final RestTemplate restTemplate = new RestTemplate(); |
|||
private final ObjectMapper mapper = new ObjectMapper(); |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlGccRestServicesDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
//BA Number |
|||
public JsonNode getBuildingApprovalDetailsByBaNumber(String baNumber) { |
|||
try { |
|||
String url = "https://erp.chennaicorporation.gov.in/pgr/newmobileservice" + |
|||
"?serviceId=common_api&jsonResp=Yes&subService=getBPADetails&baNum=" + baNumber; |
|||
|
|||
String response = restTemplate.getForObject(url, String.class); |
|||
return mapper.readTree(response); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
//PPA Number |
|||
public JsonNode getBuildingApprovalDetailsByPpaNumber(String ppaNumber) { |
|||
try { |
|||
String url = "https://erp.chennaicorporation.gov.in/pgr/newmobileservice" + |
|||
"?serviceId=common_api&jsonResp=Yes&subService=getBPADetails&ppaNum=" + ppaNumber; |
|||
|
|||
String response = restTemplate.getForObject(url, String.class); |
|||
return mapper.readTree(response); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return null; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,96 @@ |
|||
package com.gcc.restapiservices.victoriaHallBooking.configuration; |
|||
|
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.context.annotation.PropertySource; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Configuration |
|||
@PropertySource("classpath:paymentConfig.properties") |
|||
public class VPHPaymentConfig { |
|||
|
|||
@Value("${payment.worldline.merchantId}") |
|||
private String merchantId; |
|||
|
|||
@Value("${payment.worldline.encryptionKey}") |
|||
private String encryptionKey; |
|||
|
|||
@Value("${payment.worldline.encryptionIV}") |
|||
private String encryptionIV; |
|||
|
|||
@Value("${payment.worldline.schemeCode}") |
|||
private String schemeCode; |
|||
|
|||
@Value("${payment.worldline.merchantName}") |
|||
private String merchantName; |
|||
|
|||
@Value("${payment.worldline.transactionSuccessCode}") |
|||
private String transactionSuccessCode; |
|||
|
|||
@Value("${payment.worldline.refundSuccessCode}") |
|||
private String refundSuccessCode; |
|||
|
|||
|
|||
public String getMerchantId() { |
|||
return merchantId; |
|||
} |
|||
|
|||
public void setMerchantId(String merchantId) { |
|||
this.merchantId = merchantId; |
|||
} |
|||
|
|||
public String getEncryptionKey() { |
|||
return encryptionKey; |
|||
} |
|||
public byte[] getEncryptionKeyByte() { |
|||
return encryptionKey.getBytes(); |
|||
} |
|||
|
|||
public void setEncryptionKey(String encryptionKey) { |
|||
this.encryptionKey = encryptionKey; |
|||
} |
|||
|
|||
public String getEncryptionIV() { |
|||
return encryptionIV; |
|||
} |
|||
|
|||
public byte[] getEncryptionIVByte() { |
|||
return encryptionIV.getBytes(); |
|||
} |
|||
|
|||
public void setEncryptionIV(String encryptionIV) { |
|||
this.encryptionIV = encryptionIV; |
|||
} |
|||
|
|||
public String getSchemeCode() { |
|||
return schemeCode; |
|||
} |
|||
|
|||
public void setSchemeCode(String schemeCode) { |
|||
this.schemeCode = schemeCode; |
|||
} |
|||
|
|||
public String getMerchantName() { |
|||
return merchantName; |
|||
} |
|||
|
|||
public void setMerchantName(String merchantName) { |
|||
this.merchantName = merchantName; |
|||
} |
|||
|
|||
public String getTransactionSuccessCode() { |
|||
return transactionSuccessCode; |
|||
} |
|||
|
|||
public void setTransactionSuccessCode(String transactionSuccessCode) { |
|||
this.transactionSuccessCode = transactionSuccessCode; |
|||
} |
|||
|
|||
public String getRefundSuccessCode() { |
|||
return refundSuccessCode; |
|||
} |
|||
|
|||
public void setRefundSuccessCode(String refundSuccessCode) { |
|||
this.refundSuccessCode = refundSuccessCode; |
|||
}} |
|||
@ -0,0 +1,992 @@ |
|||
package com.gcc.restapiservices.victoriaHallBooking.controller; |
|||
|
|||
import com.gcc.restapiservices.victoriaHallBooking.dto.PaymentWebhookPayload; |
|||
import com.gcc.restapiservices.victoriaHallBooking.service.VPHPaymentService; |
|||
import com.gcc.restapiservices.victoriaHallBooking.service.victoriaHallService; |
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
import com.gcc.restapiservices.coworkspace.controller.ApiResponse; |
|||
|
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
import org.springframework.web.multipart.MultipartHttpServletRequest; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
|
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
import com.fasterxml.jackson.databind.JsonNode; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import java.security.NoSuchAlgorithmException; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.ArrayList; |
|||
import java.util.Enumeration; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.HashMap; |
|||
import java.util.Random; |
|||
|
|||
@RestController |
|||
@RequestMapping("/gccrestservices/victoriahall/api") |
|||
public class VPHHallController { |
|||
|
|||
@Autowired |
|||
private VPHPaymentService chPaymentService; |
|||
|
|||
@Autowired |
|||
private victoriaHallService hallService; |
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
|
|||
@GetMapping("/getHallList") |
|||
public List<Map<String, Object>> getHallList() { |
|||
List<Map<String, Object>> hallList = new ArrayList<Map<String, Object>>(); |
|||
hallList = hallService.getHallList(); |
|||
|
|||
if (hallList.isEmpty()) { |
|||
return hallList; |
|||
} |
|||
return hallList; |
|||
} |
|||
|
|||
@GetMapping("/getReasonMaster") |
|||
public ResponseEntity<?> getReasonMaster() { |
|||
try { |
|||
List<Map<String, Object>> result = hallService.getReasonMaster(); |
|||
|
|||
if (result == null || result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No data found"); |
|||
} |
|||
|
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getDocumentsByReasonId") |
|||
public ResponseEntity<?> getDocumentsByReasonId(@RequestParam(value = "reasonId", required = false) Long reasonId) { |
|||
if (reasonId == null) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "reasonId is required"); |
|||
errorResponse.put("message", "Missing required parameter for reasonId"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
try { |
|||
List<Map<String, Object>> result = hallService.getDocumentsByReasonId(reasonId); |
|||
|
|||
if (result == null || result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No data found for reasonId: " + reasonId); |
|||
} |
|||
|
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getRelationTypes") |
|||
public ResponseEntity<?> getRelationTypes() { |
|||
try { |
|||
List<Map<String, String>> result = hallService.getRelationTypesAsMap(); |
|||
|
|||
if (result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No data found"); |
|||
} |
|||
|
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/getUserDetails") |
|||
public ResponseEntity<?> getUserDetails(@RequestParam(value = "Mobilenumber", required = false) Long Mobilenumber) {// @RequestParam(value |
|||
// = |
|||
// "mobileNumber", |
|||
// required |
|||
// = |
|||
// false) |
|||
// Long |
|||
// mobileNumber, |
|||
if (Mobilenumber == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
// Check if mobile number is 10 digits |
|||
String mobileStr = String.valueOf(Mobilenumber); |
|||
if (mobileStr.length() != 10) { |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Mobile number must be exactly 10 digits."); |
|||
} |
|||
try { |
|||
List<Map<String, Object>> result = hallService.getUserDetails(Mobilenumber); |
|||
|
|||
if (result == null || result.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body("No data found for Mobilenumber: " + Mobilenumber); |
|||
} |
|||
|
|||
return ResponseEntity.ok(result); |
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/calculatehallamount") |
|||
public ResponseEntity<Map<String, Object>> getHallDetailsConcession( |
|||
@RequestParam(value = "numDays", required = false) Integer numDays, |
|||
@RequestParam(value = "startPeriod", required = false) String startPeriod, |
|||
@RequestParam(value = "endPeriod", required = false) String endPeriod, |
|||
@RequestParam(value = "reasonforBooking", required = false) String reasonforBooking, |
|||
@RequestParam(value = "hallId", required = false) Integer hallId) { |
|||
|
|||
// Validation for required parameters |
|||
if (numDays == null) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Number of days is required"); |
|||
errorResponse.put("message", "Please provide the numDays parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
if (startPeriod == null || startPeriod.trim().isEmpty()) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Start period is required"); |
|||
errorResponse.put("message", "Please provide the startPeriod parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
if (!startPeriod.equals("1") && !startPeriod.equals("2")) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Invalid startPeriod"); |
|||
errorResponse.put("message", "startPeriod must be either '1' or '2'"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
if (endPeriod == null || endPeriod.trim().isEmpty()) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "End period is required"); |
|||
errorResponse.put("message", "Please provide the endPeriod parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
if (!endPeriod.equals("1") && !endPeriod.equals("2")) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Invalid endPeriod"); |
|||
errorResponse.put("message", "endPeriod must be either '1' or '2'"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
if (reasonforBooking == null || reasonforBooking.trim().isEmpty()) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Reason for booking is required"); |
|||
errorResponse.put("message", "Please provide the reasonforBooking parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
if (hallId == null) { |
|||
Map<String, Object> errorResponse = new HashMap<>(); |
|||
errorResponse.put("error", "Hall ID is required"); |
|||
errorResponse.put("message", "Please provide the hallId parameter"); |
|||
return ResponseEntity.badRequest().body(errorResponse); |
|||
} |
|||
|
|||
Map<String, Object> hallDetails = hallService.getHallDetailsById(hallId); |
|||
|
|||
if (hallDetails == null) { |
|||
return ResponseEntity.status(404).body(Map.of("message", "Incorrect HallID")); |
|||
} |
|||
System.out.println("hallDetails..." + hallDetails); |
|||
|
|||
Map<String, Object> concession = hallService.getHallConcessionByHallId(hallId); |
|||
System.out.println("concession....." + concession); |
|||
|
|||
Boolean isSGEObj = (Boolean) hallDetails.get("is_sge"); |
|||
Boolean isCGEObj = (Boolean) hallDetails.get("is_cge"); |
|||
|
|||
boolean isSGE = isSGEObj != null && isSGEObj; |
|||
boolean isCGE = isCGEObj != null && isCGEObj; |
|||
|
|||
double fullDayAmount = toDouble(hallDetails.get("full_day_rent")); |
|||
double halfDayAmount = toDouble(hallDetails.get("half_day_rent")); |
|||
double depositAmount = toDouble(hallDetails.get("deposit_amount")); |
|||
double gstRate = toDouble(hallDetails.get("gst")); |
|||
System.out.println("tete"); |
|||
System.out.println(depositAmount); |
|||
|
|||
Map<String, Object> response = new HashMap<>(); |
|||
double amount = calculateAmount(numDays, startPeriod, endPeriod, fullDayAmount, halfDayAmount); |
|||
double totalDepositAmount = calculateDepositAmount(numDays, startPeriod, endPeriod, depositAmount); |
|||
double totalAmount = 0; |
|||
double discountAmount = 0; |
|||
|
|||
response.put("reasonforBooking", reasonforBooking); |
|||
|
|||
if (!isSGE) { |
|||
double gst = round(amount * gstRate / 100.0); |
|||
totalAmount = round(amount + gst + totalDepositAmount); |
|||
response.put("discount", 0); |
|||
response.put("amount", round(amount)); |
|||
response.put("totalAmount", totalAmount); |
|||
response.put("depositAmount", round(totalDepositAmount)); |
|||
response.put("gst", gst); |
|||
response.put("discountAmount", round(amount)); |
|||
} else if ("SGE".equalsIgnoreCase(reasonforBooking) && concession != null) { |
|||
double fullCleaning = toDouble(concession.get("fullday_cleaningcharges")); |
|||
double fullPA = toDouble(concession.get("fullday_pasystem")); |
|||
double fullEB = toDouble(concession.get("fullday_ebcharges")); |
|||
double halfCleaning = toDouble(concession.get("halfday_cleaningcharges")); |
|||
double halfPA = toDouble(concession.get("halfday_pasystem")); |
|||
double halfEB = toDouble(concession.get("halfday_ebcharges")); |
|||
|
|||
double fullAdd = fullCleaning + fullPA + fullEB; |
|||
double halfAdd = halfCleaning + halfPA + halfEB; |
|||
double addCharges = calculateAmount(numDays, startPeriod, endPeriod, fullAdd, halfAdd); |
|||
double sgeDiscount = toDouble(hallDetails.get("sge_discount")); |
|||
double fullRent = toDouble(concession.get("fulldayhallamount")); |
|||
double halfRent = toDouble(concession.get("halfdayhallamount")); |
|||
|
|||
double gst = round(addCharges * gstRate / 100.0); |
|||
totalAmount = round(addCharges + totalDepositAmount + gst); |
|||
discountAmount = round((fullRent * sgeDiscount) / 100.0); |
|||
|
|||
response.put("startPeriod", startPeriod); |
|||
response.put("endPeriod", endPeriod); |
|||
response.put("fulldayhallAmount", round(fullRent)); |
|||
response.put("halfdayhallAmount", round(halfRent)); |
|||
response.put("discount", sgeDiscount); |
|||
response.put("rentAmount", 0); |
|||
response.put("additionalCharges", round(addCharges)); |
|||
response.put("netAmount", round(addCharges)); |
|||
response.put("gst", gst); |
|||
response.put("depositAmount", round(totalDepositAmount)); |
|||
response.put("totalAmount", totalAmount); |
|||
response.put("discountAmount", discountAmount); |
|||
} else if ("CGE".equalsIgnoreCase(reasonforBooking) && concession != null) { |
|||
double fullCleaning = toDouble(concession.get("fullday_cleaningcharges")); |
|||
double fullPA = toDouble(concession.get("fullday_pasystem")); |
|||
double fullEB = toDouble(concession.get("fullday_ebcharges")); |
|||
double halfCleaning = toDouble(concession.get("halfday_cleaningcharges")); |
|||
double halfPA = toDouble(concession.get("halfday_pasystem")); |
|||
double halfEB = toDouble(concession.get("halfday_ebcharges")); |
|||
|
|||
double fullAdd = fullCleaning + fullPA + fullEB; |
|||
double halfAdd = halfCleaning + halfPA + halfEB; |
|||
double addCharges = calculateAmount(numDays, startPeriod, endPeriod, fullAdd, halfAdd); |
|||
double cgeDiscount = toDouble(hallDetails.get("cge_discount")); |
|||
|
|||
double rentAmount = round((amount * cgeDiscount) / 100.0); |
|||
double netAmount = round(rentAmount + addCharges); |
|||
double gst = round(netAmount * gstRate / 100.0); |
|||
totalAmount = round(netAmount + gst + totalDepositAmount); |
|||
|
|||
response.put("startPeriod", startPeriod); |
|||
response.put("endPeriod", endPeriod); |
|||
response.put("fulldayhallAmount", round(fullDayAmount)); |
|||
response.put("halfdayhallAmount", round(halfDayAmount)); |
|||
response.put("discount", cgeDiscount); |
|||
response.put("rentAmount", rentAmount); |
|||
response.put("additionalCharges", round(addCharges)); |
|||
response.put("netAmount", netAmount); |
|||
response.put("gst", gst); |
|||
response.put("depositAmount", round(totalDepositAmount)); |
|||
response.put("totalAmount", totalAmount); |
|||
response.put("discountAmount", round(discountAmount)); |
|||
} else { |
|||
double gstValue = round(gstRate * amount / 100.0); |
|||
totalAmount = round(amount + gstValue + totalDepositAmount); |
|||
response.put("discount", 0); |
|||
response.put("amount", round(amount)); |
|||
response.put("totalAmount", totalAmount); |
|||
response.put("depositAmount", round(totalDepositAmount)); |
|||
response.put("gst", gstValue); |
|||
response.put("discountAmount", round(amount)); |
|||
} |
|||
response.put("numDays", numDays); |
|||
response.put("startPeriod", startPeriod); |
|||
response.put("endPeriod", endPeriod); |
|||
response.put("reasonforBooking", reasonforBooking); |
|||
response.put("hallId", hallId); |
|||
|
|||
return ResponseEntity.ok(response); |
|||
} |
|||
|
|||
// Helper to safely convert Object to double |
|||
private double toDouble(Object value) { |
|||
if (value instanceof Number) { |
|||
return ((Number) value).doubleValue(); |
|||
} |
|||
return 0.0; |
|||
} |
|||
|
|||
// Helper to round to 2 decimal places |
|||
private double round(double value) { |
|||
return Math.round(value * 100.0) / 100.0; |
|||
} |
|||
|
|||
public double calculateAmount(double numDays, String startPeriod, String endPeriod, double fullDayAmount, |
|||
double halfDayAmount) { |
|||
double amount = 0; |
|||
|
|||
// If there is only one day |
|||
if (numDays == 1) { |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
amount = fullDayAmount; |
|||
} else if ("1".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
amount = halfDayAmount; |
|||
} else if ("2".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
amount = halfDayAmount; |
|||
} else { |
|||
amount = numDays; |
|||
} |
|||
} else { |
|||
// For multiple days |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
amount = fullDayAmount * numDays; |
|||
} else if ("1".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
amount = fullDayAmount * (numDays - 1) + halfDayAmount; |
|||
} else if ("2".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
amount = fullDayAmount * (numDays - 1) + halfDayAmount; |
|||
} else if ("2".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
amount = fullDayAmount * (numDays - 2) + halfDayAmount * 2; |
|||
} else { |
|||
amount = numDays; |
|||
} |
|||
} |
|||
|
|||
return amount; |
|||
} |
|||
|
|||
public double calculateDepositAmount(double numDays, String startPeriod, String endPeriod, double depositAmount) { |
|||
double damount = 0; |
|||
|
|||
// If there is only one day |
|||
if (numDays == 1) { |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
damount = depositAmount; |
|||
} else if ("1".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
damount = depositAmount; |
|||
} else if ("2".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
damount = depositAmount; |
|||
} else { |
|||
damount = numDays; |
|||
} |
|||
} else { |
|||
// For multiple days |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
damount = depositAmount * numDays; |
|||
} else if ("1".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
damount = depositAmount * (numDays - 1) + depositAmount; |
|||
} else if ("2".equals(startPeriod) && "2".equals(endPeriod)) { |
|||
damount = depositAmount * (numDays - 1) + depositAmount; |
|||
} else if ("2".equals(startPeriod) && "1".equals(endPeriod)) { |
|||
damount = depositAmount * (numDays - 2) + depositAmount; |
|||
} else { |
|||
damount = numDays; |
|||
} |
|||
} |
|||
|
|||
return damount; |
|||
} |
|||
|
|||
/* |
|||
* @GetMapping("/checkMobileExits") public String checkMobileExits(@RequestParam |
|||
* (value = "Mobilenumber", required = false) long Mobilenumber) { |
|||
* // @RequestParam(value = "mobileNumber", required = false) Long mobileNumber, |
|||
* |
|||
* try { |
|||
* |
|||
* // Validate mobile number has exactly 10 digits String mobileStr = |
|||
* String.valueOf(Mobilenumber); if (mobileStr.length() != 10) { return |
|||
* "Invalid mobile number. Must be exactly 10 digits."; } return |
|||
* !hallService.checkMobileExits(Mobilenumber).isEmpty() ? "Already Registered" |
|||
* : "Allow to Register"; } catch (Exception e) { return "error"; } } |
|||
*/ |
|||
@GetMapping("/checkMobileExits") |
|||
public ResponseEntity<String> checkMobileExits( |
|||
@RequestParam(value = "Mobilenumber", required = false) Long Mobilenumber) { |
|||
|
|||
if (Mobilenumber == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
|
|||
try { |
|||
String mobileStr = String.valueOf(Mobilenumber); |
|||
if (mobileStr.length() != 10) { |
|||
return ResponseEntity.badRequest().body("Invalid mobile number. Must be exactly 10 digits."); |
|||
} |
|||
|
|||
boolean exists = !hallService.checkMobileExits(Mobilenumber).isEmpty(); |
|||
return ResponseEntity.ok(exists ? "Already Registered" : "Allow to Register"); |
|||
|
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal server error"); |
|||
} |
|||
} |
|||
|
|||
// otp |
|||
@GetMapping(value = "/sendOTP") |
|||
public String sendOtp(HttpServletRequest request, @RequestParam String mobile) { |
|||
|
|||
// Validate mobile number has exactly 10 digits |
|||
if (mobile == null || mobile.trim().isEmpty()) { |
|||
return "Mobile number is required."; |
|||
} |
|||
|
|||
String mobileTrimmed = mobile.trim(); |
|||
if (mobileTrimmed.length() != 10) { |
|||
return "Invalid mobile number. Must be exactly 10 digits."; |
|||
} |
|||
|
|||
String MobileNo = mobile; |
|||
System.out.print("\n MobileNo---:" + mobile); |
|||
Random rand = new Random(); |
|||
int otp = rand.nextInt(90000) + 10000; |
|||
|
|||
// int otp= 22222; |
|||
System.out.print("\n otp---:" + otp); |
|||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy%20HH:mm"); |
|||
LocalDateTime now = LocalDateTime.now(); |
|||
System.out.println(dtf.format(now)); |
|||
|
|||
String generatedToken = "Welcome to GCC! Your OTP for GCC Community Centre is " + otp; |
|||
String key = "pfTEYN6H"; |
|||
String urlString = "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to=" + MobileNo |
|||
+ "&from=GCCCRP&body=OTP for your Victoria Public Hall booking " + otp |
|||
+ "\r\n- GCC&entityid=1401572690000011081&templateid=1407176491887361640"; |
|||
|
|||
System.out.print("\n urlString---: " + urlString); |
|||
String bodyMessage = ""; |
|||
try { |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String Response = restTemplate.getForObject(urlString, String.class); |
|||
|
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
ObjectNode jsonResponse = (ObjectNode) objectMapper.readTree(Response); |
|||
|
|||
jsonResponse.put("MobileNo", MobileNo); |
|||
jsonResponse.put("otp", otp); |
|||
|
|||
bodyMessage = jsonResponse.toString(); |
|||
System.out.println("\n bodyMessage" + bodyMessage); |
|||
|
|||
System.out.println("OTP sent successfully!"); |
|||
|
|||
} catch (Exception e) { |
|||
System.out.print("ERROR---: " + e); |
|||
bodyMessage = "Error"; |
|||
} |
|||
HttpSession session = request.getSession(); |
|||
session.setAttribute("otp", otp); |
|||
return bodyMessage; |
|||
|
|||
} |
|||
|
|||
@GetMapping("/verifyEmployee") |
|||
public ResponseEntity<?> verifyEmployee(@RequestParam String userType, |
|||
@RequestParam(value = "EmployeeID", required = false) String EmployeeID) { |
|||
if (EmployeeID == null || EmployeeID.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Missing or empty 'EmployeeID' parameter"); |
|||
} |
|||
|
|||
if (!"GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
return ResponseEntity.badRequest().body("Invalid userType for Employee verification."); |
|||
} |
|||
|
|||
if (EmployeeID == null || EmployeeID.isBlank()) { |
|||
return ResponseEntity.badRequest().body("Employee ID is required for GCC EMPLOYEE."); |
|||
} |
|||
|
|||
List<Map<String, Object>> existingEmployeeUsers = hallService.checkEmployeeExits(EmployeeID); |
|||
if (existingEmployeeUsers != null && !existingEmployeeUsers.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Employee number already registered"); |
|||
} |
|||
|
|||
try { |
|||
String responseBody = getEmployeeResponse(EmployeeID); |
|||
ObjectMapper mapper = new ObjectMapper(); |
|||
JsonNode rootNode = mapper.readTree(responseBody); |
|||
boolean resultStatus = rootNode.path("ResultStatus").asBoolean(); |
|||
|
|||
if (!resultStatus) { |
|||
return ResponseEntity.badRequest().body("Invalid employee ID."); |
|||
} |
|||
|
|||
return ResponseEntity.ok(rootNode); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Employee verification failed."); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/verifyPensioner") |
|||
public ResponseEntity<?> verifyPensioner(@RequestParam String userType, |
|||
@RequestParam(value = "PensionerID", required = false) String PensionerID) { |
|||
|
|||
if (PensionerID == null || PensionerID.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Missing or empty 'PensionerID' parameter"); |
|||
} |
|||
|
|||
if (!"GCC PENSIONER".equalsIgnoreCase(userType)) { |
|||
return ResponseEntity.badRequest().body("Invalid userType for Pensioner verification."); |
|||
} |
|||
|
|||
if (PensionerID == null || PensionerID.isBlank()) { |
|||
return ResponseEntity.badRequest().body("Pensioner ID is required for GCC PENSIONER."); |
|||
} |
|||
|
|||
List<Map<String, Object>> existingEmployeeUsers = hallService.checkPenionerExits(PensionerID); |
|||
if (existingEmployeeUsers != null && !existingEmployeeUsers.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Pensioner number already registered"); |
|||
} |
|||
|
|||
try { |
|||
String responseBody = getPensionerResponse(PensionerID); |
|||
ObjectMapper mapper = new ObjectMapper(); |
|||
JsonNode rootNode = mapper.readTree(responseBody); |
|||
boolean resultStatus = rootNode.path("ResultStatus").asBoolean(); |
|||
|
|||
if (!resultStatus) { |
|||
return ResponseEntity.badRequest().body("Invalid pensioner ID."); |
|||
} |
|||
|
|||
return ResponseEntity.ok(rootNode); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Pensioner verification failed."); |
|||
} |
|||
} |
|||
|
|||
@PostMapping("/register") |
|||
public ResponseEntity<String> registerUser(@RequestParam(value = "userType", required = false) String userType, |
|||
@RequestParam(value = "name", required = false) String name, |
|||
@RequestParam(value = "mobileNumber", required = false) Long mobileNumber, |
|||
@RequestParam(value = "aadharNumber", required = false) String aadharNumber, |
|||
@RequestParam(required = false) MultipartFile profilePhoto, @RequestParam(required = false) String emailId, |
|||
@RequestParam(value = "doorNo", required = false) String doorNo, |
|||
@RequestParam(value = "street", required = false) String street, |
|||
@RequestParam(value = "area", required = false) String area, |
|||
@RequestParam(value = "location", required = false) String location, |
|||
@RequestParam(value = "pincode", required = false) String pincode, |
|||
@RequestParam(required = false) String PensionerID, |
|||
@RequestParam(required = false) String PensionerDepartment, |
|||
@RequestParam(required = false) String EmployeeID, |
|||
@RequestParam(required = false) String EmployeeDepartment) { |
|||
|
|||
try { |
|||
|
|||
if (userType == null || userType.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("User type is required."); |
|||
} |
|||
|
|||
if (name == null || name.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Name is required."); |
|||
} |
|||
|
|||
if (mobileNumber == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
|
|||
if (aadharNumber == null || aadharNumber.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Aadhar number is required."); |
|||
} |
|||
|
|||
if (doorNo == null || doorNo.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Door number is required."); |
|||
} |
|||
|
|||
if (street == null || street.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Street is required."); |
|||
} |
|||
|
|||
if (area == null || area.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Area is required."); |
|||
} |
|||
|
|||
if (location == null || location.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Location is required."); |
|||
} |
|||
|
|||
if (pincode == null || pincode.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Pincode is required."); |
|||
} |
|||
|
|||
// Additional validations for specific user types |
|||
if ("GCC PENSIONER".equalsIgnoreCase(userType)) { |
|||
if (PensionerID == null || PensionerID.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Pensioner ID is required for GCC PENSIONER user type."); |
|||
} |
|||
if (PensionerID.length() != 6) { |
|||
|
|||
return ResponseEntity.badRequest().body("Invalid PensionerID. Must be exactly 6 digits.."); |
|||
} |
|||
if (PensionerDepartment == null || PensionerDepartment.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest() |
|||
.body("Pensioner Department is required for GCC PENSIONER user type."); |
|||
} |
|||
} |
|||
|
|||
if ("GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
if (EmployeeID == null || EmployeeID.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Employee ID is required for GCC EMPLOYEE user type."); |
|||
} |
|||
if (EmployeeID.length() != 6) { |
|||
|
|||
return ResponseEntity.badRequest().body("Invalid EmployeeID. Must be exactly 6 digits.."); |
|||
} |
|||
|
|||
if (EmployeeDepartment == null || EmployeeDepartment.trim().isEmpty()) { |
|||
return ResponseEntity.badRequest() |
|||
.body("Employee Department is required for GCC EMPLOYEE user type."); |
|||
} |
|||
} |
|||
|
|||
// Format validations |
|||
if (String.valueOf(mobileNumber).length() != 10) { |
|||
return ResponseEntity.badRequest().body("Mobile number must be exactly 10 digits."); |
|||
} |
|||
|
|||
if (pincode.length() != 6) { |
|||
return ResponseEntity.badRequest().body("Pincode must be exactly 6 digits."); |
|||
} |
|||
|
|||
if (emailId != null && !emailId.isBlank()) { |
|||
String emailRegex = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.com$"; |
|||
if (!emailId.matches(emailRegex)) { |
|||
return ResponseEntity.badRequest().body("Invalid email ID."); |
|||
} |
|||
} |
|||
|
|||
if (aadharNumber.length() != 12) { |
|||
return ResponseEntity.badRequest().body("Aadhar number must be exactly 12 digits."); |
|||
} |
|||
|
|||
// Mobile number check only for PUBLIC users |
|||
if ("PUBLIC".equalsIgnoreCase(userType)) { |
|||
List<Map<String, Object>> existingUsers = hallService.checkMobileExits(mobileNumber); |
|||
boolean exists = existingUsers != null && !existingUsers.isEmpty(); |
|||
if (exists) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Mobile number already registered"); |
|||
} |
|||
} |
|||
if ("GCC PENSIONER".equalsIgnoreCase(userType)) { |
|||
List<Map<String, Object>> existingUsers = hallService.checkPenionerExits(PensionerID); |
|||
boolean exists = existingUsers != null && !existingUsers.isEmpty(); |
|||
if (exists) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Pensioner number already registered "); |
|||
} |
|||
} |
|||
if ("GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
List<Map<String, Object>> existingUsers = hallService.checkEmployeeExits(EmployeeID); |
|||
boolean exists = existingUsers != null && !existingUsers.isEmpty(); |
|||
if (exists) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT).body("Employee number already registered"); |
|||
} |
|||
} |
|||
|
|||
// Register all user types |
|||
hallService.registerUser(userType, name, mobileNumber, aadharNumber, profilePhoto, emailId, doorNo, street, |
|||
area, location, pincode, PensionerID, PensionerDepartment, EmployeeID, EmployeeDepartment); |
|||
|
|||
// return ResponseEntity.ok("Pending."); |
|||
// Return different success messages based on user type |
|||
String successMessage; |
|||
if ("PUBLIC".equalsIgnoreCase(userType)) { |
|||
successMessage = "Welcome to GCC, Your User Registration for booking Community Centre is successful."; |
|||
} else if ("GCC PENSIONER".equalsIgnoreCase(userType) || "COUNCILLOR".equalsIgnoreCase(userType) |
|||
|| "GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
successMessage = "Welcome to GCC, Your User Registration request for booking Community Centre is submitted successfully."; |
|||
} else { |
|||
successMessage = "Welcome to GCC, your registration is successful."; |
|||
} |
|||
return ResponseEntity.ok(successMessage); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Registration failed."); |
|||
} |
|||
} |
|||
|
|||
private String getPensionerResponse(String pensionerId) { |
|||
try { |
|||
String url = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=getPensionerDetailsList&pensionerId=" |
|||
+ pensionerId; |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); |
|||
String responseBody = responseEntity.getBody(); |
|||
System.out.println("response.. " + responseBody); |
|||
return responseBody; |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
private String getEmployeeResponse(String employeeId) { |
|||
try { |
|||
String url = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=getEmployeeDetail&EmployeeID=" |
|||
+ employeeId; |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); |
|||
String responseBody = responseEntity.getBody(); |
|||
System.out.println("Employee API response: " + responseBody); |
|||
return responseBody; |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/verifyCounsellor") |
|||
public ResponseEntity<?> checkCounsellorMobileExits( |
|||
@RequestParam(value = "mobileNo", required = false) Long mobileNo) {// @RequestParam(value = "mobileNumber", |
|||
// required = false) Long mobileNumber, |
|||
if (mobileNo == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
|
|||
String mobileStr = String.valueOf(mobileNo); |
|||
if (mobileStr.length() != 10) { |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Mobile number must be exactly 10 digits."); |
|||
} |
|||
|
|||
try { |
|||
// Validate input |
|||
if (mobileNo == null || mobileNo.toString().trim().isEmpty()) { |
|||
return ResponseEntity.badRequest().body("Missing or empty 'mobileNo' parameter."); |
|||
} |
|||
|
|||
// Search for counsellor using mobile1 or mobile2 |
|||
List<Map<String, Object>> counsellorList = hallService.findCounsellorByMobile(mobileNo); |
|||
|
|||
if (counsellorList == null || counsellorList.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Counsellor mobile number not found."); |
|||
} |
|||
|
|||
Map<String, Object> counsellor = counsellorList.get(0); |
|||
String mobile1 = String.valueOf(counsellor.get("mobile1")); |
|||
String mobile2 = String.valueOf(counsellor.get("mobile2")); |
|||
|
|||
// Check if either number is already used in Users table |
|||
boolean isMobile1Used = !hallService.checkMobileExits(Long.parseLong(mobile1)).isEmpty(); |
|||
boolean isMobile2Used = !hallService.checkMobileExits(Long.parseLong(mobile2)).isEmpty(); |
|||
|
|||
if (isMobile1Used || isMobile2Used) { |
|||
return ResponseEntity.status(HttpStatus.CONFLICT) |
|||
.body("One of the counsellor's mobile numbers is already used."); |
|||
} |
|||
|
|||
return ResponseEntity.ok(counsellor.get("name").toString()); |
|||
|
|||
} catch (NumberFormatException e) { |
|||
return ResponseEntity.badRequest().body("Invalid mobile number format."); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Mobile number verification failed."); |
|||
} |
|||
} |
|||
|
|||
// acknowledgment |
|||
/* |
|||
* @GetMapping("/acknowledgement") public ResponseEntity<Map<String, Object>> |
|||
* getBookingDetails(@RequestParam(value = "bookingId", required = false) int |
|||
* bookingId) { Map<String, Object> bookingDetails = |
|||
* hallService.getBookingDetailsById(bookingId); return |
|||
* ResponseEntity.ok(bookingDetails); } |
|||
*/ |
|||
@GetMapping("/acknowledgement") |
|||
public ResponseEntity<?> getBookingDetails(@RequestParam(value = "bookingId", required = false) Integer bookingId) { |
|||
if (bookingId == null) { |
|||
return ResponseEntity.badRequest().body("Booking ID is required."); |
|||
} |
|||
|
|||
try { |
|||
Map<String, Object> bookingDetails = hallService.getBookingDetailsById(bookingId); |
|||
|
|||
return ResponseEntity.ok(bookingDetails); |
|||
|
|||
} catch (EmptyResultDataAccessException ex) { |
|||
// No booking found |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No booking found for bookingId"); |
|||
} catch (Exception e) { |
|||
// Any other error |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
//mobile |
|||
/* |
|||
* @GetMapping("/viewhistory") public ResponseEntity<Map<String, Object>> |
|||
* getBookingsByMobile( |
|||
* |
|||
* @RequestParam("mobileNumber") Long mobileNumber) { |
|||
* |
|||
* |
|||
* Map<String, Object> response = new HashMap<>(); |
|||
* |
|||
* // Step 1: Check if user exists List<Map<String, Object>> userResult = |
|||
* hallService.checkMobileExits(mobileNumber); |
|||
* |
|||
* if (userResult.isEmpty()) { response.put("status", "NOT_FOUND"); |
|||
* response.put("message", "No user found with the given mobile number"); return |
|||
* ResponseEntity.ok(response); } |
|||
* |
|||
* // Step 2: If exists → Call service List<Map<String, Object>> bookings = |
|||
* hallService.getBookingsByMobile(mobileNumber); |
|||
* |
|||
* response.put("status", "SUCCESS"); |
|||
* |
|||
* response.put("mobile_no", mobileNumber); response.put("bookings", bookings); |
|||
* |
|||
* return ResponseEntity.ok(response); } |
|||
*/ |
|||
@GetMapping("/viewhistory") |
|||
public ResponseEntity<?> getBookingsByMobile( |
|||
@RequestParam(value = "mobileNumber", required = false) Long mobileNumber) { |
|||
if (mobileNumber == null) { |
|||
return ResponseEntity.badRequest().body("Mobile number is required."); |
|||
} |
|||
|
|||
// Check if mobile number is exactly 10 digits |
|||
String mobileStr = String.valueOf(mobileNumber); |
|||
if (mobileStr.length() != 10) { |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Mobile number must be exactly 10 digits."); |
|||
} |
|||
|
|||
try { |
|||
// Step 1: Check if user exists |
|||
List<Map<String, Object>> userResult = hallService.checkMobileExits(mobileNumber); |
|||
if (userResult.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("No user found with the given mobile number "); |
|||
} |
|||
|
|||
// Step 2: Get bookings |
|||
List<Map<String, Object>> bookings = hallService.getBookingsByMobile(mobileNumber); |
|||
if (bookings == null || bookings.isEmpty()) { |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND) |
|||
.body("No bookings found for mobile number: " + mobileNumber); |
|||
} |
|||
|
|||
// Success response |
|||
Map<String, Object> response = new HashMap<>(); |
|||
response.put("status", "SUCCESS"); |
|||
response.put("mobile_no", mobileNumber); |
|||
response.put("bookings", bookings); |
|||
|
|||
return ResponseEntity.ok(response); |
|||
|
|||
} catch (Exception e) { |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body("Internal server error: " + e.getMessage()); |
|||
} |
|||
} |
|||
|
|||
@PostMapping(path = "/saveTheRequest2", consumes = {"multipart/form-data"}) |
|||
public ResponseEntity<?> saveTheBookingDetails2(HttpServletRequest request) { |
|||
try { |
|||
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; |
|||
Map<String, Object> bookingDetails = splitFormData(multipartRequest); |
|||
Map<String, Object> saveBookingDetails = hallService.saveBookingDetails(bookingDetails); |
|||
|
|||
return ResponseEntity.ok(new ApiResponse("success", "Booking details saved successfully", |
|||
saveBookingDetails, HttpStatus.OK.value())); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(new ApiResponse("error", "Failed to save booking details " + e.getMessage(), null, |
|||
HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
public Map<String, Object> splitFormData(MultipartHttpServletRequest multipartRequest) { |
|||
Map<String, Object> formData = new HashMap<>(); |
|||
|
|||
// Iterate through the request parameters |
|||
Enumeration<String> parameterNames = multipartRequest.getParameterNames(); |
|||
while (parameterNames.hasMoreElements()) { |
|||
String paramName = parameterNames.nextElement(); |
|||
String paramValues = multipartRequest.getParameter(paramName); |
|||
formData.put(paramName, paramValues); |
|||
} |
|||
|
|||
// Iterate through the request parts (files) |
|||
try { |
|||
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); |
|||
for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) { |
|||
MultipartFile file = entry.getValue(); |
|||
if (!file.isEmpty()) { |
|||
formData.put(entry.getKey(), file); |
|||
} |
|||
} |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
return formData; |
|||
} |
|||
|
|||
@PostMapping("/payment-request") |
|||
public ResponseEntity<?> startPayment(@RequestParam int bookingId) { |
|||
try { |
|||
Map<String, Object> paymentDetails = hallService.startPayment(bookingId); |
|||
|
|||
return ResponseEntity.ok(new ApiResponse("success", "Payment request initiated successfully", |
|||
paymentDetails, HttpStatus.OK.value())); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) |
|||
.body(new ApiResponse("error", "Failed to initiate payment request: " + e.getMessage(), null, |
|||
HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
@PostMapping("/payment-response") |
|||
public ResponseEntity<?> paymentResponse(@RequestParam String orderId, @RequestBody PaymentWebhookPayload payload) { |
|||
try { |
|||
ResponseEntity<?> result = chPaymentService.processPaymentResponse(orderId, payload); |
|||
|
|||
return ResponseEntity |
|||
.ok(new ApiResponse("success", "Payment processed successfully", result, HttpStatus.OK.value())); |
|||
|
|||
} catch (IllegalArgumentException e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.badRequest().body(new ApiResponse("error", "Invalid request: " + e.getMessage(), null, |
|||
HttpStatus.BAD_REQUEST.value())); |
|||
|
|||
} catch (EmptyResultDataAccessException e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ApiResponse("error", |
|||
"No payment record found for Order ID: " + orderId, null, HttpStatus.NOT_FOUND.value())); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ApiResponse("error", |
|||
"Failed to Process the Payment: " + e.getMessage(), null, HttpStatus.INTERNAL_SERVER_ERROR.value())); |
|||
} |
|||
} |
|||
|
|||
@GetMapping("/checkSlot") |
|||
public ResponseEntity<Map<String, Object>> checkSlotAvailability( |
|||
@RequestParam int hallId, |
|||
@RequestParam String startDate, |
|||
@RequestParam String endDate, |
|||
@RequestParam int startingSlot, // 1 = morning, 2 = evening |
|||
@RequestParam int endingSlot // 1 = morning, 2 = evening |
|||
) { |
|||
Map<String, Object> result = hallService.checkSlotAvailability(hallId, startDate, endDate, startingSlot, endingSlot); |
|||
return ResponseEntity.ok(result); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,198 @@ |
|||
package com.gcc.restapiservices.victoriaHallBooking.dto; |
|||
|
|||
import java.math.BigDecimal; |
|||
|
|||
public class PaymentWebhookPayload { |
|||
private String reference_id; |
|||
private Currency currency; |
|||
private Amount paymentAmount; |
|||
private Transaction transaction; |
|||
|
|||
public String getReference_id() { |
|||
return reference_id; |
|||
} |
|||
|
|||
public void setReference_id(String reference_id) { |
|||
this.reference_id = reference_id; |
|||
} |
|||
|
|||
public Currency getCurrency() { |
|||
return currency; |
|||
} |
|||
|
|||
public void setCurrency(Currency currency) { |
|||
this.currency = currency; |
|||
} |
|||
|
|||
public Amount getPaymentAmount() { |
|||
return paymentAmount; |
|||
} |
|||
|
|||
public void setPaymentAmount(Amount paymentAmount) { |
|||
this.paymentAmount = paymentAmount; |
|||
} |
|||
|
|||
public Transaction getTransaction() { |
|||
return transaction; |
|||
} |
|||
|
|||
public void setTransaction(Transaction transaction) { |
|||
this.transaction = transaction; |
|||
} |
|||
|
|||
public static class Currency { |
|||
private String reference_id; |
|||
private Amount amount; |
|||
private String currency; |
|||
private Transaction transaction; |
|||
|
|||
public String getReference_id() { |
|||
return reference_id; |
|||
} |
|||
|
|||
public void setReference_id(String reference_id) { |
|||
this.reference_id = reference_id; |
|||
} |
|||
|
|||
public Amount getAmount() { |
|||
return amount; |
|||
} |
|||
|
|||
public void setAmount(Amount amount) { |
|||
this.amount = amount; |
|||
} |
|||
|
|||
public String getCurrency() { |
|||
return currency; |
|||
} |
|||
|
|||
public void setCurrency(String currency) { |
|||
this.currency = currency; |
|||
} |
|||
|
|||
public Transaction getTransaction() { |
|||
return transaction; |
|||
} |
|||
|
|||
public void setTransaction(Transaction transaction) { |
|||
this.transaction = transaction; |
|||
} |
|||
} |
|||
|
|||
public static class Amount { |
|||
private double value; |
|||
private double offset; |
|||
|
|||
public double getValue() { |
|||
return value; |
|||
} |
|||
|
|||
public void setValue(double value) { |
|||
this.value = value; |
|||
} |
|||
|
|||
public double getOffset() { |
|||
return offset; |
|||
} |
|||
|
|||
public void setOffset(double offset) { |
|||
this.offset = offset; |
|||
} |
|||
} |
|||
|
|||
public static class Transaction { |
|||
private String id; |
|||
private String pg_transaction_id; |
|||
private String type; |
|||
private String status; |
|||
private long created_timestamp; |
|||
private long updated_timestamp; |
|||
private Amount amount; |
|||
private String currency; |
|||
private Method method; |
|||
|
|||
public String getId() { |
|||
return id; |
|||
} |
|||
|
|||
public void setId(String id) { |
|||
this.id = id; |
|||
} |
|||
|
|||
public String getPg_transaction_id() { |
|||
return pg_transaction_id; |
|||
} |
|||
|
|||
public void setPg_transaction_id(String pg_transaction_id) { |
|||
this.pg_transaction_id = pg_transaction_id; |
|||
} |
|||
|
|||
public String getType() { |
|||
return type; |
|||
} |
|||
|
|||
public void setType(String type) { |
|||
this.type = type; |
|||
} |
|||
|
|||
public String getStatus() { |
|||
return status; |
|||
} |
|||
|
|||
public void setStatus(String status) { |
|||
this.status = status; |
|||
} |
|||
|
|||
public long getCreated_timestamp() { |
|||
return created_timestamp; |
|||
} |
|||
|
|||
public void setCreated_timestamp(long created_timestamp) { |
|||
this.created_timestamp = created_timestamp; |
|||
} |
|||
|
|||
public long getUpdated_timestamp() { |
|||
return updated_timestamp; |
|||
} |
|||
|
|||
public void setUpdated_timestamp(long updated_timestamp) { |
|||
this.updated_timestamp = updated_timestamp; |
|||
} |
|||
|
|||
public Amount getAmount() { |
|||
return amount; |
|||
} |
|||
|
|||
public void setAmount(Amount amount) { |
|||
this.amount = amount; |
|||
} |
|||
|
|||
public String getCurrency() { |
|||
return currency; |
|||
} |
|||
|
|||
public void setCurrency(String currency) { |
|||
this.currency = currency; |
|||
} |
|||
|
|||
public Method getMethod() { |
|||
return method; |
|||
} |
|||
|
|||
public void setMethod(Method method) { |
|||
this.method = method; |
|||
} |
|||
} |
|||
|
|||
public static class Method { |
|||
private String type; |
|||
|
|||
public String getType() { |
|||
return type; |
|||
} |
|||
|
|||
public void setType(String type) { |
|||
this.type = type; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,83 @@ |
|||
package com.gcc.restapiservices.victoriaHallBooking.dto; |
|||
|
|||
public class TransactionData { |
|||
private Merchant merchant = new Merchant(); |
|||
private Transaction transaction = new Transaction(); |
|||
|
|||
public Merchant getMerchant() { |
|||
return merchant; |
|||
} |
|||
|
|||
public Transaction getTransaction() { |
|||
return transaction; |
|||
} |
|||
|
|||
public static class Merchant { |
|||
private String identifier; |
|||
|
|||
public String getIdentifier() { |
|||
return identifier; |
|||
} |
|||
|
|||
public void setIdentifier(String identifier) { |
|||
this.identifier = identifier; |
|||
} |
|||
} |
|||
|
|||
public static class Transaction { |
|||
private String amount; |
|||
private String identifier; |
|||
private String dateTime; |
|||
private String requestType; |
|||
private String token; |
|||
private String reference; |
|||
|
|||
public String getAmount() { |
|||
return amount; |
|||
} |
|||
|
|||
public void setAmount(String amount) { |
|||
this.amount = amount; |
|||
} |
|||
|
|||
public String getIdentifier() { |
|||
return identifier; |
|||
} |
|||
|
|||
public void setIdentifier(String identifier) { |
|||
this.identifier = identifier; |
|||
} |
|||
|
|||
public String getDateTime() { |
|||
return dateTime; |
|||
} |
|||
|
|||
public void setDateTime(String dateTime) { |
|||
this.dateTime = dateTime; |
|||
} |
|||
|
|||
public String getRequestType() { |
|||
return requestType; |
|||
} |
|||
|
|||
public void setRequestType(String requestType) { |
|||
this.requestType = requestType; |
|||
} |
|||
|
|||
public String getToken() { |
|||
return token; |
|||
} |
|||
|
|||
public void setToken(String token) { |
|||
this.token = token; |
|||
} |
|||
|
|||
public String getReference() { |
|||
return reference; |
|||
} |
|||
|
|||
public void setReference(String reference) { |
|||
this.reference = reference; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,73 @@ |
|||
package com.gcc.restapiservices.victoriaHallBooking.dto; |
|||
|
|||
public class TransactionRefundResponse { |
|||
private String merchantTransactionIdentifier; |
|||
private PaymentMethod paymentMethod; |
|||
|
|||
public String getMerchantTransactionIdentifier() { |
|||
return merchantTransactionIdentifier; |
|||
} |
|||
|
|||
public void setMerchantTransactionIdentifier(String merchantTransactionIdentifier) { |
|||
this.merchantTransactionIdentifier = merchantTransactionIdentifier; |
|||
} |
|||
|
|||
public PaymentMethod getPaymentMethod() { |
|||
return paymentMethod; |
|||
} |
|||
|
|||
public void setPaymentMethod(PaymentMethod paymentMethod) { |
|||
this.paymentMethod = paymentMethod; |
|||
} |
|||
|
|||
public static class PaymentMethod { |
|||
private PaymentTransaction paymentTransaction; |
|||
|
|||
public PaymentTransaction getPaymentTransaction() { |
|||
return paymentTransaction; |
|||
} |
|||
|
|||
public void setPaymentTransaction(PaymentTransaction paymentTransaction) { |
|||
this.paymentTransaction = paymentTransaction; |
|||
} |
|||
} |
|||
|
|||
public static class PaymentTransaction { |
|||
private String statusCode; |
|||
private String amount; |
|||
private String balanceAmount; |
|||
private String refundIdentifier; |
|||
|
|||
public String getStatusCode() { |
|||
return statusCode; |
|||
} |
|||
|
|||
public void setStatusCode(String statusCode) { |
|||
this.statusCode = statusCode; |
|||
} |
|||
|
|||
public String getAmount() { |
|||
return amount; |
|||
} |
|||
|
|||
public void setAmount(String amount) { |
|||
this.amount = amount; |
|||
} |
|||
|
|||
public String getBalanceAmount() { |
|||
return balanceAmount; |
|||
} |
|||
|
|||
public void setBalanceAmount(String balanceAmount) { |
|||
this.balanceAmount = balanceAmount; |
|||
} |
|||
|
|||
public String getRefundIdentifier() { |
|||
return refundIdentifier; |
|||
} |
|||
|
|||
public void setRefundIdentifier(String refundIdentifier) { |
|||
this.refundIdentifier = refundIdentifier; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,536 @@ |
|||
package com.gcc.restapiservices.victoriaHallBooking.service; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.gcc.restapiservices.victoriaHallBooking.configuration.VPHPaymentConfig; |
|||
import com.gcc.restapiservices.victoriaHallBooking.dto.PaymentWebhookPayload; |
|||
import com.gcc.restapiservices.victoriaHallBooking.dto.TransactionData; |
|||
import com.gcc.restapiservices.victoriaHallBooking.dto.TransactionRefundResponse; |
|||
import com.gcc.restapiservices.victoriaHallBooking.util.VPHEncryptionUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Propagation; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import java.util.HashMap; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.math.BigDecimal; |
|||
import java.time.Instant; |
|||
import java.time.LocalDate; |
|||
import java.time.ZoneId; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
@Service |
|||
public class VPHPaymentService { |
|||
|
|||
@Autowired |
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
@Autowired |
|||
private VPHPaymentConfig paymentConfig; |
|||
|
|||
@Autowired |
|||
private WhatsappMsgService whatsappMsgServiceImpl; |
|||
|
|||
@Autowired |
|||
private VPHEncryptionUtils encryptionUtils; |
|||
|
|||
private final ObjectMapper objectMapper = new ObjectMapper(); |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlCommunityHallDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
@Transactional("mysqlCommunityHallTransactionManager") |
|||
public ResponseEntity<?> processPaymentResponse( |
|||
@RequestParam String OrderId, |
|||
@RequestBody PaymentWebhookPayload payload) throws Exception { |
|||
|
|||
Map<String, Object> result = new HashMap<>(); |
|||
|
|||
String transactionId = OrderId; |
|||
String pgTxnId = payload.getTransaction().getPg_transaction_id(); |
|||
String status = payload.getTransaction().getStatus(); |
|||
double amount = payload.getTransaction().getAmount().getValue() / 100.0; |
|||
String dateTime = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss") |
|||
.withZone(ZoneId.of("Asia/Kolkata")) |
|||
.format(Instant.ofEpochSecond(payload.getTransaction().getCreated_timestamp())); |
|||
|
|||
Map<String, Object> txn; |
|||
try { |
|||
txn = jdbcTemplate.queryForMap( |
|||
"SELECT * FROM transaction_response WHERE txansaction_id = ? AND status_code ='temp' ", |
|||
transactionId); |
|||
} catch (EmptyResultDataAccessException e) { |
|||
result.put("status", "error"); |
|||
result.put("message", "Transaction not found or already processed."); |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(result); |
|||
} |
|||
|
|||
int bookingId = (int) txn.get("booking_id"); |
|||
int hallId = (int) txn.get("hall_id"); |
|||
String userId = (String) txn.get("user_id"); |
|||
|
|||
jdbcTemplate.update( |
|||
"UPDATE transaction_response SET tpsl_txn_id = ?, amount = ?, date = ?, status_code = ?, response = ?, " |
|||
+ |
|||
"booking_id = ?, hall_id = ?, user_id = ? WHERE txansaction_id = ?", |
|||
pgTxnId, String.valueOf(amount), dateTime, status, |
|||
objectMapper.writeValueAsString(payload), bookingId, hallId, userId, transactionId); |
|||
|
|||
Map<String, Object> booking; |
|||
try { |
|||
booking = jdbcTemplate.queryForMap("SELECT * FROM booking_details WHERE booking_id = ?", bookingId); |
|||
} catch (EmptyResultDataAccessException e) { |
|||
result.put("status", "error"); |
|||
result.put("message", "Booking not found."); |
|||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(result); |
|||
} |
|||
|
|||
double expectedAmount = booking.get("amount_received") != null |
|||
? ((Number) booking.get("amount_received")).doubleValue() |
|||
: 0.0; |
|||
|
|||
jdbcTemplate.update("INSERT INTO payments " |
|||
+ " (transaction_id, amount_received, payment_status, cdate, booking_details_booking_id) " |
|||
+ " VALUES (?, ?, ?, ?, ?)", transactionId, amount, "Not Completed", new Date(), |
|||
bookingId); |
|||
|
|||
if (expectedAmount != amount) { |
|||
updatePaymentStatus(transactionId, "Failed"); |
|||
// bookingFailure(bookingId, 1); |
|||
result.put("status", "error"); |
|||
result.put("message", "Amount mismatch. Payment failed."); |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result); |
|||
} |
|||
|
|||
if ("success".equalsIgnoreCase(status)) { |
|||
updatePaymentStatus(transactionId, "Success"); |
|||
confirmBooking(bookingId); |
|||
|
|||
String acknowledgementUrl = "https://gccservices.chennaicorporation.gov.in/communityhall/user/acknowledgement?bookingId=" |
|||
+ bookingId; |
|||
result.put("status", "success"); |
|||
result.put("message", "Payment processed successfully."); |
|||
result.put("acknowledgement_url", acknowledgementUrl); |
|||
return ResponseEntity.ok(result); |
|||
} else { |
|||
updatePaymentStatus(transactionId, "Failed"); |
|||
result.put("status", "error"); |
|||
result.put("message", "Payment failed."); |
|||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result); |
|||
} |
|||
} |
|||
|
|||
public void updatePaymentStatus(String transactionId, String status) { |
|||
jdbcTemplate.update("UPDATE payments SET payment_status = ? WHERE transaction_id = ?", status, transactionId); |
|||
} |
|||
|
|||
@Transactional(value = "mysqlCommunityHallTransactionManager", propagation = Propagation.REQUIRES_NEW) |
|||
public void bookingFailure(int bookingId, int flag) { |
|||
String comment = flag == 1 ? "Booking Not Confirmed" |
|||
: "Slot occupied by other user, Amount paid will be refunded."; |
|||
jdbcTemplate.update("UPDATE booking_details SET booking_status = 'REFUNDED', comments = ? WHERE booking_id = ?", |
|||
comment, bookingId); |
|||
/* |
|||
* String refundStatus = booking.get("refund_status").toString(); |
|||
* if (!("COMPLETED".equalsIgnoreCase(refundStatus)) && |
|||
* !("CLOSED".equalsIgnoreCase(refundStatus))) { |
|||
* refundTheAmount(bookingId, Integer.parseInt(userId)); |
|||
* } |
|||
*/ |
|||
} |
|||
|
|||
@Transactional("mysqlCommunityHallTransactionManager") |
|||
public String confirmBooking(int bookingId) { |
|||
Map<String, Object> booking = jdbcTemplate.queryForMap("SELECT * FROM booking_details WHERE booking_id = ?", |
|||
bookingId); |
|||
try { |
|||
int hallId = (int) booking.get("hall_details_hall_id"); |
|||
LocalDate startDate = LocalDate.parse((String) booking.get("start_date")); |
|||
LocalDate endDate = LocalDate.parse((String) booking.get("end_date")); |
|||
int startSlot = (int) booking.get("starting_slot"); |
|||
int endSlot = (int) booking.get("ending_slot"); |
|||
double noOfDays = booking.get("no_of_days") != null ? (double) booking.get("no_of_days") : 1.0; |
|||
|
|||
// int i = 0; |
|||
// for (LocalDate date = startDate; !date.isAfter(endDate); date = |
|||
// date.plusDays(1)) { |
|||
// String checkSql = "SELECT * FROM booking_calendar WHERE bdate = ? AND hall_id |
|||
// = ?"; |
|||
// List<Map<String, Object>> existing = jdbcTemplate.queryForList(checkSql, |
|||
// date, hallId); |
|||
|
|||
// if (!existing.isEmpty()) { |
|||
// Map<String, Object> cal = existing.get(0); |
|||
// if ((boolean) cal.get("is_blocked")) throw new RuntimeException("GCC Blocked |
|||
// Date"); |
|||
// boolean morningBooked = (boolean) cal.get("morning_slot"); |
|||
// boolean eveningBooked = (boolean) cal.get("evening_slot"); |
|||
// if ((date.equals(startDate) && startSlot == 1 && morningBooked) || |
|||
// (date.equals(startDate) && startSlot == 2 && eveningBooked) || |
|||
// (date.equals(endDate) && endSlot == 1 && morningBooked) || |
|||
// (date.equals(endDate) && endSlot == 2 && eveningBooked)) { |
|||
// throw new RuntimeException("Slot already booked or partially occupied"); |
|||
// } |
|||
// updateCalendarWithBooking(date, bookingId, hallId, startDate, endDate, |
|||
// startSlot, endSlot, i); |
|||
// } else { |
|||
// insertCalendarWithBooking(date, bookingId, hallId, startDate, endDate, |
|||
// startSlot, endSlot, i); |
|||
// } |
|||
// i++; |
|||
// } |
|||
|
|||
int i = 0; |
|||
for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { |
|||
|
|||
String checkSql = "SELECT * FROM booking_calendar WHERE bdate = ? AND hall_id = ?"; |
|||
List<Map<String, Object>> existing = jdbcTemplate.queryForList(checkSql, date, hallId); |
|||
|
|||
if (!existing.isEmpty()) { |
|||
Map<String, Object> cal = existing.get(0); |
|||
if ((boolean) cal.get("is_blocked")) |
|||
throw new RuntimeException("GCC Blocked Date"); |
|||
|
|||
boolean morningBooked = (boolean) cal.get("morning_slot"); |
|||
boolean eveningBooked = (boolean) cal.get("evening_slot"); |
|||
int isBooked = (int) cal.get("is_booked"); |
|||
String bookingId1 = (String) cal.get("booking_id_1"); |
|||
String bookingId2 = (String) cal.get("booking_id_2"); |
|||
|
|||
// ====== Validation ====== |
|||
if ((date.equals(startDate) && startSlot == 1 && morningBooked) || |
|||
(date.equals(startDate) && startSlot == 2 && eveningBooked) || |
|||
(date.equals(endDate) && endSlot == 1 && morningBooked) || |
|||
(date.equals(endDate) && endSlot == 2 && eveningBooked) || |
|||
(morningBooked && eveningBooked)) { |
|||
throw new RuntimeException("Slot already booked or partially occupied"); |
|||
} |
|||
|
|||
// ====== Update slots ====== |
|||
if (date.equals(startDate)) { |
|||
if (startSlot == 1) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
if (!date.equals(endDate) || (startDate.equals(endDate) && endSlot == 2)) { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} else { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} else if (date.equals(endDate)) { |
|||
if (endSlot == 1) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} else { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
if (endSlot == 2) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} |
|||
} else { |
|||
morningBooked = true; |
|||
eveningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked += 2; |
|||
} |
|||
|
|||
// ====== Run UPDATE ====== |
|||
String updateSql = "UPDATE booking_calendar " + |
|||
"SET morning_slot=?, evening_slot=?, is_booked=?, booking_id_1=?, booking_id_2=? " + |
|||
"WHERE bdate=? AND hall_id=?"; |
|||
jdbcTemplate.update(updateSql, |
|||
morningBooked, eveningBooked, isBooked, bookingId1, bookingId2, |
|||
date, hallId); |
|||
|
|||
} else { |
|||
// ====== Insert new row ====== |
|||
boolean morningBooked = false; |
|||
boolean eveningBooked = false; |
|||
boolean isDelete = false; |
|||
boolean isBlocked = false; |
|||
int isBooked = 0; |
|||
String bookingId1 = null, bookingId2 = null; |
|||
|
|||
if (date.equals(startDate)) { |
|||
if (startSlot == 1) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
if (!date.equals(endDate) || (startDate.equals(endDate) && endSlot == 2)) { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} else { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} else if (date.equals(endDate)) { |
|||
if (endSlot == 1) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} else { |
|||
eveningBooked = true; |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
if (endSlot == 2) { |
|||
morningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
isBooked++; |
|||
} |
|||
} |
|||
} else { |
|||
morningBooked = true; |
|||
eveningBooked = true; |
|||
bookingId1 = String.valueOf(bookingId); |
|||
bookingId2 = String.valueOf(bookingId); |
|||
isBooked += 2; |
|||
} |
|||
|
|||
String uniqueId = date.format(DateTimeFormatter.ofPattern("yyyyMMdd")) + hallId; |
|||
|
|||
System.out.println("uniqueId...."+uniqueId+"\n hallId: "+hallId+"\n morningBooked: "+morningBooked+ |
|||
"\n eveningBooked: "+eveningBooked+"\n isBooked: "+isBooked+"\n bookingId1: "+bookingId1+"\n bookingId2: "+bookingId2); |
|||
|
|||
String insertSql = "INSERT INTO booking_calendar " + |
|||
"(bdate, hall_id, morning_slot, evening_slot, is_booked, booking_id_1, booking_id_2, is_active, unique_id, is_delete, is_blocked) " |
|||
+"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
|||
jdbcTemplate.update(insertSql,date, hallId, morningBooked, eveningBooked, isBooked,bookingId1, bookingId2, true, uniqueId, isDelete, isBlocked); |
|||
} |
|||
i++; |
|||
} |
|||
|
|||
String reason = (String) booking.get("reason"); |
|||
String reasonCode = fetchReasonCode(reason); |
|||
|
|||
String status = "APPROVED"; |
|||
String comments = "Booking Confirmed Successfully"; |
|||
if (reasonCode != null && !reasonCode.trim().isEmpty()) { |
|||
if (List.of("CGE", "CAO", "SGE").contains(reasonCode)) { |
|||
status = "WAITING_FOR_NOC"; |
|||
comments = "Waiting For NOC Documents"; |
|||
} |
|||
} |
|||
|
|||
jdbcTemplate.update("UPDATE booking_details SET booking_status = ?, comments = ? WHERE booking_id = ?", |
|||
status, comments, bookingId); |
|||
|
|||
sendConfirmationMessages(bookingId, booking); |
|||
return comments; |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
// bookingFailure(bookingId, 2); |
|||
return "redirect:/communityhall/user/acknowledgement?bookingId=" + bookingId; |
|||
} |
|||
} |
|||
|
|||
private void updateCalendarWithBooking(LocalDate date, int bookingId, int hallId, LocalDate startDate, |
|||
LocalDate endDate, int startSlot, int endSlot, int i) { |
|||
String updateSql = "UPDATE booking_calendar SET morning_slot = ?, evening_slot = ?, booking_id_1 = ?, booking_id_2 = ?, is_booked = is_booked + ? WHERE bdate = ? AND hall_id = ?"; |
|||
boolean isMorning = true; |
|||
boolean isEvening = true; |
|||
int increment = 2; |
|||
jdbcTemplate.update(updateSql, isMorning, isEvening, bookingId, bookingId, increment, date, hallId); |
|||
} |
|||
|
|||
private void insertCalendarWithBooking(LocalDate date, int bookingId, int hallId, LocalDate startDate, |
|||
LocalDate endDate, int startSlot, int endSlot, int i) { |
|||
String uniqueId = date.format(DateTimeFormatter.ofPattern("yyyyMMdd")) + hallId; |
|||
String insertSql = "INSERT INTO booking_calendar (bdate, hall_id, is_active, is_booked, is_delete, morning_slot, evening_slot, booking_id_1, booking_id_2, is_blocked, unique_id) VALUES (?, ?, true, ?, false, ?, ?, ?, ?, false, ?)"; |
|||
jdbcTemplate.update(insertSql, date, hallId, 2, true, true, bookingId, bookingId, uniqueId); |
|||
} |
|||
|
|||
private String fetchReasonCode(String reason) { |
|||
try { |
|||
String sql = "SELECT reasoncode FROM reason_master WHERE reason = ?"; |
|||
return jdbcTemplate.queryForObject(sql, String.class, reason); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
return ""; |
|||
} |
|||
} |
|||
|
|||
private String sendConfirmationMessages(int bookingId, Map<String, Object> booking) { |
|||
System.out.println("confirmation message calling.."); |
|||
try { |
|||
String bookingconfirmationmsg, urlString, whatsupmsg; |
|||
String reason = booking.get("reason").toString(); |
|||
String reasonCode = fetchReasonCode(reason); |
|||
String bookingDate = booking.get("booking_date").toString(); |
|||
String startDate = booking.get("start_date").toString(); |
|||
|
|||
int userId = Integer.parseInt(booking.get("users_user_id").toString()); |
|||
|
|||
Map<String, Object> userData = jdbcTemplate.queryForMap("SELECT * FROM users WHERE user_id = ? ", userId); |
|||
String userMobNo = userData.get("mobile_no").toString(); |
|||
|
|||
if (reasonCode != null && !reasonCode.trim().isEmpty()) { |
|||
if (reasonCode.equals("CGE") || reasonCode.equals("CAO") || reasonCode.equals("SGE")) { |
|||
|
|||
updateBookingStatus(bookingId, "WAITING_FOR_NOC", "Waiting For NOC Documents"); |
|||
|
|||
bookingconfirmationmsg = "Your booking ID " + bookingId + " on " + bookingDate |
|||
+ " has been confirmed successfully. Thanks for using GCC Community Hall Booking System."; |
|||
|
|||
urlString = "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to=" + userMobNo + |
|||
"&from=GCCCRP&body=" + bookingconfirmationmsg |
|||
+ "&entityid=1401572690000011081&templateid=1407172346459428987"; |
|||
|
|||
whatsupmsg = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" |
|||
+userMobNo + "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Your+booking+with+ID+" |
|||
+bookingId + "+on+" + bookingDate+ "+has+been+successfully+confirmed.+%0AThanks+for+using+GCC+Community+Hall+Booking+System."; |
|||
|
|||
whatsappMsgServiceImpl.sendMsg(whatsupmsg); |
|||
whatsappMsgServiceImpl.sendSMS(urlString); |
|||
return "Waiting For NOC Documents"; |
|||
|
|||
} else { |
|||
updateBookingStatus(bookingId, "APPROVED", "Booking Confirmed Successfully"); |
|||
|
|||
bookingconfirmationmsg = "Your booking ID " + bookingId + " on " + startDate |
|||
+ " has been confirmed successfully. Thanks for using GCC Community Hall Booking System."; |
|||
|
|||
urlString = "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to=" + userMobNo + |
|||
"&from=GCCCRP&body=" + bookingconfirmationmsg |
|||
+ "&entityid=1401572690000011081&templateid=1407172346459428987"; |
|||
|
|||
whatsupmsg = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" |
|||
+ |
|||
userMobNo + "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Your+booking+with+ID+" |
|||
+ |
|||
bookingId + "+on+" + startDate |
|||
+ "+has+been+successfully+confirmed.+%0AThanks+for+using+GCC+Community+Hall+Booking+System."; |
|||
|
|||
whatsappMsgServiceImpl.sendMsg(whatsupmsg); |
|||
whatsappMsgServiceImpl.sendSMS(urlString); |
|||
return "Booking confirmed successfully"; |
|||
} |
|||
} |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
throw new RuntimeException(e); |
|||
} |
|||
return "Incorrect booking data"; |
|||
} |
|||
|
|||
/* |
|||
* public String refundTheAmount(int bookingId, int userId) { |
|||
* try { |
|||
* |
|||
* // get mobile no using userId --> need to add |
|||
* Map<String, Object> txn = jdbcTemplate. |
|||
* queryForMap("SELECT * FROM transaction_response WHERE booking_id = ? AND status_code = ? ORDER BY id DESC LIMIT 1" |
|||
* , bookingId, paymentConfig.getTransactionSuccessCode()); |
|||
* String amount = (String) txn.get("amount"); |
|||
* String txnDate = ((String) txn.get("date")).split(" ")[0]; |
|||
* String tpslTxnId = (String) txn.get("tpsl_txn_id"); |
|||
* |
|||
* TransactionData payload = new TransactionData(); |
|||
* payload.getMerchant().setIdentifier(paymentConfig.getMerchantId()); |
|||
* payload.getTransaction().setAmount(amount); |
|||
* payload.getTransaction().setIdentifier(""); |
|||
* payload.getTransaction().setDateTime(txnDate); |
|||
* payload.getTransaction().setRequestType("R"); |
|||
* payload.getTransaction().setToken(""); |
|||
* payload.getTransaction().setReference(tpslTxnId); |
|||
* |
|||
* String json = objectMapper.writeValueAsString(payload); |
|||
* String encrypted = encryptionUtils.encryptHxRefund(json); |
|||
* |
|||
* String url = "https://www.tpsl-india.in/PaymentGateway/merchant2.pg/" + |
|||
* paymentConfig.getMerchantId(); |
|||
* ResponseEntity<String> response = new RestTemplate().postForEntity(url, |
|||
* encrypted, String.class); |
|||
* String decrypted = encryptionUtils.decryptHxTRefund(response.getBody()); |
|||
* |
|||
* TransactionRefundResponse refundRes = objectMapper.readValue(decrypted, |
|||
* TransactionRefundResponse.class); |
|||
* String refundStatusCode = |
|||
* refundRes.getPaymentMethod().getPaymentTransaction().getStatusCode(); |
|||
* String refundTxnId = refundRes.getMerchantTransactionIdentifier(); |
|||
* String refundIdentifier = |
|||
* refundRes.getPaymentMethod().getPaymentTransaction().getRefundIdentifier(); |
|||
* String refundedAmount = |
|||
* refundRes.getPaymentMethod().getPaymentTransaction().getAmount(); |
|||
* String balanceAmount = |
|||
* refundRes.getPaymentMethod().getPaymentTransaction().getBalanceAmount(); |
|||
* |
|||
* jdbcTemplate. |
|||
* update("INSERT INTO refund_response (booking_id, user_id, response, status_code, txansaction_id, amount, balace_amount, date) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" |
|||
* , bookingId, userId, decrypted, refundStatusCode, refundTxnId, |
|||
* refundedAmount, balanceAmount, LocalDate.now()); |
|||
* |
|||
* Map<String, Object> booking = |
|||
* jdbcTemplate.queryForMap("SELECT * FROM booking_details WHERE booking_id = ?" |
|||
* , bookingId); |
|||
* |
|||
* jdbcTemplate. |
|||
* update("INSERT INTO refund_transaction (amount_refunded, cdate, booking_details_booking_id, refund_identifier, refund_status, transaction_id) VALUES (?, ?, ?, ?, ?, ?)" |
|||
* , Double.parseDouble(refundedAmount), new Date(), bookingId, |
|||
* refundIdentifier, refundStatusCode, refundTxnId); |
|||
* |
|||
* if (refundStatusCode.equals(paymentConfig.getRefundSuccessCode())) { |
|||
* jdbcTemplate. |
|||
* update("UPDATE booking_details SET refund_status = 'COMPLETED' WHERE booking_id = ?" |
|||
* , bookingId); |
|||
* |
|||
* long mobile = (long) booking.get("users_user_id"); |
|||
* double amt = Double.parseDouble(refundedAmount); |
|||
* whatsappMsgServiceImpl.sendSMS(buildSMSUrl(mobile, amt, bookingId)); |
|||
* whatsappMsgServiceImpl.sendMsg(buildWhatsAppUrl(mobile, amt, bookingId)); |
|||
* return "Refunded"; |
|||
* } |
|||
* |
|||
* return "Error"; |
|||
* } catch (Exception e) { |
|||
* e.printStackTrace(); |
|||
* return "error"; |
|||
* } |
|||
* } |
|||
*/ |
|||
|
|||
private String buildSMSUrl(long mobile, double amt, int bookingId) { |
|||
return "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to=" + mobile |
|||
+ "&from=GCCCRP&body=Your refund amount of Rs. " + amt + " for Booking ID " + bookingId |
|||
+ " has been initiated."; |
|||
} |
|||
|
|||
private String buildWhatsAppUrl(long mobile, double amt, int bookingId) { |
|||
return "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" + mobile |
|||
+ "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Your+refund+of+Rs.+" + amt |
|||
+ "+for+Booking+ID+" + bookingId + "+has+been+initiated."; |
|||
} |
|||
|
|||
public void updateBookingStatus(int bookingId, String bookingStatus, String comments) { |
|||
String updateSql = "update booking_details set booking_status =?, comments= ? WHERE booking_id = ?"; |
|||
jdbcTemplate.update(updateSql, bookingStatus, comments, bookingId); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
package com.gcc.restapiservices.victoriaHallBooking.service; |
|||
|
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.web.client.RestTemplate; |
|||
|
|||
import java.net.HttpURLConnection; |
|||
import java.net.URL; |
|||
|
|||
@Service |
|||
public class WhatsappMsgService { |
|||
|
|||
public String sendMsg(String msgUrl) { |
|||
System.out.println("Whatsapp URL :-" + msgUrl); |
|||
|
|||
String response = ""; |
|||
try { |
|||
HttpURLConnection connection = null; |
|||
|
|||
URL url = new URL(msgUrl); |
|||
connection = (HttpURLConnection) url.openConnection(); |
|||
connection.setRequestMethod("GET"); |
|||
|
|||
int responseCode = connection.getResponseCode(); |
|||
response = responseCode + ""; |
|||
System.out.println("Response Code: " + responseCode); |
|||
|
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return response; |
|||
} |
|||
|
|||
public String sendSMS(String SMS_Url) { |
|||
System.out.println("SMS URL:- " + SMS_Url); |
|||
RestTemplate restTemplate = new RestTemplate(); |
|||
String response = restTemplate.getForObject(SMS_Url, String.class); |
|||
return response; |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,849 @@ |
|||
|
|||
package com.gcc.restapiservices.victoriaHallBooking.service; |
|||
|
|||
import com.gcc.restapiservices.victoriaHallBooking.configuration.VPHPaymentConfig; |
|||
import com.gcc.restapiservices.victoriaHallBooking.util.VPHTransactionNumberGenerator; |
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.core.env.Environment; |
|||
import org.springframework.dao.DataAccessException; |
|||
import org.springframework.dao.EmptyResultDataAccessException; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.jdbc.support.GeneratedKeyHolder; |
|||
import org.springframework.jdbc.support.KeyHolder; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
import org.springframework.web.bind.annotation.RequestParam; |
|||
import org.springframework.web.client.RestTemplate; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import java.util.Random; |
|||
|
|||
import com.gcc.restapiservices.configuration.AppConfig; |
|||
|
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
|
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpSession; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Random; |
|||
import java.io.File; |
|||
import java.io.FileOutputStream; |
|||
import java.io.IOException; |
|||
import java.math.BigInteger; |
|||
import java.nio.file.Files; |
|||
import java.nio.file.Path; |
|||
import java.nio.file.Paths; |
|||
import java.security.MessageDigest; |
|||
import java.security.NoSuchAlgorithmException; |
|||
import java.security.SecureRandom; |
|||
import java.sql.PreparedStatement; |
|||
import java.sql.Statement; |
|||
import java.time.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.ArrayList; |
|||
import java.util.Collections; |
|||
import java.util.HashMap; |
|||
|
|||
@Service |
|||
|
|||
public class victoriaHallService { |
|||
private JdbcTemplate jdbcTemplate; |
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
@Autowired |
|||
private Environment environment; |
|||
|
|||
@Autowired |
|||
private VPHPaymentConfig paymentConfig; |
|||
|
|||
@Autowired |
|||
private VPHTransactionNumberGenerator transactionNumberGenerator; |
|||
|
|||
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; |
|||
private static final int STRING_LENGTH = 15; |
|||
private static final Random RANDOM = new SecureRandom(); |
|||
|
|||
@Value("${file.upload.directory.victoriahall}") |
|||
private String uploadDirectory; |
|||
|
|||
@Value("${file.fullpath.victoriahall}") |
|||
private String serverPath; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlVictoriaHallDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getHallList() { |
|||
return jdbcTemplate.queryForList("SELECT * FROM hall_details WHERE is_active = 1 order by hall_name asc"); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getReasonMaster() { |
|||
String sql = "SELECT reason_id,reason,maxdays,reasoncode FROM reason_master"; |
|||
return jdbcTemplate.queryForList(sql); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getDocumentsByReasonId(Long reasonId) { |
|||
String sql = "SELECT doc_field_name,field_name FROM reason_document_master WHERE reason_id = ?"; |
|||
return jdbcTemplate.queryForList(sql, reasonId); |
|||
} |
|||
|
|||
public List<Map<String, String>> getRelationTypesAsMap() { |
|||
List<Map<String, String>> relationList = new ArrayList<>(); |
|||
|
|||
String[] relations = {"Self"}; |
|||
|
|||
for (String rel : relations) { |
|||
Map<String, String> map = new HashMap<>(); |
|||
map.put("relation_name", rel); |
|||
map.put("value", rel); |
|||
relationList.add(map); |
|||
} |
|||
|
|||
return relationList; |
|||
} |
|||
|
|||
public List<Map<String, Object>> getUserDetails(Long Mobilenumber) { |
|||
String sql = "SELECT name,email,mobile_no,doorno,area,location,pin_code,user_status,usertype,profilephoto FROM users WHERE mobile_no = ?"; |
|||
return jdbcTemplate.queryForList(sql, Mobilenumber); |
|||
} |
|||
|
|||
public Map<String, Object> getHallDetailsById(int hallId) { |
|||
String sql = "SELECT * FROM hall_details WHERE hall_id = ?"; |
|||
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, hallId); |
|||
|
|||
if (result.isEmpty()) { |
|||
return null; // or Collections.emptyMap() if you prefer |
|||
} |
|||
|
|||
return result.get(0); |
|||
} |
|||
|
|||
public Map<String, Object> getHallConcessionByHallId(int hallId) { |
|||
String sql = "SELECT * FROM hall_details_concession WHERE hall_id = ?"; |
|||
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, hallId); |
|||
|
|||
if (result.isEmpty()) { |
|||
return null; // or Collections.emptyMap() |
|||
} |
|||
|
|||
return result.get(0); // ✅ safe return of first result |
|||
} |
|||
|
|||
public List<Map<String, Object>> checkMobileExits(Long Mobilenumber) { |
|||
String sql = "SELECT * FROM users WHERE mobile_no = ?"; |
|||
return jdbcTemplate.queryForList(sql, Mobilenumber); |
|||
} |
|||
|
|||
public List<Map<String, Object>> checkEmployeeExits(String EmployeeID) { |
|||
String sql = "SELECT * FROM users WHERE government_id= ?"; |
|||
return jdbcTemplate.queryForList(sql, EmployeeID); |
|||
} |
|||
|
|||
/* |
|||
* public Map<String, Object> getBookingDetailsById(int bookingId) { String sql |
|||
* = "SELECT " + |
|||
* "bd.booking_id, bd.booking_date, bd.start_date, bd.end_date, bd.comments, bd.booking_status, " |
|||
* + |
|||
* "bd.starting_slot, bd.ending_slot, bd.no_of_days, bd.reason, bd.gst, bd.deposit_amount, " |
|||
* + "bd.hall_amount, bd.amount_received AS booking_amount_received, " + |
|||
* "u.name, u.usertype, u.mobile_no, u.email, " + |
|||
* "hd.zone, hd.division, hd.hall_incharge_name, hd.hall_incharge_no, hd.hall_name, " |
|||
* + "CONCAT_WS(', ', hd.street, hd.area, hd.pin_code) AS address, " + |
|||
* "p.transaction_id, p.payment_status, p.amount_received AS payment_amount_received " |
|||
* + "FROM booking_details bd " + |
|||
* "INNER JOIN users u ON bd.users_user_id = u.user_id " + |
|||
* "INNER JOIN hall_details hd ON bd.hall_details_hall_id = hd.hall_id " + |
|||
* "INNER JOIN payments p ON bd.booking_id = p.booking_details_booking_id " + |
|||
* "WHERE bd.booking_id = ?"; |
|||
* |
|||
* return jdbcTemplate.queryForMap(sql, bookingId); } |
|||
*/ |
|||
public Map<String, Object> getBookingDetailsById(int bookingId) { |
|||
String sql = "SELECT " |
|||
+ "bd.booking_id, DATE_FORMAT(bd.booking_date, '%d-%m-%Y') AS booking_date, " |
|||
+ " DATE_FORMAT(bd.start_date, '%d-%m-%Y') AS start_date, " |
|||
+ " DATE_FORMAT(bd.end_date, '%d-%m-%Y') AS end_date, " |
|||
+ " bd.comments, bd.booking_status, " |
|||
+ "bd.starting_slot, bd.ending_slot, bd.no_of_days, bd.reason, bd.gst, bd.deposit_amount, " |
|||
+ "bd.hall_amount, bd.amount_received AS total_amount, " + "u.name, u.usertype, u.mobile_no, u.email, " |
|||
+ "hd.zone, hd.division, hd.hall_incharge_name as caretaker_name, hd.hall_incharge_no as caretaker_mobileno, hd.hall_name, " |
|||
+ "CONCAT_WS(', ', hd.street, hd.area, hd.pin_code) AS hall_address, " |
|||
+ "p.transaction_id, p.payment_status, p.amount_received AS payment_amount_received " |
|||
+ "FROM booking_details bd " + "INNER JOIN users u ON bd.users_user_id = u.user_id " |
|||
+ "INNER JOIN hall_details hd ON bd.hall_details_hall_id = hd.hall_id " |
|||
+ "INNER JOIN payments p ON bd.booking_id = p.booking_details_booking_id " + "WHERE bd.booking_id = ?"; |
|||
|
|||
Map<String, Object> result = jdbcTemplate.queryForMap(sql, bookingId); |
|||
|
|||
// Add the acknowledgement URL to the result |
|||
String acknowledgementUrl = "https://gccservices.chennaicorporation.gov.in/communityhall/user/acknowledgement?bookingId=" + bookingId; |
|||
result.put("acknowledgement_url", acknowledgementUrl); |
|||
|
|||
return result; |
|||
} |
|||
|
|||
public List<Map<String, Object>> getBookingsByMobile(Long mobileNumber) { |
|||
String sql = "SELECT bd.booking_id , DATE_FORMAT(bd.booking_date, '%d-%m-%Y') AS booking_date," |
|||
+ " DATE_FORMAT(bd.start_date, '%d-%m-%Y') AS start_date," |
|||
+ " DATE_FORMAT(bd.end_date, '%d-%m-%Y') AS end_date, " |
|||
+ "bd.starting_slot, bd.ending_slot, bd.reason, bd.booking_status, " |
|||
+ "p.payment_status AS payment_status " + "FROM booking_details bd " |
|||
+ "INNER JOIN users u ON bd.users_user_id = u.user_id " |
|||
+ "INNER JOIN payments p ON bd.booking_id = p.booking_details_booking_id " |
|||
+ "WHERE u.mobile_no = ? " + "AND bd.booking_status NOT IN ('PENDING')"; |
|||
|
|||
List<Map<String, Object>> bookings = jdbcTemplate.queryForList(sql, mobileNumber); |
|||
|
|||
// Add acknowledgement URL to each booking |
|||
for (Map<String, Object> booking : bookings) { |
|||
Object bookingId = booking.get("booking_id"); |
|||
if (bookingId != null) { |
|||
String acknowledgementUrl = "https://gccservices.chennaicorporation.gov.in/communityhall/user/acknowledgement?bookingId=" |
|||
+ bookingId; |
|||
booking.put("acknowledgement_url", acknowledgementUrl); |
|||
} |
|||
} |
|||
|
|||
return bookings; |
|||
} |
|||
|
|||
public List<Map<String, Object>> checkPenionerExits(String PensionerID) { |
|||
String sql = "SELECT * FROM users WHERE government_id= ?"; |
|||
return jdbcTemplate.queryForList(sql, PensionerID); |
|||
} |
|||
|
|||
// |
|||
public List<Map<String, Object>> findCounsellorByMobile(long mobileNo) { |
|||
String sql = "SELECT * FROM counsellor_details WHERE mobile1 = ? OR mobile2 = ?"; |
|||
return jdbcTemplate.queryForList(sql, mobileNo, mobileNo); |
|||
} |
|||
|
|||
public void registerUser(String userType, String name, long mobileNumber, String aadharNumber, |
|||
MultipartFile profilePhoto, String emailId, String doorNo, String street, String area, String location, |
|||
String pincode, String pensionerID, String pensionerDepartment, String employeeID, |
|||
String employeeDepartment) throws IOException { |
|||
|
|||
String uploadPhotoUrl = null; |
|||
if (profilePhoto != null && !profilePhoto.isEmpty()) { |
|||
uploadPhotoUrl = saveFile(profilePhoto); |
|||
} |
|||
|
|||
// Default values for government_id and department |
|||
String governmentId = null; |
|||
String department = null; |
|||
|
|||
String userstatus = "APPROVED"; |
|||
|
|||
// Logic for conditional insertion based on userType |
|||
if ("GCC PENSIONER".equalsIgnoreCase(userType)) { |
|||
|
|||
governmentId = pensionerID; |
|||
department = pensionerDepartment; |
|||
userstatus = "PENDING"; |
|||
} else if ("GCC EMPLOYEE".equalsIgnoreCase(userType)) { |
|||
governmentId = employeeID; |
|||
department = employeeDepartment; |
|||
userstatus = "PENDING"; |
|||
} |
|||
|
|||
String sql = "INSERT INTO users (usertype, name, mobile_no, aadhar_number, profilephoto, email, " |
|||
+ "doorno, street, area, location, pin_code, government_id, department,user_status) " |
|||
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)"; |
|||
|
|||
jdbcTemplate.update(sql, userType, name, mobileNumber, aadharNumber, uploadPhotoUrl, emailId, doorNo, street, |
|||
area, location, pincode, governmentId, department, userstatus); |
|||
} |
|||
|
|||
public String saveFile(MultipartFile file) throws IOException { |
|||
String order_copy_url = ""; |
|||
|
|||
// Handle file upload if a file is provided |
|||
if (file == null || file.isEmpty()) { |
|||
return order_copy_url; |
|||
} |
|||
|
|||
// Get the base upload directory from properties |
|||
String uploadDirectory = environment.getProperty("file.upload.directory"); // e.g., /opt/myapp/uploads |
|||
|
|||
// Define the subdirectory structure |
|||
String serviceFolderName = "images/userPhoto"; // You can also get from properties if needed |
|||
|
|||
// Build the full folder path |
|||
String fullUploadPath = uploadDirectory + File.separator + serviceFolderName; |
|||
Path directoryPath = Paths.get(fullUploadPath); |
|||
if (!Files.exists(directoryPath)) { |
|||
Files.createDirectories(directoryPath); |
|||
} |
|||
|
|||
// Generate unique file name |
|||
// String datetimetxt = DateTimeUtil.getCurrentDateTime(); |
|||
String fileName = generateRandomStringForFile(10) + "_" + file.getOriginalFilename(); |
|||
|
|||
// Physical file path |
|||
Path filePath = directoryPath.resolve(fileName); |
|||
|
|||
// Write the file to the physical path |
|||
Files.write(filePath, file.getBytes()); |
|||
|
|||
// Relative path for storing in DB |
|||
String filepath_txt = "/" + serviceFolderName + "/" + fileName; |
|||
|
|||
return filepath_txt; |
|||
} |
|||
|
|||
public static String generateRandomStringForFile(int String_Lenth) { |
|||
StringBuilder result = new StringBuilder(String_Lenth); |
|||
for (int i = 0; i < STRING_LENGTH; i++) { |
|||
result.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length()))); |
|||
} |
|||
return result.toString(); |
|||
|
|||
} |
|||
|
|||
@Transactional("mysqlVictoriaHallTransactionManager") |
|||
public Map<String, Object> saveBookingDetails(Map<String, Object> formData) { |
|||
Map<String, Object> hs = new HashMap<>(); |
|||
|
|||
Map<String, Object> userMaster = jdbcTemplate.queryForMap("SELECT * FROM users WHERE mobile_no = ?", |
|||
(formData.get("mobNo").toString())); |
|||
|
|||
Integer userId = (Integer) userMaster.get("user_id"); |
|||
|
|||
Map<String, Object> reasonMaster = jdbcTemplate.queryForMap("SELECT * FROM reason_master WHERE reason_id = ?", |
|||
Integer.parseInt(formData.get("reasonId").toString())); |
|||
|
|||
Map<String, Object> hallDetails = jdbcTemplate.queryForMap("SELECT * FROM hall_details WHERE hall_id = ?", |
|||
Integer.parseInt(formData.get("hallId").toString())); |
|||
|
|||
// Fetch User |
|||
Map<String, Object> user = jdbcTemplate.queryForMap("SELECT * FROM users WHERE user_id = ?", userId); |
|||
|
|||
String bookingId = formData.get("bookingId").toString(); |
|||
Map<String, Object> bookingDetails = null; |
|||
|
|||
if (bookingId != null && bookingId.equals("0")) { |
|||
} else { |
|||
List<Map<String, Object>> bookings = jdbcTemplate |
|||
.queryForList("SELECT * FROM booking_details WHERE booking_id = ?", Integer.parseInt(bookingId)); |
|||
if (!bookings.isEmpty()) { |
|||
bookingDetails = bookings.get(0); |
|||
jdbcTemplate.update("DELETE FROM booking_documents WHERE booking_id = ?", Integer.parseInt(bookingId)); |
|||
} |
|||
} |
|||
|
|||
if (user != null) { |
|||
String startDate = formData.get("startDate").toString(); |
|||
String endDate = formData.get("endDate").toString(); |
|||
String relation = formData.get("relation").toString(); |
|||
double days = Double.parseDouble(formData.get("days").toString()); |
|||
int daysrange = Integer.parseInt(formData.get("daysrange").toString()); |
|||
String usertype = user.get("usertype").toString(); |
|||
String reason = reasonMaster.get("reason").toString(); |
|||
int startingSlot = Integer.parseInt(formData.get("startingSlot").toString()); |
|||
int endingSlot = Integer.parseInt(formData.get("endingSlot").toString()); |
|||
String startingSlot_txt = formData.get("startingSlot").toString(); |
|||
String endingSlot_txt = formData.get("endingSlot").toString(); |
|||
|
|||
Map<String, Object> discountrange = jdbcTemplate |
|||
.queryForMap("SELECT * FROM discount_range WHERE usertype = ?", usertype); |
|||
float discount = Float.parseFloat(discountrange.get("discount_range").toString()); |
|||
|
|||
double hallAmount = calcHallAmountJdbc(hallDetails, daysrange, startingSlot, endingSlot); |
|||
hs.put("actualhallamount", hallAmount); |
|||
|
|||
double depositeamount = Double.parseDouble(hallDetails.get("deposit_amount").toString()); |
|||
double halfDepositAmount = Double.parseDouble(hallDetails.get("half_deposit_amount").toString()); |
|||
double Totaldepositeamount = calculateDepositAmountJdbc(daysrange, startingSlot_txt, endingSlot_txt, |
|||
depositeamount, halfDepositAmount); |
|||
depositeamount = Totaldepositeamount; |
|||
|
|||
double discountAmount = 0; |
|||
double gstAmount = 0.00; |
|||
String reasoncode = reasonMaster.get("reasoncode") != null ? reasonMaster.get("reasoncode").toString() : ""; |
|||
hs.put("reasoncode", reasoncode); |
|||
|
|||
/*Map<String, Object> governmentevents = jdbcTemplate.queryForMap( |
|||
"SELECT * FROM hall_details_concession WHERE hall_id = ?", |
|||
Integer.parseInt(hallDetails.get("hall_id").toString()));*/ |
|||
|
|||
List<Map<String, Object>> rows = jdbcTemplate.queryForList( |
|||
"SELECT * FROM hall_details_concession WHERE hall_id = ?", |
|||
Integer.parseInt(hallDetails.get("hall_id").toString()) |
|||
); |
|||
|
|||
Map<String, Object> governmentevents = rows.isEmpty() |
|||
? Collections.emptyMap() // or null, your call |
|||
: rows.get(0); |
|||
|
|||
if (reasoncode.equals("SGE")) { |
|||
if (startingSlot == 1 && endingSlot == 2) { |
|||
discountAmount = (Double.parseDouble(governmentevents.get("fulldayhallamount").toString()) |
|||
* Double.parseDouble(hallDetails.get("sgediscount").toString())) / 100; |
|||
hallAmount = Double.parseDouble(governmentevents.get("fulldayhallamount").toString()); |
|||
hs.put("discount", hallDetails.get("sgediscount")); |
|||
double cleaningCharges = Double |
|||
.parseDouble(governmentevents.get("full_day_cleaningcharges").toString()); |
|||
double PASystem = Double.parseDouble(governmentevents.get("fulldaypasystem").toString()); |
|||
double EB = Double.parseDouble(governmentevents.get("fulldayebcharges").toString()); |
|||
double additionalcharges = cleaningCharges + PASystem + EB; |
|||
gstAmount = Math.round(additionalcharges * Double.parseDouble(hallDetails.get("gst").toString())) |
|||
/ 100.0; |
|||
double depositAmount = Double.parseDouble(hallDetails.get("deposit_amount").toString()) * daysrange; |
|||
double totalAmount = additionalcharges + gstAmount + depositAmount; |
|||
double truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("actualhallamount", hallAmount); |
|||
hs.put("additionalcharges", additionalcharges); |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
|
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, additionalcharges, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} else { |
|||
hallAmount = Double.parseDouble(governmentevents.get("halfdayhallamount").toString()); |
|||
discountAmount = (hallAmount * Double.parseDouble(hallDetails.get("sgediscount").toString())) / 100; |
|||
hs.put("discount", hallDetails.get("sgediscount")); |
|||
double cleaningCharges = Double |
|||
.parseDouble(governmentevents.get("halfdaycleaningcharges").toString()); |
|||
double PASystem = Double.parseDouble(governmentevents.get("halfdaypasystem").toString()); |
|||
double EB = Double.parseDouble(governmentevents.get("halfdayebcharges").toString()); |
|||
double additionalcharges = cleaningCharges + PASystem + EB; |
|||
gstAmount = Math.round(additionalcharges * Double.parseDouble(hallDetails.get("gst").toString())) |
|||
/ 100.0; |
|||
double depositAmount = Double.parseDouble(hallDetails.get("deposit_amount").toString()) * daysrange; |
|||
double totalAmount = additionalcharges + gstAmount + depositAmount; |
|||
double truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("actualhallamount", hallAmount); |
|||
hs.put("additionalcharges", additionalcharges); |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, additionalcharges, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} |
|||
} else if (reasoncode.equals("CGE")) { |
|||
double rentAmount, netAmount, depositAmount, totalAmount, truncatedTotalAmount, additionalcharges; |
|||
if (startingSlot == 1 && endingSlot == 2) { |
|||
discountAmount = (Double.parseDouble(hallDetails.get("full_day_rent").toString()) |
|||
* Double.parseDouble(hallDetails.get("cgediscount").toString())) / 100; |
|||
hallAmount = Double.parseDouble(hallDetails.get("full_day_rent").toString()); |
|||
hs.put("discount", hallDetails.get("cgediscount")); |
|||
double cleaningCharges = Double |
|||
.parseDouble(governmentevents.get("full_day_cleaningcharges").toString()); |
|||
double PASystem = Double.parseDouble(governmentevents.get("fulldaypasystem").toString()); |
|||
double EB = Double.parseDouble(governmentevents.get("fulldayebcharges").toString()); |
|||
additionalcharges = cleaningCharges + PASystem + EB; |
|||
rentAmount = hallAmount - discountAmount; |
|||
netAmount = rentAmount + additionalcharges; |
|||
gstAmount = Math.round(netAmount * Double.parseDouble(hallDetails.get("gst").toString())) / 100.0; |
|||
depositAmount = Double.parseDouble(hallDetails.get("deposit_amount").toString()) * daysrange; |
|||
totalAmount = netAmount + gstAmount + depositAmount; |
|||
truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("actualhallamount", hallAmount); |
|||
hs.put("rentAmount", rentAmount); |
|||
hs.put("gstAmount", gstAmount); |
|||
hs.put("netAmount", netAmount); |
|||
hs.put("additionalcharges", additionalcharges); |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, netAmount, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} else { |
|||
discountAmount = (Double.parseDouble(hallDetails.get("half_day_rent").toString()) |
|||
* Double.parseDouble(hallDetails.get("cge_discount").toString())) / 100; |
|||
hallAmount = Double.parseDouble(hallDetails.get("half_day_rent").toString()); |
|||
hs.put("discount", hallDetails.get("cgediscount")); |
|||
double cleaningCharges = Double |
|||
.parseDouble(governmentevents.get("half_day_cleaningcharges").toString()); |
|||
double PASystem = Double.parseDouble(governmentevents.get("halfdaypasystem").toString()); |
|||
double EB = Double.parseDouble(governmentevents.get("halfdayebcharges").toString()); |
|||
additionalcharges = cleaningCharges + PASystem + EB; |
|||
rentAmount = hallAmount - discountAmount; |
|||
netAmount = rentAmount + additionalcharges; |
|||
gstAmount = Math.round(netAmount * Double.parseDouble(hallDetails.get("gst").toString())) / 100.0; |
|||
depositAmount = Double.parseDouble(hallDetails.get("deposit_amount").toString()) * daysrange; |
|||
totalAmount = netAmount + gstAmount + depositAmount; |
|||
truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("actualhallamount", hallAmount); |
|||
hs.put("rentAmount", rentAmount); |
|||
hs.put("gstAmount", gstAmount); |
|||
hs.put("netAmount", netAmount); |
|||
hs.put("additionalcharges", additionalcharges); |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, netAmount, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} |
|||
} else { |
|||
|
|||
if (usertype.equals("COUNCILLOR") || usertype.equals("PENSIONER") || usertype.equals("GCC_EMPLOYEE") |
|||
|| usertype.equals("PUBLIC")) { |
|||
discountAmount = (hallAmount * discount) / 100; |
|||
hallAmount = hallAmount - discountAmount; |
|||
gstAmount = Math.round(hallAmount * Double.parseDouble(hallDetails.get("gst").toString())) / 100.0; |
|||
double totalAmount = hallAmount + gstAmount + depositeamount; |
|||
double truncatedTotalAmount = Math.round(totalAmount * 100.0) / 100.0; |
|||
hs.put("totalAmount", truncatedTotalAmount); |
|||
bookingId = insertOrUpdateBookingDetailsJdbc(jdbcTemplate, bookingId, user, hallDetails, startDate, |
|||
endDate, days, startingSlot, endingSlot, depositeamount, hallAmount, gstAmount, |
|||
truncatedTotalAmount, reason, relation, "WAITING", "Booking Slot not Confirmed.", "ONLINE"); |
|||
} |
|||
} |
|||
|
|||
System.out.println("bookingId...." + bookingId); |
|||
|
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
LocalDate start = LocalDate.parse(startDate, formatter); |
|||
LocalDate end = LocalDate.parse(endDate, formatter); |
|||
int hallId = Integer.parseInt(hallDetails.get("hall_id").toString()); |
|||
int i = 0; |
|||
for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) { |
|||
Map<String, Object> bookingCalendar = null; |
|||
List<Map<String, Object>> calList = jdbcTemplate.queryForList( |
|||
"SELECT * FROM booking_calendar WHERE bdate = ? AND hall_id = ?", date.toString(), hallId); |
|||
if (!calList.isEmpty()) |
|||
bookingCalendar = calList.get(0); |
|||
|
|||
if (bookingCalendar != null) { |
|||
boolean morningSlot = Boolean.TRUE.equals(bookingCalendar.get("morning_slot")); |
|||
boolean eveningSlot = Boolean.TRUE.equals(bookingCalendar.get("evening_slot")); |
|||
if ((date.equals(start) && startingSlot == 1 && morningSlot) |
|||
|| (date.equals(start) && startingSlot == 2 && eveningSlot) |
|||
|| (date.equals(end) && endingSlot == 1 && morningSlot) |
|||
|| (date.equals(end) && endingSlot == 2 && eveningSlot)) { |
|||
return Collections.singletonMap("status", "slotOccupied"); |
|||
} else if (morningSlot && eveningSlot) { |
|||
return Collections.singletonMap("status", "slotOccupied"); |
|||
} else if (!date.equals(end) && i != 0 && i != Math.round(days - 1) |
|||
&& (morningSlot || eveningSlot)) { |
|||
return Collections.singletonMap("status", "slotOccupied"); |
|||
} else if (date.equals(end) && endingSlot == 2 && morningSlot && i != 0 |
|||
&& i == Math.round(days - 1)) { |
|||
return Collections.singletonMap("status", "slotOccupied"); |
|||
} |
|||
} |
|||
i++; |
|||
} |
|||
|
|||
List<Map<String, Object>> reasonDocMaster = jdbcTemplate.queryForList( |
|||
"SELECT * FROM reason_document_master WHERE reason_id = ?", |
|||
Integer.parseInt(formData.get("reasonId").toString())); |
|||
List<Map<String, Object>> uploadedDocs = new ArrayList<>(); |
|||
for (Map<String, Object> rm : reasonDocMaster) { |
|||
Map<String, Object> docMap = new HashMap<>(); |
|||
String fieldName = ""; |
|||
String value = ""; |
|||
String fileName = ""; |
|||
String fileUrl = ""; |
|||
String filePath = ""; |
|||
if (Boolean.TRUE.equals(rm.get("add_text_field"))) { |
|||
fieldName = rm.get("field_name").toString(); |
|||
value = formData.get(fieldName).toString(); |
|||
jdbcTemplate.update( |
|||
"INSERT INTO booking_documents (booking_details_booking_id, booking_label, name) VALUES (?, ?, ?)", |
|||
Integer.parseInt(bookingId), fieldName, value); |
|||
docMap.put("booking_label", fieldName); |
|||
docMap.put("name", value); |
|||
} |
|||
if (Boolean.TRUE.equals(rm.get("add_document_field"))) { |
|||
String docFieldName = rm.get("doc_field_name").toString(); |
|||
MultipartFile file = (MultipartFile) formData.get(docFieldName); |
|||
fileName = bookingId + "_" + file.getOriginalFilename(); |
|||
fileUrl = serverPath + "images/" + reason + "/" + fileName; |
|||
filePath = uploadDirectory + "/" + reason + "/" + fileName; |
|||
|
|||
// Create directory if it doesn't exist |
|||
File directory = new File(uploadDirectory + "/" + reason); |
|||
if (!directory.exists()) { |
|||
directory.mkdirs(); // Creates parent directories if needed |
|||
} |
|||
|
|||
docMap.put("documentName", file.getOriginalFilename()); |
|||
docMap.put("documentType", file.getContentType()); |
|||
docMap.put("bookingDocUrl", fileUrl); |
|||
|
|||
// Save file to disk |
|||
try (FileOutputStream fos = new FileOutputStream(filePath)) { |
|||
byte[] bytes = file.getBytes(); |
|||
fos.write(bytes); |
|||
} catch (Exception e) { |
|||
throw new RuntimeException(e); |
|||
} |
|||
|
|||
jdbcTemplate.update( |
|||
"INSERT INTO booking_documents (booking_details_booking_id, booking_doc_url, document_name, document_type, booking_label, name) VALUES (?, ?, ?, ?, ?, ?)", |
|||
Integer.parseInt(bookingId), fileUrl, file.getOriginalFilename(), file.getContentType(), |
|||
fieldName, value); |
|||
} |
|||
uploadedDocs.add(docMap); |
|||
} |
|||
|
|||
hs.put("bookingId", bookingId); |
|||
hs.put("hallName", hallDetails.get("hall_name")); |
|||
hs.put("NoOfDay", days); |
|||
hs.put("startDate", startDate); |
|||
hs.put("endDate", endDate); |
|||
hs.put("startingSlot", startingSlot); |
|||
hs.put("endingSlot", endingSlot); |
|||
hs.put("hallAmount", hallAmount); |
|||
hs.put("gst", gstAmount); |
|||
hs.put("depositAmount", depositeamount); |
|||
hs.put("username", user.get("name")); |
|||
hs.put("userId", user.get("user_id")); |
|||
hs.put("mobileNo", user.get("mobile_no")); |
|||
hs.put("userType", user.get("usertype")); |
|||
hs.put("reason", reason); |
|||
hs.put("bookingId", bookingId); |
|||
hs.put("uploadedDocs", uploadedDocs); |
|||
} |
|||
|
|||
return hs; |
|||
} |
|||
|
|||
private double calcHallAmountJdbc(Map<String, Object> hallDetails, int daysrange, int startPeriod, int endPeriod) { |
|||
double fullDayRent = Double.parseDouble(hallDetails.get("full_day_rent").toString()); |
|||
double halfDayRent = Double.parseDouble(hallDetails.get("half_day_rent").toString()); |
|||
if (daysrange == 1) { |
|||
if (startPeriod == 1 && endPeriod == 2) |
|||
return fullDayRent; |
|||
else if (startPeriod == 1 && endPeriod == 1) |
|||
return halfDayRent; |
|||
else if (startPeriod == 2 && endPeriod == 2) |
|||
return halfDayRent; |
|||
else if (startPeriod == 2 && endPeriod == 1) |
|||
return fullDayRent; |
|||
} else { |
|||
if (startPeriod == 1 && endPeriod == 2) |
|||
return fullDayRent * daysrange; |
|||
else if (startPeriod == 1 && endPeriod == 1) |
|||
return fullDayRent * (daysrange - 1) + halfDayRent; |
|||
else if (startPeriod == 2 && endPeriod == 2) |
|||
return fullDayRent * (daysrange - 1) + halfDayRent; |
|||
else if (startPeriod == 2 && endPeriod == 1) |
|||
return fullDayRent * (daysrange - 2) + halfDayRent * 2; |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
private double calculateDepositAmountJdbc(double numDays, String startPeriod, String endPeriod, |
|||
double depositAmount, double HalfDepositAmount) { |
|||
double damount = 0; |
|||
if (numDays == 1) { |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) |
|||
damount = depositAmount; |
|||
else if ("1".equals(startPeriod) && "1".equals(endPeriod)) |
|||
damount = HalfDepositAmount; |
|||
else if ("2".equals(startPeriod) && "2".equals(endPeriod)) |
|||
damount = HalfDepositAmount; |
|||
else |
|||
damount = numDays; |
|||
} else { |
|||
if ("1".equals(startPeriod) && "2".equals(endPeriod)) |
|||
damount = depositAmount * numDays; |
|||
else if ("1".equals(startPeriod) && "1".equals(endPeriod)) |
|||
damount = depositAmount * (numDays - 1) + HalfDepositAmount; |
|||
else if ("2".equals(startPeriod) && "2".equals(endPeriod)) |
|||
damount = depositAmount * (numDays - 1) + HalfDepositAmount; |
|||
else if ("2".equals(startPeriod) && "1".equals(endPeriod)) |
|||
damount = depositAmount * (numDays - 2) + depositAmount; |
|||
else |
|||
damount = numDays; |
|||
} |
|||
return damount; |
|||
} |
|||
|
|||
private String insertOrUpdateBookingDetailsJdbc(JdbcTemplate jdbcTemplate, String bookingId, |
|||
Map<String, Object> user, Map<String, Object> hallDetails, String startDate, String endDate, double days, |
|||
int startingSlot, int endingSlot, double depositAmount, double hallAmount, double gst, double totalAmount, |
|||
String reason, String relation, String refundStatus, String comments, String bookingType) { |
|||
|
|||
if (bookingId == null || bookingId.equals("0")) { |
|||
// Insert with KeyHolder |
|||
KeyHolder keyHolder = new GeneratedKeyHolder(); |
|||
jdbcTemplate.update(connection -> { |
|||
PreparedStatement ps = connection.prepareStatement( |
|||
"INSERT INTO booking_details (users_user_id, hall_details_hall_id, start_date, end_date, no_of_days, starting_slot, ending_slot, deposit_amount, hall_amount, gst, amount_received, reason, refund_status, comments, booking_type, relationship, booking_date, schedule_count, source) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", |
|||
Statement.RETURN_GENERATED_KEYS); |
|||
ps.setObject(1, user.get("user_id")); |
|||
ps.setObject(2, hallDetails.get("hall_id")); |
|||
ps.setString(3, startDate); |
|||
ps.setString(4, endDate); |
|||
ps.setDouble(5, days); |
|||
ps.setInt(6, startingSlot); |
|||
ps.setInt(7, endingSlot); |
|||
ps.setDouble(8, depositAmount); |
|||
ps.setDouble(9, hallAmount); |
|||
ps.setDouble(10, gst); |
|||
ps.setDouble(11, totalAmount); |
|||
ps.setString(12, reason); |
|||
ps.setString(13, refundStatus); |
|||
ps.setString(14, comments); |
|||
ps.setString(15, bookingType); |
|||
ps.setString(16, relation); |
|||
ps.setString(17, java.time.LocalDate.now().toString()); |
|||
ps.setInt(18, 0); |
|||
ps.setInt(19, 2); |
|||
return ps; |
|||
}, keyHolder); |
|||
|
|||
Number generatedId = keyHolder.getKey(); |
|||
return generatedId != null ? generatedId.toString() : null; |
|||
} else { |
|||
// Update |
|||
jdbcTemplate.update( |
|||
"UPDATE booking_details SET users_user_id=?, hall_details_hall_id=?, start_date=?, end_date=?, no_of_days=?, starting_slot=?, ending_slot=?, deposit_amount=?, hall_amount=?, gst=?, amount_received=?, reason=?, refund_status=?, comments=?, booking_type=?, relationship=?, booking_date=?, schedule_count=? WHERE booking_id=?", |
|||
user.get("user_id"), hallDetails.get("hall_id"), startDate, endDate, days, startingSlot, endingSlot, |
|||
depositAmount, hallAmount, gst, totalAmount, reason, refundStatus, comments, bookingType, relation, |
|||
java.time.LocalDate.now().toString(), 0, Integer.parseInt(bookingId)); |
|||
return bookingId; |
|||
} |
|||
} |
|||
|
|||
public HashMap<String, Object> startPayment(int bookingId) { |
|||
HashMap<String, Object> hs = new HashMap<>(); |
|||
|
|||
String bookingSql = "SELECT b.amount_received, b.users_user_id, b.hall_details_hall_id, " |
|||
+ " u.user_id, u.mobile_no, u.email " + " FROM booking_details b " |
|||
+ " JOIN users u ON b.users_user_id = u.user_id " + " WHERE b.booking_id = ?"; |
|||
|
|||
try { |
|||
Map<String, Object> data = jdbcTemplate.queryForMap(bookingSql, bookingId); |
|||
|
|||
double amountReceived = (double) data.get("amount_received"); |
|||
int UserId = (int) data.get("user_id"); |
|||
long mobileNo = (long) data.get("mobile_no"); |
|||
String email = (String) data.get("email"); |
|||
int hallId = (int) data.get("hall_details_hall_id"); |
|||
|
|||
String txnId = "CHB" + transactionNumberGenerator.generateTransactionNumber() |
|||
+ String.format("%05d", UserId); |
|||
|
|||
String totalAmt = String.valueOf(amountReceived); |
|||
|
|||
String insertSql = "INSERT INTO transaction_response (txansaction_id, hall_id, user_id, status_code, booking_id) " |
|||
+ " VALUES (?, ?, ?, ?, ?)"; |
|||
jdbcTemplate.update(insertSql, txnId, hallId, String.valueOf(UserId), "temp", bookingId); |
|||
|
|||
String merchantId = paymentConfig.getMerchantId(); |
|||
String consumerId = String.format("%05d", UserId); |
|||
String encryptedToken = getToken(merchantId + "|", txnId + "|", totalAmt + "|", "|", consumerId + "|", |
|||
mobileNo + "|", email + "|", "|", "|", "|", "|", "|", "|", "|", "|", "|", |
|||
paymentConfig.getEncryptionKey()); |
|||
|
|||
hs.put("txansactionId", txnId); |
|||
hs.put("token", encryptedToken); |
|||
hs.put("amount", totalAmt); |
|||
/* |
|||
* hs.put("merchantId", merchantId); hs.put("consumerMobileNo", mobileNo); |
|||
* hs.put("consumerEmailId", email); hs.put("consumerId", consumerId); |
|||
* hs.put("error", false); |
|||
*/ |
|||
|
|||
} catch (EmptyResultDataAccessException | NoSuchAlgorithmException e) { |
|||
hs.put("error", true); |
|||
hs.put("message", "Invalid booking ID or no user data found. "); |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return hs; |
|||
} |
|||
|
|||
public String getToken(String merchantId, String txnId, String totalAmt, String accountNo, String consumerId, |
|||
String consumerMobileNo, String consumerEmailId, String debitStartDate, String debitEndDate, |
|||
String maxAmount, String amountType, String frequency, String cardNumber, String expMonth, String expYear, |
|||
String cvvCode, String salt) throws NoSuchAlgorithmException { |
|||
String token = merchantId + txnId + totalAmt + accountNo + consumerId + consumerMobileNo + consumerEmailId |
|||
+ debitStartDate + debitEndDate + maxAmount + amountType + frequency + cardNumber + expMonth + expYear |
|||
+ cvvCode + salt; |
|||
|
|||
return generateToken(token); |
|||
} |
|||
|
|||
public String generateToken(String token) throws NoSuchAlgorithmException { |
|||
// System.out.println("Token:-" + token); |
|||
MessageDigest md = MessageDigest.getInstance("SHA-512"); |
|||
md.update(token.getBytes()); |
|||
|
|||
byte[] bytes = md.digest(); |
|||
|
|||
BigInteger bigInt = new BigInteger(1, bytes); |
|||
String encryptedtoken = bigInt.toString(16); |
|||
|
|||
while (encryptedtoken.length() < 128) { |
|||
encryptedtoken = "0" + encryptedtoken; |
|||
} |
|||
// System.out.println("Encryption :- " + encryptedtoken); |
|||
return encryptedtoken; |
|||
} |
|||
|
|||
public Map<String, Object> checkSlotAvailability(int hallId, String startDate, String endDate, int startingSlot, int endingSlot) { |
|||
|
|||
// Validate slot numbers |
|||
if (startingSlot < 1 || startingSlot > 2 || endingSlot < 1 || endingSlot > 2) { |
|||
throw new IllegalArgumentException("Slot values must be 1 (morning) or 2 (evening)."); |
|||
} |
|||
|
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|||
LocalDate start; |
|||
LocalDate end; |
|||
|
|||
try { |
|||
start = LocalDate.parse(startDate, formatter); |
|||
end = LocalDate.parse(endDate, formatter); |
|||
} catch (Exception e) { |
|||
throw new IllegalArgumentException("Invalid date format. Use yyyy-MM-dd."); |
|||
} |
|||
|
|||
if (end.isBefore(start)) { |
|||
throw new IllegalArgumentException("End date cannot be before start date."); |
|||
} |
|||
|
|||
long days = java.time.temporal.ChronoUnit.DAYS.between(start, end) + 1; |
|||
int i = 0; |
|||
|
|||
try { |
|||
for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) { |
|||
|
|||
List<Map<String, Object>> calList = jdbcTemplate.queryForList( |
|||
"SELECT * FROM booking_calendar WHERE bdate = ? AND hall_id = ?", |
|||
date.toString(), hallId |
|||
); |
|||
|
|||
if (!calList.isEmpty()) { |
|||
Map<String, Object> bookingCalendar = calList.get(0); |
|||
|
|||
boolean morningSlot = Boolean.TRUE.equals(bookingCalendar.get("morning_slot")); |
|||
boolean eveningSlot = Boolean.TRUE.equals(bookingCalendar.get("evening_slot")); |
|||
|
|||
if ((date.equals(start) && startingSlot == 1 && morningSlot) |
|||
|| (date.equals(start) && startingSlot == 1 && eveningSlot) |
|||
|| (date.equals(end) && endingSlot == 1 && morningSlot) |
|||
|| (date.equals(end) && endingSlot == 1 && eveningSlot)) { |
|||
return Map.of("status", "slotOccupied"); |
|||
} else if (morningSlot && eveningSlot) { |
|||
return Map.of("status", "slotOccupied"); |
|||
} else if (!date.equals(end) && i != 0 && i != Math.round(days - 1) |
|||
&& (morningSlot || eveningSlot)) { |
|||
return Map.of("status", "slotOccupied"); |
|||
} else if (date.equals(end) && endingSlot == 2 && morningSlot && i != 0 |
|||
&& i == Math.round(days - 1)) { |
|||
return Map.of("status", "slotOccupied"); |
|||
} |
|||
} |
|||
i++; |
|||
} |
|||
} catch (DataAccessException e) { |
|||
e.printStackTrace(); |
|||
throw new RuntimeException("Database error occurred while checking slot availability."); |
|||
} |
|||
|
|||
return Map.of("status", "slotAvailable"); |
|||
} |
|||
} |
|||
@ -0,0 +1,63 @@ |
|||
package com.gcc.restapiservices.victoriaHallBooking.util; |
|||
|
|||
import com.gcc.restapiservices.victoriaHallBooking.configuration.VPHPaymentConfig; |
|||
import org.apache.commons.codec.binary.Hex; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import javax.crypto.Cipher; |
|||
import javax.crypto.spec.IvParameterSpec; |
|||
import javax.crypto.spec.SecretKeySpec; |
|||
import java.util.Base64; |
|||
|
|||
@Component |
|||
public class VPHEncryptionUtils { |
|||
|
|||
@Autowired |
|||
private VPHPaymentConfig paymentConfig; |
|||
|
|||
public String encryptHxRefund(String text) throws Exception { |
|||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); |
|||
SecretKeySpec keySpec = new SecretKeySpec(this.paymentConfig.getEncryptionKeyByte(), "AES"); |
|||
IvParameterSpec ivSpec = new IvParameterSpec(this.paymentConfig.getEncryptionIVByte()); |
|||
cipher.init(1, keySpec, ivSpec); |
|||
byte[] results = cipher.doFinal(text.getBytes("UTF-8")); |
|||
String hxencstr = ToHexStrRefund(results); |
|||
return hxencstr; |
|||
} |
|||
|
|||
public String ToHexStrRefund(byte[] dataBuf) { |
|||
String hxstr = null; |
|||
Hex hx = new Hex(); |
|||
hxstr = new String(hx.encode(dataBuf)); |
|||
return hxstr; |
|||
} |
|||
|
|||
public String decryptHxTRefund(String hxstrr) throws Exception { |
|||
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); |
|||
|
|||
SecretKeySpec keySpec = new SecretKeySpec(this.paymentConfig.getEncryptionKeyByte(), "AES"); |
|||
IvParameterSpec ivSpec = new IvParameterSpec(this.paymentConfig.getEncryptionIVByte()); |
|||
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); |
|||
|
|||
byte[] decbytes = FromHexStr(hxstrr); |
|||
|
|||
byte[] results = cipher.doFinal(decbytes); |
|||
return new String(results, "UTF-8").trim(); |
|||
} |
|||
|
|||
public byte[] FromHexStr(String hxStr) { |
|||
byte[] charArray = hxStr.getBytes(); |
|||
byte[] bufstr = null; |
|||
Hex hxx = new Hex(); |
|||
|
|||
try { |
|||
bufstr = hxx.decode(charArray); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
return bufstr; |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,37 @@ |
|||
package com.gcc.restapiservices.victoriaHallBooking.util; |
|||
|
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.Random; |
|||
|
|||
@Service |
|||
public class VPHTransactionNumberGenerator { |
|||
|
|||
public String generateTransactionNumber() { |
|||
// Define the length of the transaction number |
|||
int length = 12; |
|||
|
|||
// Define characters to be used in the transaction number |
|||
String characters = "0123456789"; |
|||
|
|||
// Create a StringBuilder to store the transaction number |
|||
StringBuilder sb = new StringBuilder(); |
|||
|
|||
// Create an instance of Random class |
|||
Random random = new Random(); |
|||
|
|||
// Generate the transaction number |
|||
for (int i = 0; i < length; i++) { |
|||
// Generate a random index within the range of characters |
|||
int randomIndex = random.nextInt(characters.length()); |
|||
|
|||
// Append the character at the random index to the transaction number |
|||
sb.append(characters.charAt(randomIndex)); |
|||
} |
|||
|
|||
|
|||
// Convert StringBuilder to String and return |
|||
return sb.toString(); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,36 @@ |
|||
|
|||
spring.application.name=restapiservices |
|||
|
|||
spring.datasource.url=jdbc:mysql://localhost:3306/dumpwastecollector |
|||
spring.datasource.username=root |
|||
spring.datasource.password=root |
|||
#spring.jpa.show-sql=true |
|||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver |
|||
server.port=8050 |
|||
|
|||
spring.servlet.multipart.max-file-size=20MB |
|||
|
|||
file.upload.directory=${user.dir}/gccoffice_uploads |
|||
file.dump.upload.directory=${user.dir}/cd_waste_docs/cdwaste_dump |
|||
|
|||
file.fullpath=/ |
|||
file.dump.fullpath=/cd_waste_docs/ |
|||
|
|||
fileBaseUrl=https://gccservices.in |
|||
|
|||
|
|||
app.getOtpUrl=https://tmegov.onex-aura.com/api/sms? |
|||
|
|||
app.erpUrl=https://erp.chennaicorporation.gov.in/pgr/external/mobileservice? |
|||
|
|||
dump_directory=cdwaste_dump |
|||
|
|||
feedback_directory = whatsapp_feedback |
|||
|
|||
#fileHanding |
|||
file.upload.directory.communityhall=${user.dir}/communityHallDocuments |
|||
file.fullpath.communityhall=/ |
|||
|
|||
# Used for know your zone and division based on address |
|||
google.api.key=AIzaSyCi7N6uW5MZaSkd50Kzw7ax2GkMN1vjE-E |
|||
gis.api.url=https://gisgcc.chennaicorporation.gov.in/server/rest/services/GCCDepts/EDPMobile2025/FeatureServer/0/query |
|||
@ -0,0 +1,46 @@ |
|||
spring.application.name= restapiservices |
|||
spring.datasource.url=jdbc:mysql://gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306/gcc_c_d_waste_web |
|||
spring.datasource.username=root |
|||
spring.datasource.password=gcc-facial-password |
|||
# spring.jpa.hibernate.ddl-auto=update |
|||
spring.jpa.show-sql=true |
|||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver |
|||
server.port=8050 |
|||
|
|||
|
|||
|
|||
#for using cd waste |
|||
spring.servlet.multipart.max-file-size=20MB |
|||
|
|||
file.upload.directory=${user.dir}/gccoffice_uploads |
|||
|
|||
file.fullpath=/ |
|||
file.dump.fullpath=/cd_waste_docs/ |
|||
|
|||
|
|||
fileBaseUrl=https://gccservices.in |
|||
|
|||
#payment.razorpay.my_key_id="rzp_live_66FhxMUNAb9McO" |
|||
|
|||
#payment.razorpay.my_key_id="rzp_test_tDkHFEqWXmuEi8" |
|||
|
|||
|
|||
app.getOtpUrl=https://tmegov.onex-aura.com/api/sms? |
|||
|
|||
app.erpUrl=http://coc-staging.egovernments.org:9980/pgr/external/mobileservice? |
|||
|
|||
dump_directory=cdwaste_dump |
|||
|
|||
feedback_directory = whatsapp_feedback |
|||
|
|||
#fileHanding |
|||
file.upload.directory.communityhall=${user.dir}/communityHallDocuments |
|||
file.fullpath.communityhall=/ |
|||
|
|||
#fileHanding |
|||
file.upload.directory.victoriahall=${user.dir}/victoriaHallDocuments |
|||
file.fullpath.victoriahall=/ |
|||
|
|||
# Used for know your zone and division based on address |
|||
google.api.key=AIzaSyCi7N6uW5MZaSkd50Kzw7ax2GkMN1vjE-E |
|||
gis.api.url=https://gisgcc.chennaicorporation.gov.in/server/rest/services/GCCDepts/EDPMobile2025/FeatureServer/0/query |
|||
@ -0,0 +1,3 @@ |
|||
#Generated by Eclipse Messages Editor (Eclipse Babel) |
|||
|
|||
spring.profiles.active = prod |
|||
@ -0,0 +1,15 @@ |
|||
#payment.worldline.merchantId=T955031 |
|||
#payment.worldline.encryptionKey=1025180466GPADTD |
|||
#payment.worldline.encryptionIV=3232693456UWOWHC |
|||
#payment.worldline.schemeCode=FIRST |
|||
#payment.worldline.merchantName=Greater Chennai Corporation |
|||
#payment.worldline.transactionSuccessCode=0300 |
|||
#payment.worldline.refundSuccessCode=0400 |
|||
|
|||
payment.worldline.merchantId=L1037717 |
|||
payment.worldline.encryptionKey=6207149300MFLGNY |
|||
payment.worldline.encryptionIV=3422107798TKQCNG |
|||
payment.worldline.schemeCode=FIRST |
|||
payment.worldline.merchantName=Greater Chennai Corporation |
|||
payment.worldline.transactionSuccessCode=0300 |
|||
payment.worldline.refundSuccessCode=0400 |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue