Мне нужно реализовать функциональность ночного процесса в моем модуле биллинга приложений. Смотрите изображение таблиц.
Позвольте мне объяснить таблицы их номерами в красном. По сути, это база данных приложений для дома, где арендаторы могут выбирать тарифные планы и надстройки в ней. Как у нас есть наш мобильный сервис.
Шаг: 1. Это самая первая таблица, tbl_MSTBilling, где конечный пользователь создаст план с некоторым дополнением. Аддон известен как тип транзакции здесь. Там общие детали плана выставления счетов сохраняются здесь в тех же деталях, где дополнения сохраняются в таблице № 2 со ссылкой на план выставления счетов, то есть идентификатор плана выставления счетов. Также здесь, в таблице 1, у нас есть две сущности BillingDayOfMonth как целое число и LatefeeAppliedDayOfMonth как целое. Который принимает данные в диапазоне от 1 до 31 (дни месяцев).
Шаг 2: Теперь, во время согласования, арендатор выбирает подходящий для него план выставления счетов, и этот план выставления счетов прилагается к соглашению. В таблице 3 у нас есть идентификатор соглашения и billingplanid. Теперь, когда мы сформировали соглашение, надстройки тарифного плана из таблицы 2 будут вставлены в таблицу 4. Здесь соглашение и BillingPlan имеют отношение 1: 1.
Sterp3: Теперь наступает сценарий ночного процесса, который будет происходить каждую ночь. Сначала он проверит день выставления счета в таблице 3. Он должен будет извлечь идентификатор соглашения для всех пользователей, чей день выставления счета соответствует текущему. Теперь на основе всех соглашений строки из таблицы 4 будут заполнены в таблице 5. Здесь TransactionDate будет нулевым для каждой строки, а Statementdate станет текущей датой. TransactionType, равный 4, такой же, как TransactionTypeId, равный 5. Скажем, мы получили 100 строк из 20 различных идентификаторов соглашения. Кроме того, в то время как мы должны проверить в таблице 6, существует ли какой-либо счет, подлежащий соглашению на основе включенного состояния, которое является битом поле. Если это включено, тогда оно будет установлено в true.
Шаг 4: Взяв таблицы 5 и 7, в таблицу 7 будет вставлена одна строка, которая будет исходным счетом.
Так что это весь мой запрос. Я застрял на шаге 3, где начинается ночной процесс . Я надеюсь, что я вам понятен. Любые вопросы, пожалуйста, поставьте его.
Мой текущий скрипт Sql
BEGIN TRY
BEGIN TRANSACTION
DECLARE @Today AS INT
--
SET @Today =12-- (SELECT DATEPART(DAY,GETDATE()))
-- First of all check for the agreements
INSERT INTO tbl_AccountTranscation (AgreementID,TranscationDate,TranscationTypeID,Amount,StatementDate)
SELECT AgreementId, NULL, TransactionType,Amount,GETDATE() FROM tbl_AgreementTransaction
WHERE AgreementId IN (SELECT AgreementId From tbl_MSTAgreement WHERE BillingDayOfMonth = @Today)
Declare @Count AS INT
SET @Count = (Select COUNT(*) FROM tbl_BillDue WHERE IncludedinStatement=0 AND AgreementID IN (SELECT AgreementId
From tbl_MSTAgreement
WHERE BillingDayOfMonth = @Today) )
IF @Count >0
BEGIN
INSERT INTO tbl_AccountTranscation (AgreementID,TranscationDate,TranscationTypeID,Amount,StatementDate)
Select AgreementId,NULL,-1,ISNULL(((ISNULL(TotalDueAmount,0)+ ISNULL(LateFeeAmount,0)) - ISNULL(AdjustmentAmount,0)),0) as Amount,
GETDATE() as StatementDate
From tbl_BillDue
Where IncludedinStatement = 0 and AgreementID IN ( SELECT AgreementId
From tbl_MSTAgreement
WHERE BillingDayOfMonth = @Today
)
END
--INSERT INTO tbl_MSTBill
--(AgreementId,OutStandingPayment,BillDate,BillDueDate,PaymentDate,AmountPaid)
--SELECT AgreementID, SUM(Amount) as Amount,StatementDate,NULL,NULL,NULL
--FROM tbl_AccountTranscation WHERE AgreementId IN ( SELECT AgreementId
-- From tbl_MSTAgreement
-- WHERE BillingDayOfMonth = 12)
--GROUP BY AgreementID, Amount,StatementDate
SELECT tbl_MSTAgreement.AgreementID, tbl_MSTAgreement.LateFeeApplyDayOfMonth, tbl_AccountTranscation.StatementDate,
SUM(tbl_AccountTranscation.Amount) as Amount
FROM tbl_AccountTranscation INNER JOIN
tbl_MSTAgreement ON tbl_AccountTranscation.AgreementID = tbl_MSTAgreement.AgreementID
GROUP BY tbl_MSTAgreement.AgreementID,Amount,tbl_MSTAgreement.LateFeeApplyDayOfMonth, tbl_AccountTranscation.StatementDate
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
END