|
@@ -132,20 +132,28 @@ namespace Kitty_Fall.Woker.Services
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
var payoutPackageName = GetPackageName(rewardLog);
|
|
var payoutPackageName = GetPackageName(rewardLog);
|
|
|
- var addPointRes = DotnetLib.Mytel.AddingPointLogic.AddingPointHandler(
|
|
|
|
|
- log,
|
|
|
|
|
- configuration,
|
|
|
|
|
- rewardLog.Msisdn,
|
|
|
|
|
- rewardLog.RewardLogId.ToString(CultureInfo.InvariantCulture),
|
|
|
|
|
- payoutPackageName);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ var mockPayoutSuccess = configuration.GetValue("RewardWorker:MockPayoutSuccess", false);
|
|
|
|
|
+ var addPointRes = mockPayoutSuccess
|
|
|
|
|
+ ? null
|
|
|
|
|
+ : DotnetLib.Mytel.AddingPointLogic.AddingPointHandler(
|
|
|
|
|
+ log,
|
|
|
|
|
+ configuration,
|
|
|
|
|
+ rewardLog.Msisdn,
|
|
|
|
|
+ rewardLog.RewardLogId.ToString(CultureInfo.InvariantCulture),
|
|
|
|
|
+ payoutPackageName);
|
|
|
|
|
+
|
|
|
|
|
+ if (mockPayoutSuccess)
|
|
|
|
|
+ {
|
|
|
|
|
+ log.Warn($"MOCK payout success enabled; Bonus Gateway was not called. rewardLogId={rewardLog.RewardLogId}, msisdn={rewardLog.Msisdn}, package={payoutPackageName}");
|
|
|
|
|
+ }
|
|
|
var responseStatus = addPointRes?.result?.status;
|
|
var responseStatus = addPointRes?.result?.status;
|
|
|
var hasResponseCode = int.TryParse(
|
|
var hasResponseCode = int.TryParse(
|
|
|
responseStatus,
|
|
responseStatus,
|
|
|
NumberStyles.Integer,
|
|
NumberStyles.Integer,
|
|
|
CultureInfo.InvariantCulture,
|
|
CultureInfo.InvariantCulture,
|
|
|
out var responseCode);
|
|
out var responseCode);
|
|
|
- var isSuccess = addPointRes?.success == true
|
|
|
|
|
|
|
+ var isSuccess = mockPayoutSuccess
|
|
|
|
|
+ || addPointRes?.success == true
|
|
|
|| (hasResponseCode && responseCode == CommonLogic.AddPointSuccess);
|
|
|| (hasResponseCode && responseCode == CommonLogic.AddPointSuccess);
|
|
|
var isWaiting = hasResponseCode
|
|
var isWaiting = hasResponseCode
|
|
|
&& responseCode == CommonLogic.AddPointWaiting;
|
|
&& responseCode == CommonLogic.AddPointWaiting;
|
|
@@ -156,26 +164,31 @@ namespace Kitty_Fall.Woker.Services
|
|
|
?? (isSuccess
|
|
?? (isSuccess
|
|
|
? CommonLogic.AddPointSuccess.ToString(CultureInfo.InvariantCulture)
|
|
? CommonLogic.AddPointSuccess.ToString(CultureInfo.InvariantCulture)
|
|
|
: CommonLogic.AddPointFailure.ToString(CultureInfo.InvariantCulture));
|
|
: CommonLogic.AddPointFailure.ToString(CultureInfo.InvariantCulture));
|
|
|
- rewardLog.ResponseMessage = Truncate(addPointRes?.message, 500);
|
|
|
|
|
|
|
+ rewardLog.ResponseMessage = mockPayoutSuccess
|
|
|
|
|
+ ? "MOCK_SUCCESS - Bonus Gateway was not called"
|
|
|
|
|
+ : Truncate(addPointRes?.message, 500);
|
|
|
rewardLog.ExternalTransId = rewardLog.RewardLogId.ToString(CultureInfo.InvariantCulture);
|
|
rewardLog.ExternalTransId = rewardLog.RewardLogId.ToString(CultureInfo.InvariantCulture);
|
|
|
rewardLog.UpdatedTime = MyanmarClock.Now;
|
|
rewardLog.UpdatedTime = MyanmarClock.Now;
|
|
|
|
|
|
|
|
if (isSuccess)
|
|
if (isSuccess)
|
|
|
{
|
|
{
|
|
|
rewardLog.Status = StatusSuccess;
|
|
rewardLog.Status = StatusSuccess;
|
|
|
- dbContext.ChargeLogs.Add(new ChargeLog
|
|
|
|
|
- {
|
|
|
|
|
- Id = await NextDecimalIdAsync(dbContext, "CHARGE_LOG_SEQ"),
|
|
|
|
|
- Msisdn = rewardLog.Msisdn,
|
|
|
|
|
- Fee = -rewardLog.RewardValue,
|
|
|
|
|
- ChargeTime = now,
|
|
|
|
|
- InsertTime = now,
|
|
|
|
|
- Description = $"Exchange expense {rewardLog.RewardType?.ToUpperInvariant()} - {payoutPackageName}",
|
|
|
|
|
- AccountId = null,
|
|
|
|
|
- Status = CommonConstants.UNCHARGE_STATUS
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ var chargeFee = -rewardLog.RewardValue;
|
|
|
|
|
+ var chargeDescription = $"Exchange expense {rewardLog.RewardType?.ToUpperInvariant()} - {payoutPackageName}";
|
|
|
|
|
+ var chargeStatus = (decimal)CommonConstants.UNCHARGE_STATUS;
|
|
|
|
|
+
|
|
|
|
|
+ // CHARGE_LOG duoc scaffold HasNoKey nen EF khong the Add/track entity.
|
|
|
|
|
+ // Dung SQL truc tiep va transaction de status reward + charge log cung thanh cong/rollback.
|
|
|
|
|
+ await using var transaction = await dbContext.Database.BeginTransactionAsync(cancellationToken);
|
|
|
|
|
+ await dbContext.Database.ExecuteSqlInterpolatedAsync($@"
|
|
|
|
|
+ INSERT INTO CHARGE_LOG
|
|
|
|
|
+ (ID, MSISDN, FEE, CHARGE_TIME, INSERT_TIME, DESCRIPTION, ACCOUNT_ID, STATUS)
|
|
|
|
|
+ VALUES
|
|
|
|
|
+ (CHARGE_LOG_SEQ.NEXTVAL, {rewardLog.Msisdn}, {chargeFee}, {now}, SYSDATE,
|
|
|
|
|
+ {chargeDescription}, NULL, {chargeStatus})", cancellationToken);
|
|
|
await dbContext.SaveChangesAsync(cancellationToken);
|
|
await dbContext.SaveChangesAsync(cancellationToken);
|
|
|
- await SendSuccessMtAsync(dbContext, rewardLog, cancellationToken);
|
|
|
|
|
|
|
+ await transaction.CommitAsync(cancellationToken);
|
|
|
|
|
+ // await SendSuccessMtAsync(dbContext, rewardLog, cancellationToken);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
else if (isWaiting)
|
|
else if (isWaiting)
|