From 982f24c64a09714f38cf6a91e6e7e71a55188cc2 Mon Sep 17 00:00:00 2001 From: luoyang Date: Mon, 27 Apr 2020 18:06:55 +0800 Subject: [PATCH] =?UTF-8?q?add=20mw=E5=90=88=E8=A7=84=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E3=80=81=E8=B4=A2=E5=8A=A1=E6=8A=A5=E8=A1=A8=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mappers/system/ClientMWFilesMapper.java | 3 +- .../beans/ClientMWAuthFilesInfo.java | 99 ++++-- .../core/impls/ClientManagerImpl.java | 26 +- .../merchants/enums/UPayAuthFileEnum.java | 26 +- .../manage/tradelog/core/TradeLogService.java | 2 + .../core/impls/TradeLogServiceImpl.java | 116 ++++++- .../tradelog/web/TradeFlowController.java | 6 + .../mappers/payment/TransactionMapper.xml | 4 +- .../jasper/partner_upay_invoice_gst.jasper | Bin 0 -> 83133 bytes src/main/ui/static/analysis/clearing-log.js | 4 + .../templates/settlement_transactions.html | 10 + .../commons/services/clearingDetailService.js | 4 + src/main/ui/static/config/bdprize/bdprize.js | 4 + .../static/payment/partner/partner-manage.js | 324 +++++++++++++----- .../partner/templates/add_partner.html | 2 +- .../partner/templates/partner_auth_files.html | 29 +- .../templates/partner_cp_auth_files.html | 2 +- .../partner/templates/partner_detail.html | 52 ++- .../partner/templates/partner_edit.html | 2 +- .../templates/partner_mw_auth_files.html | 221 +++++++----- .../partner/templates/partner_settlement.html | 7 +- .../tradelog/templates/balance_report.html | 3 +- .../templates/partner_settlement_dialog.html | 11 + .../templates/partner_settlement_logs.html | 5 + .../ui/static/payment/tradelog/transflow.js | 3 + 25 files changed, 728 insertions(+), 237 deletions(-) create mode 100644 src/main/resources/jasper/partner_upay_invoice_gst.jasper diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMWFilesMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMWFilesMapper.java index 88efbe614..e5064a1cf 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMWFilesMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMWFilesMapper.java @@ -1,6 +1,7 @@ package au.com.royalpay.payment.manage.mappers.system; import com.alibaba.fastjson.JSONObject; +import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import com.yixsoft.support.mybatis.autosql.annotations.AdvanceSelect; import com.yixsoft.support.mybatis.autosql.annotations.AutoMapper; import com.yixsoft.support.mybatis.autosql.annotations.AutoSql; @@ -22,5 +23,5 @@ public interface ClientMWFilesMapper { @AutoSql(SqlType.SELECT) @AdvanceSelect(addonWhereClause = "is_valid = 1") - List findClientFile(@Param("client_id") int clientId); + List findClientFile(@Param("client_id") int clientId, PageBounds pageBounds); } diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/beans/ClientMWAuthFilesInfo.java b/src/main/java/au/com/royalpay/payment/manage/merchants/beans/ClientMWAuthFilesInfo.java index 51d263c92..45235245c 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/beans/ClientMWAuthFilesInfo.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/beans/ClientMWAuthFilesInfo.java @@ -7,11 +7,16 @@ import org.apache.commons.lang3.StringUtils; * Created by yishuqian on 07/03/2017. */ public class ClientMWAuthFilesInfo { - private String upay_application_form; - private String upay_agreement_file; + private String client_bank_file; + private String client_company_file; + private String refund_exchange_policy; + private String upay_privacy_policy; + private String card_security_policy; + private String upay_promotional_offer; + private String upay_terms_conditions; private String upay_offer_letter; private String upay_driver_license; - private String upay_residence_certificate; + private String kyc_utility_bill_file; private String upay_risk_level; private String upay_risk_remark; @@ -30,14 +35,6 @@ public class ClientMWAuthFilesInfo { return params; } - public String getUpay_agreement_file() { - return upay_agreement_file; - } - - public String getUpay_application_form() { - return upay_application_form; - } - public String getUpay_driver_license() { return upay_driver_license; } @@ -46,18 +43,6 @@ public class ClientMWAuthFilesInfo { return upay_offer_letter; } - public void setUpay_agreement_file(String upay_agreement_file) { - this.upay_agreement_file = upay_agreement_file; - } - - public void setUpay_application_form(String upay_application_form) { - this.upay_application_form = upay_application_form; - } - - public String getUpay_residence_certificate() { - return upay_residence_certificate; - } - public String getUpay_risk_level() { return upay_risk_level; } @@ -70,10 +55,6 @@ public class ClientMWAuthFilesInfo { this.upay_offer_letter = upay_offer_letter; } - public void setUpay_residence_certificate(String upay_residence_certificate) { - this.upay_residence_certificate = upay_residence_certificate; - } - public String getUpay_risk_remark() { return upay_risk_remark; } @@ -85,4 +66,68 @@ public class ClientMWAuthFilesInfo { public void setUpay_risk_remark(String upay_risk_remark) { this.upay_risk_remark = upay_risk_remark; } + + public String getCard_security_policy() { + return card_security_policy; + } + + public String getClient_bank_file() { + return client_bank_file; + } + + public String getClient_company_file() { + return client_company_file; + } + + public String getUpay_privacy_policy() { + return upay_privacy_policy; + } + + public String getUpay_promotional_offer() { + return upay_promotional_offer; + } + + public void setCard_security_policy(String card_security_policy) { + this.card_security_policy = card_security_policy; + } + + public String getUpay_terms_conditions() { + return upay_terms_conditions; + } + + public void setClient_bank_file(String client_bank_file) { + this.client_bank_file = client_bank_file; + } + + public void setClient_company_file(String client_company_file) { + this.client_company_file = client_company_file; + } + + public void setUpay_privacy_policy(String upay_privacy_policy) { + this.upay_privacy_policy = upay_privacy_policy; + } + + public void setUpay_promotional_offer(String upay_promotional_offer) { + this.upay_promotional_offer = upay_promotional_offer; + } + + public void setUpay_terms_conditions(String upay_terms_conditions) { + this.upay_terms_conditions = upay_terms_conditions; + } + + public String getRefund_exchange_policy() { + return refund_exchange_policy; + } + + public void setRefund_exchange_policy(String refund_exchange_policy) { + this.refund_exchange_policy = refund_exchange_policy; + } + + public String getKyc_utility_bill_file() { + return kyc_utility_bill_file; + } + + public void setKyc_utility_bill_file(String kyc_utility_bill_file) { + this.kyc_utility_bill_file = kyc_utility_bill_file; + } } diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java index 3295258dc..56088735f 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java @@ -438,7 +438,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } client.putAll(clientConfig); JSONObject upayInfo = sysClientUpayProfileMapper.findInfo(client.getIntValue("client_id")); - if(null != upayInfo){ + if (upayInfo != null) { client.putAll(upayInfo); } client.put("unsubscribe", mailUnsubMapper.findOneByClientMoniker(clientMoniker) == null ? false : true); @@ -3435,7 +3435,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid if (client == null) { throw new InvalidShortIdException(); } - List files = clientMWAuthFilesInfo.findClientFile(client.getIntValue("client_id")); + List files = clientMWAuthFilesInfo.findClientFile(client.getIntValue("client_id"), new PageBounds(1, 999999, Order.formString("last_update_date.asc"))); if (files != null && files.size() > 0) { List filePaths = new ArrayList<>(); for (JSONObject file : files) { @@ -3641,7 +3641,12 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } int clientId = client.getIntValue("client_id"); params.put("client_id", client.getIntValue("client_id")); - clientConfigMapper.update(params); + JSONObject upayInfo = sysClientUpayProfileMapper.findInfo(clientId); + if (upayInfo == null) { + sysClientUpayProfileMapper.save(params); + }else { + sysClientUpayProfileMapper.update(params); + } } @Override @@ -3759,7 +3764,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid if (client == null) { throw new InvalidShortIdException(); } - List clientFiles = clientMWAuthFilesInfo.findClientFile(client.getIntValue("client_id")); + List clientFiles = clientMWAuthFilesInfo.findClientFile(client.getIntValue("client_id"), new PageBounds(1,999999, Order.formString("last_update_date.asc"))); JSONObject fileJson = new JSONObject(); for (JSONObject file : clientFiles) { fileJson.put(file.getString("file_name"), file.getString("file_value")); @@ -3917,11 +3922,16 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } int clientId = client.getIntValue("client_id"); try { - updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_APPLICATION_FORM.getFileName(), filesInfo.getUpay_application_form()); - updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_AGREEMENT_FILE.getFileName(), filesInfo.getUpay_agreement_file()); - updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_OFFER_LETTER.getFileName(), filesInfo.getUpay_offer_letter()); + updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.CLIENT_BANK_FILE.getFileName(), filesInfo.getClient_bank_file()); + updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.CLIENT_COMPANY_FILE.getFileName(), filesInfo.getClient_company_file()); updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_DRIVER_LICENSE.getFileName(), filesInfo.getUpay_driver_license()); - updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_RESIDENCE_CERTIFICATE.getFileName(), filesInfo.getUpay_residence_certificate()); + updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.REFUND_EXCHANGE_POLICY.getFileName(), filesInfo.getRefund_exchange_policy()); + updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_PRIVACY_POLICY.getFileName(), filesInfo.getUpay_privacy_policy()); + updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.CARD_SECURITY_POLICY.getFileName(), filesInfo.getCard_security_policy()); + updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_OFFER_LETTER.getFileName(), filesInfo.getUpay_offer_letter()); + updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_PROMOTIONAL_OFFER.getFileName(), filesInfo.getUpay_promotional_offer()); + updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.UPAY_TERMS_CONDITIONS.getFileName(), filesInfo.getUpay_terms_conditions()); + updateSysMWClientFiles(manager, clientId, UPayAuthFileEnum.KYC_UTILITY_BILL_FILE.getFileName(), filesInfo.getKyc_utility_bill_file()); } catch (Exception e) { logger.error("上传合规文件失败", e); } diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/enums/UPayAuthFileEnum.java b/src/main/java/au/com/royalpay/payment/manage/merchants/enums/UPayAuthFileEnum.java index 4118df321..992e1280c 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/enums/UPayAuthFileEnum.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/enums/UPayAuthFileEnum.java @@ -2,11 +2,16 @@ package au.com.royalpay.payment.manage.merchants.enums; public enum UPayAuthFileEnum { ALL(""), - UPAY_APPLICATION_FORM("upay_application_form"), - UPAY_AGREEMENT_FILE("upay_agreement_file"), - UPAY_OFFER_LETTER("upay_offer_letter"), + CLIENT_BANK_FILE("client_bank_file"), + CLIENT_COMPANY_FILE("client_company_file"), UPAY_DRIVER_LICENSE("upay_driver_license"), - UPAY_RESIDENCE_CERTIFICATE("upay_residence_certificate"); + REFUND_EXCHANGE_POLICY("refund_exchange_policy"), + UPAY_PRIVACY_POLICY("upay_privacy_policy"), + CARD_SECURITY_POLICY("card_security_policy"), + UPAY_OFFER_LETTER("upay_offer_letter"), + UPAY_PROMOTIONAL_OFFER("upay_promotional_offer"), + UPAY_TERMS_CONDITIONS("upay_terms_conditions"), + KYC_UTILITY_BILL_FILE("kyc_utility_bill_file"); private final String fileName; @@ -19,10 +24,15 @@ public enum UPayAuthFileEnum { } public String[] getFileNameArrays() { - return new String[]{UPAY_APPLICATION_FORM.getFileName(), - UPAY_AGREEMENT_FILE.getFileName(), + return new String[]{CLIENT_BANK_FILE.getFileName(), + CLIENT_COMPANY_FILE.getFileName(), + UPAY_OFFER_LETTER.getFileName(), + REFUND_EXCHANGE_POLICY.getFileName(), + UPAY_PRIVACY_POLICY.getFileName(), + CARD_SECURITY_POLICY.getFileName(), UPAY_OFFER_LETTER.getFileName(), - UPAY_DRIVER_LICENSE.getFileName(), - UPAY_RESIDENCE_CERTIFICATE.getFileName()}; + UPAY_PROMOTIONAL_OFFER.getFileName(), + UPAY_TERMS_CONDITIONS.getFileName(), + KYC_UTILITY_BILL_FILE.getFileName()}; } } diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/TradeLogService.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/TradeLogService.java index b7627151d..a9e3a978a 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/TradeLogService.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/TradeLogService.java @@ -36,6 +36,8 @@ public interface TradeLogService { void exportTransFlow(TradeLogQuery query, JSONObject partner, HttpServletResponse response) throws Exception; + void exportUpayTransFlow(TradeLogQuery query, JSONObject partner, HttpServletResponse response) throws Exception; + void exportTransFlowApi(TradeLogQuery query, JSONObject partner, HttpServletResponse response) throws Exception; void exportExcel(TradeLogQuery query, JSONObject partner, HttpServletResponse response) throws Exception; diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java index 8d06b70dc..b6046766c 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/core/impls/TradeLogServiceImpl.java @@ -136,6 +136,8 @@ public class TradeLogServiceImpl implements TradeLogService { private org.springframework.core.io.Resource trans_flow; @Value("classpath:/jasper/incremental_partner_invoice_gst.jasper") private org.springframework.core.io.Resource incremental_trans_flow; + @Value("classpath:/jasper/partner_upay_invoice_gst.jasper") + private org.springframework.core.io.Resource upay_trans_flow; @Value("classpath:/jasper/royalpay_logo.png") private org.springframework.core.io.Resource logo; @Value("classpath:/jasper/trans_excel.jasper") @@ -573,6 +575,30 @@ public class TradeLogServiceImpl implements TradeLogService { return result; } + private JSONObject listPartnerTransFlowByExportPdf(TradeLogQuery query, JSONObject partner, String[] channels) throws Exception { + int clientId = partner.getIntValue("client_id"); + String timezone = partner.getJSONObject("client").getString("timezone"); + JSONObject params = query.toParams(timezone); + params.put("channel", channels); + clientManager.validateClients(clientId, params); + params.put("client_id", clientId); + clientManager.queryModifyClientIds(clientId, params); + List logs = transactionMapper.listTransFlow(params); + TimeZoneUtils.switchTimeZoneToString(logs, timezone, "dd/MM/yyyy HH:mm:ss", Collections.singletonList("transaction_time")); + TimeZoneUtils.switchTimeZoneToString(logs, timezone, "dd/MM/yyyy", Collections.singletonList("clearing_time")); + + final JSONObject analysis = analysisTransLogs(logs); + + JSONObject result = new JSONObject(); + result.put("data", logs); + analysis.put("balance", transactionMapper.analysisBalance(params)); + if (analysis.containsKey("paid_fee") && analysis.containsKey("refund_fee")) { + analysis.put("actual_fee", analysis.getBigDecimal("paid_fee").add(analysis.getBigDecimal("refund_fee"))); + } + result.put("analysis", analysis); + return result; + } + private JSONObject analysisTransLogs(List logs) { final JSONObject analysis = new JSONObject(); analysis.put("order_count", logs.size()); @@ -633,10 +659,18 @@ public class TradeLogServiceImpl implements TradeLogService { .filter(log -> log.getBigDecimal("settle_amount") != null) .map(log -> getSymbol(log).multiply(log.getBigDecimal("incremental_surcharge"))) .reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); + analysis.put("total_transaction_fee", logs.parallelStream() + .filter(log -> log.getBigDecimal("settle_amount") != null) + .map(log -> getSymbol(log).multiply(log.getBigDecimal("transaction_fee"))) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); analysis.put("total_incremental_tax", logs.parallelStream() .filter(log -> log.getBigDecimal("settle_amount") != null) .map(log -> getSymbol(log).multiply(log.getBigDecimal("incremental_surcharge").divide(new BigDecimal(10), 2, RoundingMode.HALF_UP))) .reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); + analysis.put("total_transaction_fee_tax", logs.parallelStream() + .filter(log -> log.getBigDecimal("settle_amount") != null) + .map(log -> getSymbol(log).multiply(log.getBigDecimal("transaction_fee").divide(new BigDecimal(10), 2, RoundingMode.HALF_UP))) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); analysis.put("total_surcharge", logs.parallelStream() .filter(log -> log.getBigDecimal("settle_amount") != null) .map(log -> getSymbol(log).multiply(log.getBigDecimal("total_surcharge").add(log.getBigDecimal("tax_amount")))) @@ -679,7 +713,7 @@ public class TradeLogServiceImpl implements TradeLogService { @Override public void exportTransFlow(TradeLogQuery query, JSONObject partner, HttpServletResponse response) throws Exception { - JSONObject transFlow = listPartnerTransFlow(query, partner); + JSONObject transFlow = listPartnerTransFlowByExportPdf(query, partner,new String[]{"Wechat","Alipay","AlipayOnline"}); JSONObject analysis = transFlow.getJSONObject("analysis"); JSONObject client = clientManager.getClientInfo(partner.getIntValue("client_id")); if (!transFlow.getJSONArray("data").isEmpty()) { @@ -736,7 +770,7 @@ public class TradeLogServiceImpl implements TradeLogService { }); JRDataSource jrDataSource = new JRBeanCollectionDataSource(dataList); response.setContentType("application/pdf"); - String fileName = client.getString("client_moniker") + "_" + parmerters.getString("dateRange").replaceAll("/", ""); + String fileName = client.getString("client_moniker") + "_Cross_Border_" + parmerters.getString("dateRange").replaceAll("/", ""); response.setHeader("Content-Disposition", "attachment;fileName=" + fileName + ".pdf"); OutputStream outs = response.getOutputStream(); JSONObject clientIncrement = clientIncrementalMapper.findByClinetIdAndChannel(client.getIntValue("client_id"), "RP跨境商城"); @@ -752,6 +786,84 @@ public class TradeLogServiceImpl implements TradeLogService { } } + @Override + public void exportUpayTransFlow(TradeLogQuery query, JSONObject partner, HttpServletResponse response) throws Exception { + JSONObject transFlow = listPartnerTransFlowByExportPdf(query, partner,new String[]{"rpaypmt_card","rpaypmt_dd"}); + JSONObject analysis = transFlow.getJSONObject("analysis"); + JSONObject client = clientManager.getClientInfo(partner.getIntValue("client_id")); + if (!transFlow.getJSONArray("data").isEmpty()) { + try { + List dataList = transFlow.getJSONArray("data").toJavaList(JSONObject.class); + JSONObject parmerters = new JSONObject(); + parmerters.put("dateFrom", StringUtils.isNotBlank(query.getDatefrom()) + ? DateFormatUtils.format(DateUtils.parseDate(query.getDatefrom(), "yyyyMMdd"), "dd/MM/yyyy") : ""); + parmerters.put("dateTo", + StringUtils.isNotBlank(query.getDateto()) + ? DateFormatUtils.format(DateUtils.parseDate(query.getDateto(), "yyyyMMdd"), "dd/MM/yyyy") + : DateFormatUtils.format(new Date(), "dd/MM/yyyy")); + parmerters.put("dateRange", (StringUtils.isNotBlank(parmerters.getString("dateFrom")) ? parmerters.getString("dateFrom") : "") + "~" + + parmerters.getString("dateTo")); + parmerters.put("partnerCode", client.getString("client_moniker")); + parmerters.put("clientName", client.getString("company_name")); + parmerters.put("clientAddress", client.getString("address")); + parmerters.put("balance", analysis.getDoubleValue("balance")); + parmerters.put("logo", logo.getInputStream()); + parmerters.put("actual_fee", takeDecimalOrDefault(analysis, "actual_fee", BigDecimal.ZERO)); + parmerters.put("totalSettledAmount", takeDecimalOrDefault(analysis, "total_settle_amount", BigDecimal.ZERO)); + parmerters.put("royalpay_charge", takeDecimalOrDefault(analysis, "total_royal_surcharge", BigDecimal.ZERO)); + parmerters.put("total_fee", takeDecimalOrDefault(analysis, "total_surcharge", BigDecimal.ZERO)); + parmerters.put("alipay_fee", takeDecimalOrDefault(analysis, "alipay_fee", BigDecimal.ZERO)); + parmerters.put("wechat_fee", takeDecimalOrDefault(analysis, "wechat_fee", BigDecimal.ZERO)); + parmerters.put("bestpay_fee", takeDecimalOrDefault(analysis, "bestpay_fee", BigDecimal.ZERO)); + parmerters.put("jd_fee", takeDecimalOrDefault(analysis, "jd_fee", BigDecimal.ZERO)); + parmerters.put("alipay_online_fee", takeDecimalOrDefault(analysis, "alipay_online_fee", BigDecimal.ZERO)); + parmerters.put("gst", takeDecimalOrDefault(analysis, "tax_amount", BigDecimal.ZERO)); + parmerters.put("royalpay_fee", takeDecimalOrDefault(analysis, "total_royalpay_fee", BigDecimal.ZERO)); + parmerters.put("incremental_fee", takeDecimalOrDefault(analysis, "total_incremental_surcharge", BigDecimal.ZERO)); + parmerters.put("incremental_gst", takeDecimalOrDefault(analysis, "total_incremental_tax", BigDecimal.ZERO)); + parmerters.put("royalpay_gst", analysis.getBigDecimal("tax_amount").subtract(analysis.getBigDecimal("total_incremental_tax")).setScale(2,RoundingMode.HALF_UP)); + parmerters.put("total_transaction_fee", analysis.getBigDecimal("total_transaction_fee").add(analysis.getBigDecimal("total_transaction_fee_tax")).setScale(2,RoundingMode.HALF_UP)); + parmerters.put("total_royalpay_fee", analysis.getBigDecimal("total_surcharge").subtract(parmerters.getBigDecimal("total_transaction_fee")).setScale(2,RoundingMode.HALF_UP)); + + dataList.parallelStream().forEach(item -> { + BigDecimal incrementalSurcharge = item.containsKey("incremental_surcharge") ? item.getBigDecimal("incremental_surcharge") : BigDecimal.ZERO; + BigDecimal taxAmount = item.containsKey("tax_amount") ? item.getBigDecimal("tax_amount") : BigDecimal.ZERO; + BigDecimal royalpaySurhcarge = item.containsKey("royal_surcharge") ? item.getBigDecimal("royal_surcharge") : BigDecimal.ZERO; + BigDecimal surhcargeBack = item.containsKey("surcharge_cashback") ? item.getBigDecimal("surcharge_cashback") : BigDecimal.ZERO; + BigDecimal channelSurcharge = item.containsKey("channel_surcharge") ? item.getBigDecimal("channel_surcharge") : BigDecimal.ZERO; + BigDecimal incrementalTax = incrementalSurcharge.divide(new BigDecimal(10), 2, RoundingMode.HALF_UP); + BigDecimal transactionFee = item.getBigDecimal("transaction_fee"); + BigDecimal transactionFeeTax = item.getBigDecimal("transaction_fee").divide(new BigDecimal(10), 2, RoundingMode.HALF_UP); + BigDecimal royalpayTax = taxAmount.subtract(incrementalTax).subtract(transactionFeeTax); + BigDecimal realRoyalpayCharge = item.getBigDecimal("total_surcharge").add(taxAmount).subtract(transactionFee).subtract(transactionFeeTax); + item.put("incremental_surcharge", incrementalSurcharge.add(incrementalTax).setScale(2, RoundingMode.HALF_UP)); + item.put("total_surcharge_intax", realRoyalpayCharge.setScale(2, RoundingMode.HALF_UP)); + item.put("transaction_fee_intax", transactionFee.add(transactionFeeTax).setScale(2,RoundingMode.HALF_UP)); + scaleDecimalVal(item, "display_amount", item.getString("currency")); + String platformCurrency = PlatformEnvironment.getEnv().getForeignCurrency(); + scaleDecimalVal(item, "clearing_amount", platformCurrency); + scaleDecimalVal(item, "settle_amount", platformCurrency); + scaleDecimalVal(item, "total_surcharge", platformCurrency); + }); + JRDataSource jrDataSource = new JRBeanCollectionDataSource(dataList); + response.setContentType("application/pdf"); + String fileName = client.getString("client_moniker") + "_Card_Payment_" + parmerters.getString("dateRange").replaceAll("/", ""); + response.setHeader("Content-Disposition", "attachment;fileName=" + fileName + ".pdf"); + OutputStream outs = response.getOutputStream(); +// JSONObject clientIncrement = clientIncrementalMapper.findByClinetIdAndChannel(client.getIntValue("client_id"), "RP跨境商城"); +// InputStream jasper = clientIncrement == null ? trans_flow.getInputStream() : incremental_trans_flow.getInputStream(); + InputStream jasper = upay_trans_flow.getInputStream(); + byte[] bytes = JasperRunManager.runReportToPdf(jasper, parmerters, jrDataSource); + outs.write(bytes, 0, bytes.length); + outs.flush(); + outs.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + @Override public void exportTransFlowApi(TradeLogQuery query, JSONObject partner, HttpServletResponse response) throws Exception { query.setClearing_status(-1); diff --git a/src/main/java/au/com/royalpay/payment/manage/tradelog/web/TradeFlowController.java b/src/main/java/au/com/royalpay/payment/manage/tradelog/web/TradeFlowController.java index 42c2660fa..ea744807d 100644 --- a/src/main/java/au/com/royalpay/payment/manage/tradelog/web/TradeFlowController.java +++ b/src/main/java/au/com/royalpay/payment/manage/tradelog/web/TradeFlowController.java @@ -39,6 +39,12 @@ public class TradeFlowController { tradeLogService.exportTransFlow(query, partner, httpResponse); } + @PartnerMapping(value = "/report/upay_pdf", method = RequestMethod.GET) + @ReadOnlyConnection + public void exportUpayPDF(TradeLogQuery query, @ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner, HttpServletResponse httpResponse) throws Exception { + tradeLogService.exportUpayTransFlow(query, partner, httpResponse); + } + @PartnerMapping(value = "/report/excel", method = RequestMethod.GET) @ReadOnlyConnection public void exportExcel(TradeLogQuery query, @ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject partner, HttpServletResponse httpResponse) throws Exception { diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml index a71c233a1..a4ee7285c 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.xml @@ -576,9 +576,11 @@ (SELECT min(r.rate_value) FROM sys_client_rates r WHERE r.client_id = t.client_id AND date(r.expiry_time) >= DATE(t.clearing_time) AND date(r.active_time) <= DATE(t.clearing_time)) rate, - t.clearing_order clear_detail_id + t.clearing_order clear_detail_id, + lc.balance_group FROM pmt_transactions t left join log_clearing_detail cd on cd.clear_detail_id=t.clearing_order + left join log_clearing lc on cd.clearing_id = lc.clearing_id left join sys_clients sc on t.client_id = sc.client_id WHERE t.channel='Settlement' diff --git a/src/main/resources/jasper/partner_upay_invoice_gst.jasper b/src/main/resources/jasper/partner_upay_invoice_gst.jasper new file mode 100644 index 0000000000000000000000000000000000000000..e017ea27964d50fd889e437919069bd62738e221 GIT binary patch literal 83133 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 literal 0 HcmV?d00001 diff --git a/src/main/ui/static/analysis/clearing-log.js b/src/main/ui/static/analysis/clearing-log.js index ab825af23..60993ba21 100644 --- a/src/main/ui/static/analysis/clearing-log.js +++ b/src/main/ui/static/analysis/clearing-log.js @@ -556,6 +556,10 @@ define(['angular', 'decimal', 'uiBootstrap', 'uiRouter', 'angularEcharts'], func return '/static/images/yeepay_sign_lg.png'; case 'LakalaPay': return '/static/images/lakalapay_sign_lg.png'; + case 'rpaypmt_card': + return '/static/images/card_payment_sign_lg.png'; + case 'rpaypmt_dd': + return '/static/images/direct_debit_sign_lg.png'; } } }); diff --git a/src/main/ui/static/analysis/templates/settlement_transactions.html b/src/main/ui/static/analysis/templates/settlement_transactions.html index 4b118af1c..4126077bc 100644 --- a/src/main/ui/static/analysis/templates/settlement_transactions.html +++ b/src/main/ui/static/analysis/templates/settlement_transactions.html @@ -53,6 +53,16 @@ +
  • + + + +
  • +
  • + + + +
  • diff --git a/src/main/ui/static/commons/services/clearingDetailService.js b/src/main/ui/static/commons/services/clearingDetailService.js index 7d347e1cf..7e0bd7faa 100644 --- a/src/main/ui/static/commons/services/clearingDetailService.js +++ b/src/main/ui/static/commons/services/clearingDetailService.js @@ -87,6 +87,10 @@ define(['../app','decimal'], function (app,Decimal) { return '/static/images/hf_sign_lg.png'; case 'Rpay': return '/static/images/rpayplus_sign_lg.png'; + case 'rpaypmt_card': + return '/static/images/card_payment_sign_lg.png'; + case 'rpaypmt_dd': + return '/static/images/direct_debit_sign_lg.png'; } } }); diff --git a/src/main/ui/static/config/bdprize/bdprize.js b/src/main/ui/static/config/bdprize/bdprize.js index 46acd352f..eaac60668 100644 --- a/src/main/ui/static/config/bdprize/bdprize.js +++ b/src/main/ui/static/config/bdprize/bdprize.js @@ -415,6 +415,10 @@ define(['angular', '../../analysis/bd/analysis-bd'], function (angular) { return '/static/images/yeepay_sign_lg.png'; case 'LakalaPay': return '/static/images/lakalapay_sign_lg.png'; + case 'rpaypmt_card': + return '/static/images/card_payment_sign_lg.png'; + case 'rpaypmt_dd': + return '/static/images/direct_debit_sign_lg.png'; } } }); diff --git a/src/main/ui/static/payment/partner/partner-manage.js b/src/main/ui/static/payment/partner/partner-manage.js index 20874bac1..db73e6dfc 100644 --- a/src/main/ui/static/payment/partner/partner-manage.js +++ b/src/main/ui/static/payment/partner/partner-manage.js @@ -3658,9 +3658,53 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter app.controller('partnerMWAuthFileCtrl', ['$scope', '$http', '$rootScope', 'commonDialog', '$state', 'Upload', 'file', function ($scope, $http, $rootScope, commonDialog, $state, Upload, file) { $scope.id_info_form = {edit: false}; $scope.file = file.data || {}; + $scope.uploadFile = {}; $scope.file.upay_risk_level = $scope.partner.upay_risk_level; $scope.file.upay_risk_remark = $scope.partner.upay_risk_remark; - $scope.uploadApplyFile = function (file) { + + $scope.bankIsImage = true; + $scope.asicIsImage = true; + $scope.idIsImage = true; + $scope.utilityIsImage = true; + $scope.refundIsImage = true; + $scope.privacyIsImage = true; + $scope.cardIsImage = true; + $scope.letterIsImage = true; + $scope.promotionalIsImage = true; + $scope.termsIsImage = true; + if ($scope.file.client_bank_file && $scope.file.client_bank_file.endsWith('pdf')) { + $scope.bankIsImage = false; + } + if ($scope.file.client_company_file && $scope.file.client_company_file.endsWith('pdf')) { + $scope.asicIsImage = false; + } + if ($scope.file.upay_driver_license && $scope.file.upay_driver_license.endsWith('pdf')) { + $scope.idIsImage = false; + } + if ($scope.file.kyc_utility_bill_file && $scope.file.kyc_utility_bill_file.endsWith('pdf')) { + $scope.utilityIsImage = false; + } + if ($scope.file.refund_exchange_policy && $scope.file.refund_exchange_policy.endsWith('pdf')) { + $scope.refundIsImage = false; + } + if ($scope.file.upay_privacy_policy && $scope.file.upay_privacy_policy.endsWith('pdf')) { + $scope.privacyIsImage = false; + } + if ($scope.file.card_security_policy && $scope.file.card_security_policy.endsWith('pdf')) { + $scope.cardIsImage = false; + } + if ($scope.file.upay_offer_letter && $scope.file.upay_offer_letter.endsWith('pdf')) { + $scope.letterIsImage = false; + } + if ($scope.file.upay_promotional_offer && $scope.file.upay_promotional_offer.endsWith('pdf')) { + $scope.promotionalIsImage = false; + } + if ($scope.file.upay_terms_conditions && $scope.file.upay_terms_conditions.endsWith('pdf')) { + $scope.termsIsImage = false; + } + + + $scope.uploadBankFile = function (file) { if (file != null) { if (file.size > 3 * 1024 * 1024) { commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) @@ -3670,10 +3714,12 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter url: '/attachment/files', data: {file: file} }).then(function (resp) { + $scope.uploadFile = {}; delete $scope.bankFileProgress; - $scope.file.upay_application_form = resp.data.url; + $scope.file.client_bank_file = resp.data.url; + $scope.uploadFile.client_bank_file = resp.data.url; $scope.updateFile(); - if ($scope.file.upay_application_form.endsWith('pdf')) { + if ($scope.file.client_bank_file.endsWith('pdf')) { $scope.bankIsImage = false; } else { $scope.bankIsImage = true; @@ -3687,136 +3733,268 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter } } }; - $scope.agreeIsImage = true; - if ($scope.file.file_agreement_info && $scope.file.file_agreement_info.endsWith('pdf')) { - $scope.agreeIsImage = false; - } - $scope.bankIsImage = true; - if ($scope.file.upay_application_form && $scope.file.upay_application_form.endsWith('pdf')) { - $scope.bankIsImage = false; - } - $scope.companyIsImage = true; - if ($scope.file.file_company_info && $scope.file.file_company_info.endsWith('pdf')) { - $scope.companyIsImage = false; - } - $scope.applyIsImage = true; - if ($scope.file.file_apply_info && $scope.file.file_apply_info.endsWith('pdf')) { - $scope.applyIsImage = false; - } - $scope.idIsImage = true; - if ($scope.file.file_id_info && $scope.file.file_id_info.endsWith('pdf')) { - $scope.idIsImage = false; - } - - $scope.uploadAgreementFile = function (file) { + $scope.uploadASICFile = function (file) { if (file != null) { if (file.size > 3 * 1024 * 1024) { commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) } else { - $scope.companyFileProgress = {value: 0}; + $scope.ASICProgress = {value: 0}; Upload.upload({ url: '/attachment/files', data: {file: file} }).then(function (resp) { - delete $scope.companyFileProgress; - $scope.file.upay_agreement_file = resp.data.url; + $scope.uploadFile = {}; + delete $scope.ASICProgress; + $scope.file.client_company_file = resp.data.url; + $scope.uploadFile.client_company_file = resp.data.url; $scope.updateFile(); - if ($scope.file.upay_agreement_file.endsWith('pdf')) { - $scope.companyIsImage = false; + if ($scope.file.client_company_file.endsWith('pdf')) { + $scope.bankIsImage = false; } else { - $scope.companyIsImage = true; + $scope.bankIsImage = true; } }, function (resp) { - delete $scope.companyFileProgress; + delete $scope.ASICProgress; commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'}) }, function (evt) { - $scope.companyFileProgress.value = parseInt(100 * evt.loaded / evt.total); + $scope.ASICProgress.value = parseInt(100 * evt.loaded / evt.total); }) } } }; - $scope.uploadOfferFile = function (file) { + $scope.uploadIdFile = function (file) { if (file != null) { if (file.size > 3 * 1024 * 1024) { commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) } else { - $scope.idFileProgress = {value: 0}; + $scope.idProgress = {value: 0}; Upload.upload({ url: '/attachment/files', data: {file: file} }).then(function (resp) { - delete $scope.idFileProgress; - $scope.file.upay_offer_letter = resp.data.url; + $scope.uploadFile = {}; + delete $scope.idProgress; + $scope.file.upay_driver_license = resp.data.url; + $scope.uploadFile.upay_driver_license = resp.data.url; $scope.updateFile(); - if ($scope.file.upay_offer_letter.endsWith('pdf')) { + if ($scope.file.upay_driver_license.endsWith('pdf')) { $scope.idIsImage = false; } else { $scope.idIsImage = true; } }, function (resp) { - delete $scope.idFileProgress; + delete $scope.idProgress; commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'}) }, function (evt) { - $scope.idFileProgress.value = parseInt(100 * evt.loaded / evt.total); + $scope.idProgress.value = parseInt(100 * evt.loaded / evt.total); }) } } }; - $scope.uploadDriverFile = function (file) { + $scope.uploadResidenceFile = function (file) { if (file != null) { - if (file.size > 10 * 1024 * 1024) { - commonDialog.alert({title: 'Error', content: '文件大小不能超过10MB,请压缩后重试', type: 'error'}) + if (file.size > 3 * 1024 * 1024) { + commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) } else { - $scope.agreementFileProgress = {value: 0}; + $scope.residenceFileProgress = {value: 0}; Upload.upload({ url: '/attachment/files', data: {file: file} }).then(function (resp) { - delete $scope.agreementFileProgress; - $scope.file.upay_driver_license = resp.data.url; + $scope.uploadFile = {}; + delete $scope.residenceFileProgress; + $scope.file.kyc_utility_bill_file = resp.data.url; + $scope.uploadFile.kyc_utility_bill_file = resp.data.url; $scope.updateFile(); - if ($scope.file.upay_driver_license.endsWith('pdf')) { - $scope.agreeIsImage = false; + if ($scope.file.kyc_utility_bill_file.endsWith('pdf')) { + $scope.utilityIsImage = false; } else { - $scope.agreeIsImage = true; + $scope.utilityIsImage = true; } }, function (resp) { - delete $scope.agreementFileProgress; + delete $scope.residenceFileProgress; commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'}) }, function (evt) { - $scope.agreementFileProgress.value = parseInt(100 * evt.loaded / evt.total); + $scope.residenceFileProgress.value = parseInt(100 * evt.loaded / evt.total); }) } } }; - $scope.uploadResidenceFile = function (file) { + $scope.uploadRefundPolicyFile = function (file) { if (file != null) { if (file.size > 3 * 1024 * 1024) { commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) } else { - $scope.applyFileProgress = {value: 0}; + $scope.refundPolicyFileProgress = {value: 0}; Upload.upload({ url: '/attachment/files', data: {file: file} }).then(function (resp) { - delete $scope.applyFileProgress; - $scope.file.upay_residence_certificate = resp.data.url; + $scope.uploadFile = {}; + delete $scope.refundPolicyFileProgress; + $scope.file.refund_exchange_policy = resp.data.url; + $scope.uploadFile.refund_exchange_policy = resp.data.url; $scope.updateFile(); - if ($scope.file.upay_residence_certificate.endsWith('pdf')) { - $scope.applyIsImage = false; + if ($scope.file.refund_exchange_policy.endsWith('pdf')) { + $scope.utilityIsImage = false; } else { - $scope.applyIsImage = true; + $scope.utilityIsImage = true; } }, function (resp) { - delete $scope.applyFileProgress; + delete $scope.refundPolicyFileProgress; commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'}) }, function (evt) { - $scope.applyFileProgress.value = parseInt(100 * evt.loaded / evt.total); + $scope.refundPolicyFileProgress.value = parseInt(100 * evt.loaded / evt.total); + }) + } + } + }; + $scope.uploadPrivacyPolicyFile = function (file) { + if (file != null) { + if (file.size > 3 * 1024 * 1024) { + commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) + } else { + $scope.privacyFileProgress = {value: 0}; + Upload.upload({ + url: '/attachment/files', + data: {file: file} + }).then(function (resp) { + $scope.uploadFile = {}; + delete $scope.privacyFileProgress; + $scope.file.upay_privacy_policy = resp.data.url; + $scope.uploadFile.upay_privacy_policy = resp.data.url; + $scope.updateFile(); + if ($scope.file.upay_privacy_policy.endsWith('pdf')) { + $scope.privacyIsImage = false; + } else { + $scope.privacyIsImage = true; + } + }, function (resp) { + delete $scope.privacyFileProgress; + commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'}) + }, function (evt) { + $scope.privacyFileProgress.value = parseInt(100 * evt.loaded / evt.total); }) - } } }; + $scope.uploadCardPolicyFile = function (file) { + if (file != null) { + if (file.size > 3 * 1024 * 1024) { + commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) + } else { + $scope.cardFileProgress = {value: 0}; + Upload.upload({ + url: '/attachment/files', + data: {file: file} + }).then(function (resp) { + $scope.uploadFile = {}; + delete $scope.cardFileProgress; + $scope.file.card_security_policy = resp.data.url; + $scope.uploadFile.card_security_policy = resp.data.url; + $scope.updateFile(); + if ($scope.file.card_security_policy.endsWith('pdf')) { + $scope.privacyIsImage = false; + } else { + $scope.privacyIsImage = true; + } + }, function (resp) { + delete $scope.cardFileProgress; + commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'}) + }, function (evt) { + $scope.cardFileProgress.value = parseInt(100 * evt.loaded / evt.total); + }) + } + } + }; + $scope.uploadLetterOfOfferFile = function (file) { + if (file != null) { + if (file.size > 3 * 1024 * 1024) { + commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) + } else { + $scope.letterFileProgress = {value: 0}; + Upload.upload({ + url: '/attachment/files', + data: {file: file} + }).then(function (resp) { + $scope.uploadFile = {}; + delete $scope.letterFileProgress; + $scope.file.upay_offer_letter = resp.data.url; + $scope.uploadFile.upay_offer_letter = resp.data.url; + $scope.updateFile(); + if ($scope.file.upay_offer_letter.endsWith('pdf')) { + $scope.letterIsImage = false; + } else { + $scope.letterIsImage = true; + } + }, function (resp) { + delete $scope.letterFileProgress; + commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'}) + }, function (evt) { + $scope.letterFileProgress.value = parseInt(100 * evt.loaded / evt.total); + }) + } + } + }; + $scope.uploadPromotionalFile = function (file) { + if (file != null) { + if (file.size > 3 * 1024 * 1024) { + commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) + } else { + $scope.promotionalFileProgress = {value: 0}; + Upload.upload({ + url: '/attachment/files', + data: {file: file} + }).then(function (resp) { + $scope.uploadFile = {}; + delete $scope.promotionalFileProgress; + $scope.file.upay_promotional_offer = resp.data.url; + $scope.uploadFile.upay_promotional_offer = resp.data.url; + $scope.updateFile(); + if ($scope.file.upay_promotional_offer.endsWith('pdf')) { + $scope.promotionalIsImage = false; + } else { + $scope.promotionalIsImage = true; + } + }, function (resp) { + delete $scope.promotionalFileProgress; + commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'}) + }, function (evt) { + $scope.promotionalFileProgress.value = parseInt(100 * evt.loaded / evt.total); + }) + } + } + }; + $scope.uploadTermsFile = function (file) { + if (file != null) { + if (file.size > 3 * 1024 * 1024) { + commonDialog.alert({title: 'Error', content: '文件大小不能超过3MB,请压缩后重试', type: 'error'}) + } else { + $scope.termsFileProgress = {value: 0}; + Upload.upload({ + url: '/attachment/files', + data: {file: file} + }).then(function (resp) { + $scope.uploadFile = {}; + delete $scope.termsFileProgress; + $scope.file.upay_terms_conditions = resp.data.url; + $scope.uploadFile.upay_terms_conditions = resp.data.url; + $scope.updateFile(); + if ($scope.file.upay_terms_conditions.endsWith('pdf')) { + $scope.termsIsImage = false; + } else { + $scope.termsIsImage = true; + } + }, function (resp) { + delete $scope.termsFileProgress; + commonDialog.alert({title: 'Upload Failed', content: resp.data.message, type: 'error'}) + }, function (evt) { + $scope.termsFileProgress.value = parseInt(100 * evt.loaded / evt.total); + }) + } + } + }; + $scope.saveIdInfo = function () { if (!$scope.file.upay_risk_level) { commonDialog.alert({title: 'Error', content: '请选择商户风险等级', type: 'error'}); @@ -3844,34 +4022,14 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter return url; }; - - $scope.deleteComplianceFiles = function (file_id) { - commonDialog.confirm({ - title: 'Warning', - content: 'This operation will delete the file, Are you sure?' - }).then(function () { - $http.put('/sys/partners/auth_file/' + file_id + '/delete').then(function (resp) { - commonDialog.alert({ - title: 'Success', - content: 'Delete Successful', - type: 'success' - }); - $state.reload(); - }, function (resp) { - commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}); - }) - }) - }; - - $scope.updateFile = function () { - $http.put('/sys/partners/' + $scope.partner.client_moniker + '/mw_file', $scope.file).then(function () { + $http.put('/sys/partners/' + $scope.partner.client_moniker + '/mw_file', $scope.uploadFile).then(function () { commonDialog.alert({ title: 'Success', content: 'Upload Successful', type: 'success' }); - $state.reload(); + $state.go('partners.detail.files.MW_files', {reload: true}); }, function (resp) { commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}); }) diff --git a/src/main/ui/static/payment/partner/templates/add_partner.html b/src/main/ui/static/payment/partner/templates/add_partner.html index 098a270da..8cdacf735 100644 --- a/src/main/ui/static/payment/partner/templates/add_partner.html +++ b/src/main/ui/static/payment/partner/templates/add_partner.html @@ -1290,7 +1290,7 @@ -
    diff --git a/src/main/ui/static/payment/partner/templates/partner_auth_files.html b/src/main/ui/static/payment/partner/templates/partner_auth_files.html index c77dffeed..4a6289d53 100644 --- a/src/main/ui/static/payment/partner/templates/partner_auth_files.html +++ b/src/main/ui/static/payment/partner/templates/partner_auth_files.html @@ -3,18 +3,21 @@ width: 100%; } -
    -
    - + -
    -
    diff --git a/src/main/ui/static/payment/partner/templates/partner_cp_auth_files.html b/src/main/ui/static/payment/partner/templates/partner_cp_auth_files.html index 2d9035b04..2c927ce0e 100644 --- a/src/main/ui/static/payment/partner/templates/partner_cp_auth_files.html +++ b/src/main/ui/static/payment/partner/templates/partner_cp_auth_files.html @@ -4,7 +4,7 @@ } -
    Audit Files     +
    Audit Files     一键下载 diff --git a/src/main/ui/static/payment/partner/templates/partner_detail.html b/src/main/ui/static/payment/partner/templates/partner_detail.html index f36ca7470..c043063a9 100644 --- a/src/main/ui/static/payment/partner/templates/partner_detail.html +++ b/src/main/ui/static/payment/partner/templates/partner_detail.html @@ -474,13 +474,11 @@ ui-sref="partners.edit({clientMoniker:partner.client_moniker})"> Edit -
    -

    {{partner.client_moniker}} @@ -527,6 +525,12 @@

    +
    + +
    +

    +
    +
    @@ -815,6 +819,20 @@
    +
    + + +
    +

    +
    +
    +
    + + +
    +

    +
    +
    @@ -1238,6 +1256,36 @@ ng-if="$root.complianceCheck.clientInfo">
    +
    + +
    +

    + {{partner.mw_industry}} +

    + +
    +
    +
    + +
    + + + + + + +
    +
    diff --git a/src/main/ui/static/payment/partner/templates/partner_edit.html b/src/main/ui/static/payment/partner/templates/partner_edit.html index 0cecd2c54..b525a376f 100644 --- a/src/main/ui/static/payment/partner/templates/partner_edit.html +++ b/src/main/ui/static/payment/partner/templates/partner_edit.html @@ -1195,7 +1195,7 @@ -
    diff --git a/src/main/ui/static/payment/partner/templates/partner_mw_auth_files.html b/src/main/ui/static/payment/partner/templates/partner_mw_auth_files.html index 371b91dbb..b3b301792 100644 --- a/src/main/ui/static/payment/partner/templates/partner_mw_auth_files.html +++ b/src/main/ui/static/payment/partner/templates/partner_mw_auth_files.html @@ -3,7 +3,7 @@ width: 100%; } -
    Audit Files     +
    Audit Files     一键下载 @@ -66,126 +66,173 @@
    - +
    - +
    - - - - - - -
    - - -
    + + +
    -
    - +
    - +
    - - - - - - -
    - - -
    + + + +
    -
    - +
    - +
    - - - - - -
    - - -
    + + + +
    - -
    -
    - -
    -
    - - - -
    - - - - - - -
    - - -
    +
    + +
    +
    + + +
    + + + +
    - -
    -
    - -
    -
    - - - -
    - - - - - - -
    - - -
    +
    + +
    +
    + + + +
    + + + + +
    +
    +
    + +
    +
    + + + +
    + + + + +
    +
    +
    + +
    +
    + + + +
    + + + + +
    +
    +
    + +
    +
    + + + +
    + + + + +
    +
    +
    + +
    +
    + + + +
    + + + + +
    +
    +
    + +
    +
    + + +
    + + + +
    diff --git a/src/main/ui/static/payment/partner/templates/partner_settlement.html b/src/main/ui/static/payment/partner/templates/partner_settlement.html index 32df9ee0a..a455f5aa6 100644 --- a/src/main/ui/static/payment/partner/templates/partner_settlement.html +++ b/src/main/ui/static/payment/partner/templates/partner_settlement.html @@ -220,6 +220,7 @@ Settle Time + Settle Version Transaction Amount to Merchant Service Fee @@ -229,11 +230,15 @@ - {{log.report_date}} + {{log.report_date|limitTo:10}}   + + Card Payment + Cross-border Payment + diff --git a/src/main/ui/static/payment/tradelog/templates/balance_report.html b/src/main/ui/static/payment/tradelog/templates/balance_report.html index aa142c3cd..c54962cbe 100644 --- a/src/main/ui/static/payment/tradelog/templates/balance_report.html +++ b/src/main/ui/static/payment/tradelog/templates/balance_report.html @@ -389,7 +389,8 @@
    diff --git a/src/main/ui/static/payment/tradelog/templates/partner_settlement_logs.html b/src/main/ui/static/payment/tradelog/templates/partner_settlement_logs.html index 2c18f8311..821e0d456 100644 --- a/src/main/ui/static/payment/tradelog/templates/partner_settlement_logs.html +++ b/src/main/ui/static/payment/tradelog/templates/partner_settlement_logs.html @@ -271,6 +271,7 @@ Date + Settle Version Transaction Amount(AUD) Transfer to Merchant(AUD) GST(AUD) @@ -285,6 +286,10 @@ {{log.clearing_time|limitTo:10}}   + + Card Payment + Cross-border Payment + diff --git a/src/main/ui/static/payment/tradelog/transflow.js b/src/main/ui/static/payment/tradelog/transflow.js index f58a24060..db1d86ed4 100644 --- a/src/main/ui/static/payment/tradelog/transflow.js +++ b/src/main/ui/static/payment/tradelog/transflow.js @@ -219,6 +219,9 @@ define(['angular', 'uiBootstrap', 'uiRouter'], function (angular) { if (type=='pdf'){ url = '/client/trans_flow/report/pdf'; } + if (type=='upay-pdf'){ + url = '/client/trans_flow/report/upay_pdf'; + } if (type=='excel'){ url='/client/trans_flow/report/excel'; }