You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

201 lines
7.5 KiB

using Common;
using Common.Language;
using Common.Model.AutoRefund;
using Common.Model.Enum;
using Common.Model.KwangjuBank;
using log4net;
using Newtonsoft.Json;
using PushNotification;
using Repository.AutoRefund;
using System;
using System.Runtime.Remoting.Messaging;
using System.Threading.Tasks;
namespace Business.AutoRefund
{
public class AutoRefundBusiness : IAutoRefundBusiness
{
private readonly IAutoRefundRepository _repo;
private static readonly ILog Log = LogManager.GetLogger(typeof(AutoRefundBusiness));
public AutoRefundBusiness(IAutoRefundRepository repo)
{
_repo = repo;
}
public JsonRxResponse UpdateAutoRefund(KwangjuAutoRefundModel model)
{
return _repo.SendAutoRefund(model);
}
public CustomerInfo GetCustomerInfoForKwangju(string customerId)
{
return _repo.GetCustomerInfoForKwangju(customerId);
}
public JsonRxResponse GetRefundRequirement(string userName)
{
var jsonRx = new JsonRxResponse() { ErrorCode = "1", Msg = "Cannot find the requirements." };
var res = _repo.GetRefundRequirement(userName);
if (res == null)
{
return jsonRx;
}
var minAmt = Convert.ToDouble(res.MinimumAmount) + Convert.ToDouble(res.RefundCharge);
var curAmt = Convert.ToDouble(res.CurrentBalance);
if (curAmt < minAmt)
{
jsonRx.SetResponse("1", "You donot have sufficient amount.");
return jsonRx;
}
jsonRx.SetResponse("0", "Success");
jsonRx.Data = res;
return jsonRx;
}
public JsonRxResponse ProcessAutoRefund(AutoRefundRequestModel model)
{
JsonRxResponse JsonRx = new JsonRxResponse { ErrorCode = "1", Msg = "Refund Request cannot proceed further. Please contact GME head office." };
KwangjuAutoRefundModel kjModel = new KwangjuAutoRefundModel
{
Flag = "REQ",
CustomerId = model.UserId,
CustomerSummary = "",
Amount = model.Amount,
Action = "REQ",
ActionDate = "",
ActionBy = model.Username
};
//Laster remove this for demo purpose only now
// INSERT REQUEST INTO DB AND GENERATE VOUCHER / DIDUCT BALANCE
var res = _repo.SendAutoRefund(kjModel);
if (res.ErrorCode != "0")
{
JsonRx.ErrorCode = res.ErrorCode;
JsonRx.Msg = res.Msg;
return JsonRx;
}
/*
* KJ_AUTO_REFUND의 RowId를 이용해서 Update한다.
* */
kjModel.RowId = res.Id;
//GET CUSTOMER INFORMATION FOR KJ BANK API TO REFUND BALANCE IN CUSTOMER PRIMARY ACCOUNT
var custDetail = _repo.GetCustomerInfoForKwangju(model.UserId);
//kjModel.Amount = (Convert.ToDecimal(model.Amount) - Convert.ToDecimal(model.ChargeAmount)).ToString();
AmountTransferToBank req = new AmountTransferToBank
{
obpId = "", // "001-90010001-000001-6000001", //GME OBPID
accountNo = "KJ",// "1107020345626", //GME 계좌코드
accountPassword = "", // "1212", //GME 패스워드
receiveInstitution = custDetail.BankCode.ToString(),
receiveAccountNo = custDetail.BankAccountNo.ToString(),
amount = (Convert.ToDecimal(model.Amount) - 1000).ToString(),
bankBookSummary = String.Format("REFUND{0}", custDetail.BankAccountNo.ToString()),
transactionSummary = "GME Refund"
};
//FOR TEST
//req.receiveInstitution = "034";
//req.receiveAccountNo = "145121636083";
var body = JsonConvert.SerializeObject(req);
var resp = KwangjuBankApi.TransferAmount(body);
var dbApiRes = JsonConvert.DeserializeObject<JsonRxResponse>(resp);
if (!dbApiRes.ErrorCode.Equals("0"))
{
if (dbApiRes.ErrorCode.Equals(ErrorCode.One))
{
var kjMsg = JsonConvert.DeserializeObject<KwangjuResult>(dbApiRes.Msg);
var eCode = kjMsg.error.code.ToString();
var eMessage = kjMsg.error.message.ToString();
dbApiRes.Msg = "Something is wrong. " + eCode + " " + eMessage;
}
kjModel.Flag = "FAIL";
kjModel.Action = "FAIL";
}
else
{
kjModel.Flag = "SUCCESS";
kjModel.Action = "SUCCESS";
}
var rs = _repo.SendAutoRefund(kjModel);
if (rs.ErrorCode.Equals("0"))
{
var fcmId = Convert.ToString(CallContext.GetData(Constants.FcmId));
var lang = Convert.ToString(CallContext.GetData(Constants.Language));
Task.Run(() => FcmNotifier.Notify(fcmId, Languages.GetMessage("autorefund_success", lang), Languages.GetTitle("autorefund", lang)));
}
rs.Data = new { Message = rs.Msg, Extra = rs.Extra };
return rs;
}
public JsonRxResponse AutoDebitGiveBackDeposit(AutoDebitRefund refundInfo, AmountTransferToBank transferToBank)
{
var jsonRx = new JsonRxResponse { ErrorCode = "1", Msg = "Failed!" };
_repo.LogFailTransactionForAutoDebit(refundInfo.RowId, refundInfo.ErrorCode, refundInfo.ErrorMsg);
try
{
KwangjuAutoRefundModel kj = new KwangjuAutoRefundModel()
{
Flag = "Autodebit_REQ",
CustomerId = refundInfo.CustomerId,
CustomerSummary = "",
Amount = transferToBank.amount,
Action = "REQ",
ActionDate = "",
ActionBy = refundInfo.Username,
BankCode = transferToBank.receiveInstitution,
BankAccountNo = transferToBank.receiveAccountNo
};
var res = _repo.SendAutoRefund(kj);
kj.RowId = res.Id;
var json = JsonConvert.SerializeObject(transferToBank);
var resp = KwangjuBankApi.TransferAmount(json);
jsonRx = JsonConvert.DeserializeObject<JsonRxResponse>(resp);
if (!jsonRx.ErrorCode.Equals("0"))
{
if (jsonRx.ErrorCode.Equals(ErrorCode.One))
{
var kjMsg = JsonConvert.DeserializeObject<KwangjuResult>(jsonRx.Msg);
var eCode = kjMsg.error.code.ToString();
var eMessage = kjMsg.error.message.ToString();
jsonRx.Msg = "Something is wrong. " + eCode + " " + eMessage;
}
kj.Flag = "Autodebit_FAIL";
kj.Action = "FAIL";
}
else
{
kj.Flag = "SUCCESS";
kj.Action = "SUCCESS";
}
jsonRx = _repo.SendAutoRefund(kj);
if (jsonRx.ErrorCode.Equals("0"))
{
jsonRx.Data = new { Message = jsonRx.Msg };
}
return jsonRx;
}
catch (Exception ex)
{
return jsonRx;
}
}
}
}