我需要在我的应用程序计费模块中实现夜间进程的功能。查看相关表格的图像。
让我用红色的数字来解释表格。基本上这是一个房屋分配应用程序数据库,租户可以在其中选择计费方案和插件。就像我们有移动服务一样。
步骤:1。这是第一个最大的表tbl_MSTBilling,最终用户将使用一些插件创建一个计划。 Addon在这里称为事务类型。此处的结算方案一般详细信息保存在相同的详细信息中,其中插件将参考结算方案保存到表2中,即结算方案ID。同样在表1中,我们将两个实体BillingDayOfMonth作为整数,将LatefeeAppliedDayOfMonth作为int。它在1-31(几个月的几天)之间输入。
步骤2:现在在协商时,租户选择了一些适合他的计费方案,然后根据协议附上计费方案。在表3中,我们有协议ID和billingplanid。现在我们生成协议,表2中的计费方案的插件将插入到表4中。这里协议和BillingPlan之间有1:1的关系。
Sterp3:现在每晚都会出现夜间过程。首先,它将检查表3中的每月结算日,它必须将所有用户的协议ID提取为今天的结算日。现在在所有协议的基础上,表4中的行将填充到表5中。这里TransactionDate对于每一行都是null,Statementdate将成为当前日期。 TransactionType为4与TransactionTypeId为5相同。假设我们得到了100行20个不同的AgreementId。也就是说我们必须在表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
答案 0 :(得分:2)
如果调度对您来说很难,您既可以使用SQL代理的预定作业在存储过程中进行夜间工作,也可以编写一个与您相同的控制台应用程序通过Windows内置的计划任务执行。
代码本身不应该那么难以浏览您的要求。
祝你好运:)