USE [FastMoneyPro_Remit] GO /****** Object: StoredProcedure [dbo].[PROC_KJAUTOREFUND] Script Date: 2019-09-27 오전 10:14:35 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- EXEC [PROC_KJAUTOREFUND] @flag = 'fail',@pRowId=596,@pCustomerId='59342',@pAmount='30000',@pActionBy='habiburrhmn52@gmail.com' --EXEC proc_CustomerTxnStatement @flag = 'refund', @user = 'pralhads@gmeremit.com', @IdNumber ='9424010696481', @chargeAmt = 1000, @refundAmt = 10000 ALTER PROC [dbo].[PROC_KJAUTOREFUND] ( @flag VARCHAR(20) ,@pCustomerId BIGINT = NULL ,@pCustomerSummary VARCHAR(20) = NULL ,@pAmount MONEY = NULL ,@pAction VARCHAR(10) = NULL ,@pActionDate DATETIME = NULL ,@pActionBy VARCHAR(50) = NULL ,@pBankCode VARCHAR(50) = NULL ,@pBankAccountNo VARCHAR(20) = NULL ,@pRowId BIGINT = 0 ,@pSource CHAR(1) = NULL ) AS SET NOCOUNT ON; SET XACT_ABORT ON; BEGIN TRY DECLARE @vRowId BIGINT = 0 DECLARE @vBalance MONEY DECLARE @TEMPID BIGINT = 0 DECLARE @vBankCode VARCHAR(4) DECLARE @vBankAccountNo VARCHAR(20) DECLARE @vRefundAmount MONEY DECLARE @vwalletAccountNo VARCHAR(20) DECLARE @custId VARCHAR(20) DECLARE @tempTbl TABLE (errorcode VARCHAR(5), msg VARCHAR(MAX), id VARCHAR(50)) ------------------------------------------------ --고객이 입금이체를 신청 ------------------------------------------------ IF @flag = 'REQ' BEGIN ------------------------------------------------ -- 실계좌정보를 가져온다. ------------------------------------------------ SELECT @vBankCode = bl.bankCode, @vBankAccountNo = bankAccountNo, @vBalance = cm.availableBalance, @vwalletAccountNo= cm.walletAccountNo FROM customerMaster cm (NOLOCK) INNER JOIN dbo.KoreanBankList bl (NOLOCK) ON cm.bankName=bl.rowId WHERE customerId=@pCustomerId AND ISNULL(onlineUser,'N')='Y' AND ISNULL(islocked,'N')='N' ------------------------------------------------ -- 잔고 체크 ------------------------------------------------ IF(SELECT dbo.CheckCustomerPerDayAmt(@custId,@pAmount))=1 BEGIN EXEC proc_errorHandler 1,'Easy remit Per day limit exceeded.!' ,null RETURN; END IF ISNULL(@vBankAccountNo,'') = '' BEGIN EXEC proc_errorHandler 1, 'Invalid Request Found .', @pCustomerId; RETURN; END IF (ISNULL(@pAmount,0) > @vBalance) BEGIN EXEC proc_errorHandler 1, 'Request balance is insufficient!', @pCustomerId; RETURN; END IF (ISNULL(@pAmount,0) <10000) BEGIN EXEC proc_errorHandler 1, 'Minimum Request amount is 10000', @pCustomerId; RETURN; END IF (ISNULL(@pAmount,0) >3900000) BEGIN EXEC proc_errorHandler 1, 'Maximum Request amount is 3900000', @pCustomerId; RETURN; END ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ -- refundAmount = requestAmount - 수수료(1000) SET @vRefundAmount = @pAmount - 1000 ------------------------------------------------ -- 고객의 잔고 = 잔고 - 입금이체액 ------------------------------------------------ SET @vBalance = @vBalance - @pAmount ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'REQ'로 INSERT ------------------------------------------------ INSERT INTO KJ_AUTO_REFUND( customerId, bankCode, bankAccountNo, customerSummary, requestAmount, refundAmount, action, actionDate, actionBy,Balance,refundType,reqSource) SELECT @pCustomerId, @vBankCode, @vBankAccountNo, @pCustomerSummary, @pAmount, @vRefundAmount, @pAction, GETDATE(), @pActionBy,@vBalance,'Wallet',ISNULL(@pSource,'O') SET @vRowId = @@IDENTITY INSERT INTO @tempTbl(errorcode, msg, id) EXEC proc_CustomerTxnStatement @flag = 'refund', @user = 'online', @IdNumber =@vwalletAccountNo, @chargeAmt = 1000, @refundAmt = @pAmount IF EXISTS(SELECT '' FROM @tempTbl WHERE errorcode = 1) BEGIN EXEC proc_errorHandler 1, 'Error occured while requesting.', 0; END ELSE BEGIN SELECT '0' errorCode,@vBankCode vBankCode,@vRowId ID END ------------------------------------------------ COMMIT TRANSACTION ------------------------------------------------ --EXEC proc_errorHandler 0, 'Data Saved Successfully!', @TEMPID; END IF @flag = 'Autodebit_REQ' BEGIN IF (ISNULL(@pAmount,0) <10000) BEGIN EXEC proc_errorHandler 1, 'Minimum Request amount is 10000', @pCustomerId; RETURN; END IF (ISNULL(@pAmount,0) >3900000) BEGIN EXEC proc_errorHandler 1, 'Maximum Request amount is 3900000', @pCustomerId; RETURN; END ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'Autodebit_REQ'로 INSERT ------------------------------------------------ INSERT INTO KJ_AUTO_REFUND( customerId, bankCode, bankAccountNo, customerSummary, requestAmount, refundAmount, action, actionDate, actionBy ,Balance ,refundType,reqSource) SELECT @pCustomerId, @pBankCode, @pBankAccountNo, @pCustomerSummary, @pAmount, @pAmount, 'REQ', GETDATE(), @pActionBy ,@pAmount ,'AutoDebit',ISNULL(@pSource,'O') SET @vRowId = @@IDENTITY --EXEC proc_errorHandler 0, 'Data Saved Successfully!', @TEMPID; SELECT '0' errorCode,@vBankCode vBankCode,@vRowId id ------------------------------------------------ COMMIT TRANSACTION ------------------------------------------------ END ----------------------------------------------------- -- 국내은행간 송금(계좌)에서 입금이체 로직의 결과를 KJ_AUTO_REFUND 테이블에 INSERT ----------------------------------------------------- IF @flag = 'Domestic' BEGIN IF (ISNULL(@pAmount,0) <10000) BEGIN EXEC proc_errorHandler 1, 'Minimum Request amount is 10000', @pCustomerId; RETURN; END ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'Domestic'로 INSERT ------------------------------------------------ INSERT INTO KJ_AUTO_REFUND( customerId, bankCode, bankAccountNo, customerSummary, requestAmount, refundAmount, action, actionDate, actionBy ,Balance ,refundType,reqSource) SELECT @pCustomerId, @pBankCode, @pBankAccountNo, @pCustomerSummary, @pAmount, @pAmount, @pAction , GETDATE(), @pActionBy ,@pAmount ,'Domestic',ISNULL(@pSource,'O') SET @vRowId = @@IDENTITY --EXEC proc_errorHandler 0, 'Data Saved Successfully!', @TEMPID; SELECT '0' errorCode,@vBankCode vBankCode,@vRowId id ------------------------------------------------ COMMIT TRANSACTION ------------------------------------------------ END IF @flag = 'SUCCESS' BEGIN -------------------------------------------------- ---- KJ_AUTO_REFUND 테이블에서 'REQ' 데이타를 가져온다. -------------------------------------------------- --SELECT TOP(1) -- @vRefundType = refundType, -- @pActionBy = actionBy --FROM KJ_AUTO_REFUND --WHERE rowId = @pRowId --AND customerId = @pCustomerId --AND [action] IN( 'REQ','Autodebit_REQ') ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'SUCCESS'로 UPDATE ------------------------------------------------ UPDATE KJ_AUTO_REFUND SET action = @pAction WHERE rowId = @pRowId AND customerId = @pCustomerId EXEC proc_errorHandler 0, 'Data Saved Successfully!', @pCustomerId; ------------------------------------------------ COMMIT TRANSACTION ------------------------------------------------ END IF @flag = 'FAIL' BEGIN ---------------------------------------------------- ------ KJ_AUTO_REFUND 테이블에서 'REQ' 데이타를 가져온다. ---------------------------------------------------- ----SELECT TOP(1) ---- @vRowId=rowId ----FROM KJ_AUTO_REFUND ----WHERE customerId=@pCustomerId ----AND requestAmount=@pAmount ----AND CONVERT(VARCHAR(10), actionDate,120) = CONVERT(VARCHAR(10), GETDATE(), 120) ----AND action = 'REQ' ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'FAIL'로 UPDATE ------------------------------------------------ UPDATE KJ_AUTO_REFUND SET action = @pAction WHERE rowId = @pRowId AND customerId = @pCustomerId AND action = 'REQ' ------------------------------------------------ -- 실계좌정보를 가져온다. ------------------------------------------------ SELECT @vBalance = availableBalance, @vwalletAccountNo= cm.walletAccountNo FROM customerMaster cm (NOLOCK) WHERE customerId=@pCustomerId AND ISNULL(onlineUser,'N')='Y' AND ISNULL(islocked,'N')='N' ------------------------------------------------ -- 고객의 잔고 = 잔고 + 입금이체액 ------------------------------------------------ SET @vBalance = @vBalance + @pAmount UPDATE customerMaster SET availableBalance = @vBalance WHERE customerId = @pCustomerId EXEC proc_errorHandler 0, 'Data Saved Successfully!', @pCustomerId; insert into TblVirtualBankDepositDetail(processId,obpId,customerName,virtualAccountNo,amount,receivedOn,partnerServiceKey ,institution,depositor,no,logDate) select top 1 0,obpId,customerName,virtualAccountNo, @pAmount,getdate(),'000' ,institution,depositor,no,getdate() from TblVirtualBankDepositDetail (nolock) where virtualAccountNo= @vwalletAccountNo set @vRowId = @@IDENTITY INSERT INTO FastMoneyPro_Account.dbo.temp_tran(entry_user_id,acct_num,part_tran_type,tran_amt,field1,field2 ,sessionID,refrence) SELECT 'system','100241011536','dr',(@pAmount-1000),@vwalletAccountNo,'Refund Reverse',@vwalletAccountNo,@vRowId union all SELECT 'system',@vwalletAccountNo,'cr',@pAmount,@vwalletAccountNo,'Refund Reverse',@vwalletAccountNo,@vRowId INSERT INTO FastMoneyPro_Account.dbo.temp_tran(entry_user_id,acct_num,part_tran_type,tran_amt,field1,field2 ,sessionID,refrence) SELECT 'system','910141097092','dr',1000,@vwalletAccountNo,'Refund Reverse',@vwalletAccountNo,@vRowId ------------------------------------------------ COMMIT TRANSACTION ------------------------------------------------ DECLARE @vDate date = GETDATE(),@vRemarks varchar(200) = 'being refund reversal to primary ac : '+@vwalletAccountNo DECLARE @vVoucherType CHAR(1) = 'Y' SET @vVoucherType = CASE WHEN YEAR(@vDate) = 2018 THEN 'J' ELSE @vVoucherType END INSERT INTO @tempTbl(errorcode, msg, id) exec FastMoneyPro_Account.dbo.[spa_saveTempTrn] @flag='i',@sessionID= @vwalletAccountNo,@date=@vDate,@narration = @vRemarks,@company_id=1,@v_type=@vVoucherType,@user='system' END IF @flag = 'Autodebit_FAIL' BEGIN ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'FAIL'로 UPDATE ------------------------------------------------ UPDATE KJ_AUTO_REFUND SET action = @pAction WHERE rowId = @pRowId AND customerId = @pCustomerId AND action = 'REQ' EXEC proc_errorHandler 0, 'Data Saved Successfully!', @pCustomerId; ------------------------------------------------ COMMIT TRANSACTION ------------------------------------------------ END ELSE IF @flag = 'CUSTOMER-INFO' BEGIN SELECT [customerId] ,[email] ,[mobile] ,obpId ,BL.bankCode ,BL.bankName ,bankAccountNo FROM dbo.customerMaster CM (NOLOCK) INNER JOIN dbo.KoreanBankList BL (NOLOCK) ON CM.bankName=BL.rowId WHERE customerId=@pCustomerId AND isnull(onlineUser,'N')='Y' AND isnull(islocked,'N')='N' END ---------------------------------------------------- -- 가상계좌를 이용한 국내은행 송금에서 REQ ---------------------------------------------------- IF @flag = 'DomesticWallet' BEGIN ------------------------------------------------ -- 실계좌정보를 가져온다. ------------------------------------------------ SELECT @vBalance = availableBalance, @vwalletAccountNo= cm.walletAccountNo FROM customerMaster cm (NOLOCK) WHERE customerId=@pCustomerId AND ISNULL(onlineUser,'N')='Y' AND ISNULL(islocked,'N')='N' ------------------------------------------------ -- 잔고 체크 ------------------------------------------------ if not exists(select 'a' from TblVirtualBankDepositDetail(nolock) where virtualAccountNo = @vwalletAccountNo) BEGIN EXEC proc_errorHandler 1, 'Balance not found for refund', NULL RETURN END IF (ISNULL(@pAmount,0) > @vBalance) BEGIN EXEC proc_errorHandler 1, 'Request balance is insufficient!', @pCustomerId; RETURN; END IF (ISNULL(@pAmount,0) <10000) BEGIN EXEC proc_errorHandler 1, 'Minimum Request amount is 10000', @pCustomerId; RETURN; END ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ -- refundAmount = requestAmount - 수수료(1000) SET @vRefundAmount = @pAmount - (select value from serviceValueMaster(NOLOCK) where PartnerName = 'KJWallet' and ServiceType = 'DomesticRemittance') ------------------------------------------------ -- 고객의 잔고 = 잔고 - 입금이체액 ------------------------------------------------ SET @vBalance = @vBalance - @pAmount ---- insert into TblVirtualBankDepositDetail(processId,obpId,customerName,virtualAccountNo,amount,receivedOn,partnerServiceKey ,institution,depositor,no,logDate) select top 1 @pCustomerSummary,obpId,customerName,virtualAccountNo,- @vRefundAmount,getdate(),'000' ,institution,'DTWallet-'+@pCustomerSummary,no,getdate() from TblVirtualBankDepositDetail (nolock) where virtualAccountNo= @vwalletAccountNo update customerMaster set availableBalance = availableBalance- @vRefundAmount where walletAccountNo = @vwalletAccountNo ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'REQ'로 INSERT ------------------------------------------------ INSERT INTO KJ_AUTO_REFUND( customerId, bankCode, bankAccountNo, customerSummary, requestAmount, refundAmount, action, actionDate, actionBy,Balance,refundType,reqSource) SELECT @pCustomerId, @pBankCode, @pBankAccountNo, @pCustomerSummary, @pAmount, @vRefundAmount, @pAction, GETDATE(), @pActionBy,@vBalance,'Wallet',ISNULL(@pSource,'O') SET @vRowId = @@IDENTITY -- SELECT '0' errorCode,@vBankCode vBankCode,@vRowId ID -- Voucher create process change to only run when KFTC Deposit Success. 2019.10.04 @Dana -- Voucher 데이타 INSERT (Pralhad 추가예정) -- EXEC proc_CustomerTxnStatement @flag = 'refund', @user = 'online', @IdNumber =@vwalletAccountNo, @chargeAmt = 1000, @refundAmt = @pAmount -- EXEC [proc_DomesticTransferVoucher] @flag = 'transfer', @user = @pCustomerId,@walletAccountNo = @vwalletAccountNo,@receiverAccountNo = @pBankAccountNo,@transferAmt = @vRefundAmount,@chargeAmt = 0,@processId = @pCustomerSummary ------------------------------------------------ COMMIT TRANSACTION SELECT '0' errorCode,@vBankCode vBankCode,@vRowId ID ------------------------------------------------ END ---------------------------------------------------- ------ 가상계좌를 이용한 국내은행송금 성공. ---------------------------------------------------- IF @flag = 'DomesticWallet_SUCC' -- BEGIN ------------------------------------------------ -- 실계좌정보를 가져온다. ------------------------------------------------ SELECT @vwalletAccountNo= cm.walletAccountNo FROM customerMaster cm (NOLOCK) WHERE customerId=@pCustomerId AND ISNULL(onlineUser,'N')='Y' AND ISNULL(islocked,'N')='N' -- refundAmount = requestAmount - 수수료(1000) IF (ISNULL(@pAmount,0) <10000) BEGIN EXEC proc_errorHandler 1, 'Minimum Request amount is 10000', @pCustomerId; RETURN; END SET @vRefundAmount = @pAmount - (select value from serviceValueMaster(NOLOCK) where PartnerName = 'KJWallet' and ServiceType = 'DomesticRemittance') ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'SUCCESS'로 UPDATE ------------------------------------------------ UPDATE KJ_AUTO_REFUND SET action = @pAction WHERE rowId = @pRowId AND customerId = @pCustomerId AND action = 'REQ' EXEC proc_errorHandler 0, 'Data Saved Successfully!', @pCustomerId; ------------------------------------------------ COMMIT TRANSACTION ------------------------------------------------ -- Voucher create process change to only run when KFTC Deposit Success. 2019.10.04 @Dana -- Voucher 데이타 INSERT (Pralhad 추가) EXEC [proc_DomesticTransferVoucher] @flag = 'transfer', @user = @pCustomerId, @walletAccountNo = @vwalletAccountNo, @receiverBankCode = @pBankCode, @receiverAccountNo = @pBankAccountNo, @transferAmt = @vRefundAmount, @chargeAmt = 0, @processId = @pCustomerSummary END ---------------------------------------------------- ------ 가상계좌를 이용한 국내은행송금 성공. ---------------------------------------------------- IF @flag = 'KJAPI-DOMESTIC-TXN' -- BEGIN ------------------------------------------------ -- 실계좌정보를 가져온다. ------------------------------------------------ SELECT @vwalletAccountNo= cm.walletAccountNo FROM customerMaster cm (NOLOCK) WHERE customerId=@pCustomerId AND ISNULL(onlineUser,'N')='Y' AND ISNULL(islocked,'N')='N' -- refundAmount = requestAmount - 수수료(1000) IF (ISNULL(@pAmount,0) <10000) BEGIN EXEC proc_errorHandler 1, 'Minimum Request amount is 10000', @pCustomerId; RETURN; END SET @vRefundAmount = @pAmount - (select value from serviceValueMaster(NOLOCK) where PartnerName = 'KJWallet' and ServiceType = 'DomesticRemittance') ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'SUCCESS'로 UPDATE ------------------------------------------------ UPDATE KJ_AUTO_REFUND SET action = @pAction WHERE rowId = @pRowId AND customerId = @pCustomerId AND action = 'REQ' EXEC proc_errorHandler 0, 'Data Saved Successfully!', @pCustomerId; ------------------------------------------------ COMMIT TRANSACTION ------------------------------------------------ -- Voucher create process change to only run when KFTC Deposit Success. 2019.10.04 @Dana -- Voucher 데이타 INSERT (Pralhad 추가) EXEC [proc_DomesticTransferVoucher] @flag = 'KJAPI-DOMESTIC-TXN', @user = @pCustomerId, @walletAccountNo = @vwalletAccountNo, @receiverBankCode = @pBankCode, @receiverAccountNo = @pBankAccountNo, @transferAmt = @vRefundAmount, @chargeAmt = 0, @processId = @pCustomerSummary END ---------------------------------------------------- ------ 가상계좌를 이용한 국내은행송금 실패. ---------------------------------------------------- IF @flag = 'DomesticWallet_FAIL' BEGIN DECLARE @processId VARCHAR(30) SELECT @processId = customerSummary FROM KJ_AUTO_REFUND(NOLOCK) WHERE rowId = @pRowId AND customerId = @pCustomerId AND action = 'REQ' ------------------------------------------------ BEGIN TRANSACTION ------------------------------------------------ ------------------------------------------------ -- KJ_AUTO_REFUND 테이블에 'FAIL'로 UPDATE ------------------------------------------------ UPDATE KJ_AUTO_REFUND SET action = @pAction WHERE rowId = @pRowId AND customerId = @pCustomerId AND action = 'REQ' ------------------------------------------------ -- 가상계좌정보와 잔액을 가져온다 ------------------------------------------------ SELECT @vBalance = availableBalance, @vwalletAccountNo= cm.walletAccountNo FROM customerMaster cm (NOLOCK) WHERE customerId=@pCustomerId AND ISNULL(onlineUser,'N')='Y' AND ISNULL(islocked,'N')='N' ------------------------------------------------ -- 고객의 잔고 = 잔고 + 입금이체액 ------------------------------------------------ SET @vBalance = @vBalance + @pAmount UPDATE customerMaster SET availableBalance = @vBalance WHERE customerId = @pCustomerId EXEC proc_errorHandler 0 , 'Data Saved Successfully!', @pCustomerId; ---- Pralhad 추가예정 insert into TblVirtualBankDepositDetail(processId,obpId,customerName,virtualAccountNo,amount,receivedOn,partnerServiceKey ,institution,depositor,no,logDate) select top 1 0,obpId,customerName,virtualAccountNo, @pAmount,getdate(),'000' ,institution,'DT-WalletFailed',no,getdate() from TblVirtualBankDepositDetail (nolock) where virtualAccountNo= @vwalletAccountNo -- Voucher create process change to only run when KFTC Deposit Success. following cancel process no need. 2019.10.04 @Dana --set @vRowId = @@IDENTITY --INSERT INTO FastMoneyPro_Account.dbo.temp_tran(entry_user_id,acct_num,part_tran_type,tran_amt,field1,field2 --,sessionID,refrence) --SELECT 'system','100241011536','dr',(@pAmount-1000),@vwalletAccountNo,'Domestic Reverse',@vwalletAccountNo,@vRowId ---- kj wallet account --union all --SELECT 'system',@vwalletAccountNo,'cr',@pAmount,@vwalletAccountNo,'Domestic Reverse',@vwalletAccountNo,@vRowId ---- customer wallet account --INSERT INTO FastMoneyPro_Account.dbo.temp_tran(entry_user_id,acct_num,part_tran_type,tran_amt,field1,field2 ---- domestic charge account --,sessionID,refrence) --SELECT 'system','421793414','dr',1000,@vwalletAccountNo,'Domestic Reverse',@vwalletAccountNo,@vRowId --SELECT @vDate = GETDATE(),@vRemarks = 'being Domestic Transfer reversal to: '+@vwalletAccountNo --SET @vVoucherType = 'Y' --INSERT INTO @tempTbl(errorcode, msg, id) --exec FastMoneyPro_Account.dbo.[spa_saveTempTrn] @flag='i',@sessionID= @vwalletAccountNo,@date=@vDate,@narration = @vRemarks,@company_id=1,@v_type=@vVoucherType,@user='system' ------------------------------------------------ COMMIT TRANSACTION ------------------------------------------------ END END TRY BEGIN CATCH IF @@TRANCOUNT <> 0 ROLLBACK TRANSACTION; DECLARE @errorMessage VARCHAR(MAX); --SET @errorMessage = ERROR_MESSAGE(); SET @errorMessage = 'Error Occur while requesting.' EXEC proc_errorHandler 1, @errorMessage, @pCustomerId; END CATCH;