From 7de58bbeb2a06d3502c0b3650c7cf96ce50780bb Mon Sep 17 00:00:00 2001 From: Todking Date: Tue, 16 Nov 2021 13:58:53 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BB=A3=E7=90=86=E5=95=86=E6=8F=90?= =?UTF-8?q?=E6=88=90APS=E7=89=B9=E6=AE=8A=E5=A4=84=E7=90=86=EF=BC=9A1?= =?UTF-8?q?=E3=80=81=E4=BB=A3=E7=90=86=E5=95=86=E6=8F=90=E6=88=90=E8=A1=A8?= =?UTF-8?q?=E5=86=85=E7=9A=84Aps=E7=9A=84channel=E5=AD=98=E4=BA=862?= =?UTF-8?q?=E4=B8=AA=E6=95=B0=E6=8D=AE=EF=BC=88=E4=BE=8B=E5=A6=82=EF=BC=9A?= =?UTF-8?q?ApsInStore,alipayCN=E3=80=82=E5=90=8E=E9=9D=A2=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E5=A4=A7=E9=99=86=E9=92=B1=E5=8C=85=E3=80=90alipayCN?= =?UTF-8?q?=E3=80=91=E6=88=96=E8=80=85=E6=B5=B7=E5=A4=96=E9=92=B1=E5=8C=85?= =?UTF-8?q?=E3=80=90alipayOS=E3=80=91=EF=BC=89=E3=80=822=E3=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impls/CityPartnerPrizeServiceImpl.java | 704 +++++++++++++----- .../web/CityPartnerPrizeController.java | 84 ++- .../config/orgcommission/orgcommission.js | 5 + .../templates/org_commission_month.html | 48 +- 4 files changed, 628 insertions(+), 213 deletions(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/citypartner/core/impls/CityPartnerPrizeServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/citypartner/core/impls/CityPartnerPrizeServiceImpl.java index 2b3cea4bd..612514062 100644 --- a/src/main/java/au/com/royalpay/payment/manage/citypartner/core/impls/CityPartnerPrizeServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/citypartner/core/impls/CityPartnerPrizeServiceImpl.java @@ -497,93 +497,211 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { } } PayChannel payChannel = PayChannel.fromChannelCode(channel); - for (JSONObject params : oneChannel.getValue()) { - if (payChannel == PayChannel.RPAY_CHANNEL_CARD) { - //rpaypmt_domestic_card - BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); - BigDecimal channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("rpaypmt_domestic_card" + "_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); - //增加transaction_fee为null异常 - if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { - params.put("transaction_fee", BigDecimal.ZERO); - } - BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") - .subtract(params.getBigDecimal("surcharge_cashback")) - .subtract(params.getBigDecimal("transaction_fee")); - //增加货币判断 - int i = currencyScale(params.getString("clearing_currency")); - royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); - - //rpaypmt_overseas_card - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("rpaypmt_overseas_card" + "_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); - //增加transaction_fee为null异常 - if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { - params.put("transaction_fee", BigDecimal.ZERO); - } - tmpTotalSurcharge = params.getBigDecimal("total_surcharge") - .subtract(params.getBigDecimal("surcharge_cashback")) - .subtract(params.getBigDecimal("transaction_fee")); - //增加货币判断 - total = total.add(tmpClearingAmount); - total_surage = total_surage.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); - royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); - net_surage = net_surage.add(params.getBigDecimal("channel_surcharge")); - transaction_fee = transaction_fee.add(params.getBigDecimal("transaction_fee")); - } else { - BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); - BigDecimal channelRate = null; - if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { - if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("aliapy_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); - } else { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE || payChannel == PayChannel.ALIPAY_APS_CASHIER) { + Map> groupByPayType = oneChannel.getValue().stream().collect(Collectors.groupingBy(e -> e.getString("pay_type").equals("alipay_cn"))); + for (Map.Entry> payType : groupByPayType.entrySet()) { + BigDecimal totalAps = BigDecimal.ZERO; + BigDecimal total_surageAps = BigDecimal.ZERO; + BigDecimal net_surageAps = BigDecimal.ZERO; + BigDecimal royalpay_surageAps = BigDecimal.ZERO; + BigDecimal transaction_feeAps = BigDecimal.ZERO; + JSONObject jsonAps = new JSONObject(); + if (payType.getKey()) { + for (JSONObject params : payType.getValue()) { + BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); + BigDecimal channelRate = null; + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("aliapy_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } + if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } + //增加transaction_fee为null异常 + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); + } + BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") + .subtract(params.getBigDecimal("surcharge_cashback")) + .subtract(params.getBigDecimal("transaction_fee")); + //增加货币判断 + int i = currencyScale(params.getString("clearing_currency")); + totalAps = totalAps.add(tmpClearingAmount); + total_surageAps = total_surageAps.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); + royalpay_surageAps = royalpay_surageAps.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + // net_surage = net_surage.add(getThirdPartyCharge(params.getString("channel"), params.getBigDecimal("clearing_amount"), channelCharge)); + net_surageAps = net_surageAps.add(params.getBigDecimal("channel_surcharge")); + transaction_feeAps = transaction_feeAps.add(params.getBigDecimal("transaction_fee")); } - } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { - if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + BigDecimal org_charge = total_surageAps.subtract(royalpay_surageAps); + jsonAps.put("channel", oneChannel.getKey() + ",alipayCN"); + jsonAps.put("gross_amount", totalAps); + jsonAps.put("total_charge", total_surageAps); + jsonAps.put("transaction_fee", transaction_feeAps); + jsonAps.put("net_charge", net_surageAps); + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + jsonAps.put("org_rate", (orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value")))); + } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + jsonAps.put("org_rate", (orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value")))); } else { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + jsonAps.put("org_rate", orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value")); } - } else { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + jsonAps.put("royalpay_charge", royalpay_surageAps); + jsonAps.put("org_charge", org_charge.signum() < 0 ? new BigDecimal(0) : org_charge); + jsonAps.put("commission_type", "1"); + jsonAps.put("create_time", new Date()); + amountByChannel.add(jsonAps); } - //增加transaction_fee为null异常 - if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { - params.put("transaction_fee", BigDecimal.ZERO); + if (!payType.getKey()) { + for (JSONObject params : payType.getValue()) { + BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); + BigDecimal channelRate = null; + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("aliapy_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } + if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } + //增加transaction_fee为null异常 + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); + } + BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") + .subtract(params.getBigDecimal("surcharge_cashback")) + .subtract(params.getBigDecimal("transaction_fee")); + //增加货币判断 + int i = currencyScale(params.getString("clearing_currency")); + totalAps = totalAps.add(tmpClearingAmount); + total_surageAps = total_surageAps.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); + royalpay_surageAps = royalpay_surageAps.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + // net_surage = net_surage.add(getThirdPartyCharge(params.getString("channel"), params.getBigDecimal("clearing_amount"), channelCharge)); + net_surageAps = net_surageAps.add(params.getBigDecimal("channel_surcharge")); + transaction_feeAps = transaction_feeAps.add(params.getBigDecimal("transaction_fee")); + } + BigDecimal org_charge = total_surageAps.subtract(royalpay_surageAps); + jsonAps.put("channel", oneChannel.getKey() + ",alipayOS"); + jsonAps.put("gross_amount", totalAps); + jsonAps.put("total_charge", total_surageAps); + jsonAps.put("transaction_fee", transaction_feeAps); + jsonAps.put("net_charge", net_surageAps); + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + jsonAps.put("org_rate", (orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value")))); + } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + jsonAps.put("org_rate", (orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value")))); + } else { + jsonAps.put("org_rate", orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value")); + } + jsonAps.put("royalpay_charge", royalpay_surageAps); + jsonAps.put("org_charge", org_charge.signum() < 0 ? new BigDecimal(0) : org_charge); + jsonAps.put("commission_type", "1"); + jsonAps.put("create_time", new Date()); + amountByChannel.add(jsonAps); } - BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") - .subtract(params.getBigDecimal("surcharge_cashback")) - .subtract(params.getBigDecimal("transaction_fee")); - //增加货币判断 - int i = currencyScale(params.getString("clearing_currency")); - total = total.add(tmpClearingAmount); - total_surage = total_surage.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); - royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); - // net_surage = net_surage.add(getThirdPartyCharge(params.getString("channel"), params.getBigDecimal("clearing_amount"), channelCharge)); - net_surage = net_surage.add(params.getBigDecimal("channel_surcharge")); - transaction_fee = transaction_fee.add(params.getBigDecimal("transaction_fee")); - } - } - BigDecimal org_charge = total_surage.subtract(royalpay_surage); - json.put("channel", oneChannel.getKey()); - json.put("gross_amount", total); - json.put("total_charge", total_surage); - json.put("transaction_fee", transaction_fee); - json.put("net_charge", net_surage); - if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { - json.put("org_rate", (orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value")))); - } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { - json.put("org_rate", (orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value")))); } else { - json.put("org_rate", orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value")); + for (JSONObject params : oneChannel.getValue()) { + if (payChannel == PayChannel.RPAY_CHANNEL_CARD) { + //rpaypmt_domestic_card + BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); + BigDecimal channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("rpaypmt_domestic_card" + "_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + //增加transaction_fee为null异常 + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); + } + BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") + .subtract(params.getBigDecimal("surcharge_cashback")) + .subtract(params.getBigDecimal("transaction_fee")); + //增加货币判断 + int i = currencyScale(params.getString("clearing_currency")); + royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + + //rpaypmt_overseas_card + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("rpaypmt_overseas_card" + "_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + //增加transaction_fee为null异常 + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); + } + tmpTotalSurcharge = params.getBigDecimal("total_surcharge") + .subtract(params.getBigDecimal("surcharge_cashback")) + .subtract(params.getBigDecimal("transaction_fee")); + //增加货币判断 + total = total.add(tmpClearingAmount); + total_surage = total_surage.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); + royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + net_surage = net_surage.add(params.getBigDecimal("channel_surcharge")); + transaction_fee = transaction_fee.add(params.getBigDecimal("transaction_fee")); + } else { + BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); + BigDecimal channelRate = null; + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("aliapy_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + //增加transaction_fee为null异常 + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); + } + BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") + .subtract(params.getBigDecimal("surcharge_cashback")) + .subtract(params.getBigDecimal("transaction_fee")); + //增加货币判断 + int i = currencyScale(params.getString("clearing_currency")); + total = total.add(tmpClearingAmount); + total_surage = total_surage.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); + royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + // net_surage = net_surage.add(getThirdPartyCharge(params.getString("channel"), params.getBigDecimal("clearing_amount"), channelCharge)); + net_surage = net_surage.add(params.getBigDecimal("channel_surcharge")); + transaction_fee = transaction_fee.add(params.getBigDecimal("transaction_fee")); + + } + } + BigDecimal org_charge = total_surage.subtract(royalpay_surage); + json.put("channel", oneChannel.getKey()); + json.put("gross_amount", total); + json.put("total_charge", total_surage); + json.put("transaction_fee", transaction_fee); + json.put("net_charge", net_surage); + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + json.put("org_rate", (orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value")))); + } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + json.put("org_rate", (orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value")))); + } else { + json.put("org_rate", orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value")); + } + json.put("royalpay_charge", royalpay_surage); + json.put("org_charge", org_charge.signum() < 0 ? new BigDecimal(0) : org_charge); + json.put("commission_type", "1"); + json.put("create_time", new Date()); + amountByChannel.add(json); } - json.put("royalpay_charge", royalpay_surage); - json.put("org_charge", org_charge.signum() < 0 ? new BigDecimal(0) : org_charge); - json.put("commission_type", "1"); - json.put("create_time", new Date()); - amountByChannel.add(json); } - return amountByChannel; } @@ -662,13 +780,6 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { public List clientChannelAmount(int clientId, JSONObject orgInfo, Map> channelMap, JSONObject channelCharge, int year, int month, int type) { List amountByChannel = new ArrayList<>(); for (Map.Entry> oneChannel : channelMap.entrySet()) { - String recordId = ""; - if (type == 1) { - recordId = financialPartnerCommissionMapper.getRecordId(orgInfo.getInteger("org_id"), year, month, oneChannel.getKey()); - } - if (type == 2) { - recordId = financialAgentCommissionMapper.getRecordId(orgInfo.getInteger("org_id"), year, month, oneChannel.getKey()); - } BigDecimal total = BigDecimal.ZERO; BigDecimal total_surage = BigDecimal.ZERO; BigDecimal net_surage = BigDecimal.ZERO; @@ -692,138 +803,337 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { } catch (Exception e) { } PayChannel payChannel = PayChannel.fromChannelCode(channel); - for (JSONObject params : oneChannel.getValue()) { - BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); - if (StringUtils.equals(channel.toLowerCase() + "_rate_value", "rpaypmt_card_rate_value")) { - //rpaypmt_domestic_card - BigDecimal channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("rpaypmt_domestic_card_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); - BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") - .subtract(params.getBigDecimal("surcharge_cashback")) - .subtract(params.getBigDecimal("transaction_fee")); - if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { - params.put("transaction_fee", BigDecimal.ZERO); - } - int i = currencyScale(params.getString("clearing_currency")); - if (total.compareTo(BigDecimal.ZERO) == 0) { - datefrom = params.getDate("transaction_time"); - dateto = params.getDate("transaction_time"); - } else { - if (params.getDate("transaction_time").before(datefrom)) { - datefrom = params.getDate("transaction_time"); + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE || payChannel == PayChannel.ALIPAY_APS_CASHIER) { + Map> groupByPayType = oneChannel.getValue().stream().collect(Collectors.groupingBy(e -> e.getString("pay_type").equals("alipay_cn"))); + for (Map.Entry> payType : groupByPayType.entrySet()) { + if (payType.getKey()) { + String recordId = financialPartnerCommissionMapper.getRecordId(orgInfo.getInteger("org_id"), year, month, oneChannel.getKey() + ",alipayCN"); + BigDecimal total_aps = BigDecimal.ZERO; + BigDecimal total_surage_aps = BigDecimal.ZERO; + BigDecimal net_surage_aps = BigDecimal.ZERO; + BigDecimal royalpay_surage_aps = BigDecimal.ZERO; + BigDecimal transaction_fee_aps = BigDecimal.ZERO; + Date datefrom_aps = new Date(); + Date dateto_aps = new Date(); + JSONObject json_aps = new JSONObject(); + for (JSONObject params : payType.getValue()) { + BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); + BigDecimal channelRate = BigDecimal.ZERO; + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("aliapy_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } + if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } + BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") + .subtract(params.getBigDecimal("surcharge_cashback")) + .subtract(params.getBigDecimal("transaction_fee")); + //增加货币判断 + //增加transaction_fee为null异常 + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); + } + int i = currencyScale(params.getString("clearing_currency")); + if (total_aps.compareTo(BigDecimal.ZERO) == 0) { + datefrom_aps = params.getDate("transaction_time"); + dateto_aps = params.getDate("transaction_time"); + } else { + if (params.getDate("transaction_time").before(datefrom)) { + datefrom_aps = params.getDate("transaction_time"); + } + if (params.getDate("transaction_time").after(dateto)) { + dateto_aps = params.getDate("transaction_time"); + } + } + + total_aps = total_aps.add(tmpClearingAmount); + total_surage_aps = total_surage_aps.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); + royalpay_surage_aps = royalpay_surage_aps.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + //net_surage = net_surage.add(getThirdPartyCharge(params.getString("channel"), params.getBigDecimal("clearing_amount"), channelCharge)); + net_surage_aps = net_surage_aps.add(params.getBigDecimal("channel_surcharge")); + transaction_fee_aps = transaction_fee_aps.add(params.getBigDecimal("transaction_fee")); } - if (params.getDate("transaction_time").after(dateto)) { - dateto = params.getDate("transaction_time"); + BigDecimal org_charge = total_surage_aps.subtract(royalpay_surage_aps); + if (channel.toLowerCase().equals("alipay_direct")) { + channel = channel.replace("_", ""); + } + json_aps.put("channel", oneChannel.getKey() + ",alipayCN"); + json_aps.put("record_id", recordId); + json_aps.put("client_id", clientId); + if (clientRate != null) { + json_aps.put("client_rate", clientRate.getBigDecimal("rate_value")); + } else { + json_aps.put("client_rate", oneChannel.getValue().get(0).getBigDecimal("surcharge_rate").multiply(CommonConsts.HUNDRED)); + } + json_aps.put("gross_amount", total); + json_aps.put("total_charge", total_surage); + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + json_aps.put("org_rate", (orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value")))); + } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + json_aps.put("org_rate", (orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value")))); + } else { + json_aps.put("org_rate", orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value")); + } + json_aps.put("royalpay_charge", royalpay_surage_aps); + if (type == 1) { + json_aps.put("net_charge", net_surage_aps); } + if (type == 2) { + json_aps.put("org_net_charge", net_surage_aps); + } + json_aps.put("org_charge", org_charge.signum() < 0 ? new BigDecimal(0) : org_charge); + json_aps.put("transaction_fee", transaction_fee_aps); + json_aps.put("commission_type", "1"); + json_aps.put("create_time", new Date()); + json_aps.put("date_from", DateFormatUtils.format(datefrom_aps, "yyyy-MM-dd")); + json_aps.put("date_to", DateFormatUtils.format(dateto_aps, "yyyy-MM-dd")); + json_aps.put("year", year); + json_aps.put("month", month); + amountByChannel.add(json_aps); } - royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); - //rpaypmt_overseas_card - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("rpaypmt_overseas_card_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); - tmpTotalSurcharge = params.getBigDecimal("total_surcharge").subtract(params.getBigDecimal("surcharge_cashback")); - if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { - params.put("transaction_fee", BigDecimal.ZERO); + if (!payType.getKey()) { + String recordId = financialPartnerCommissionMapper.getRecordId(orgInfo.getInteger("org_id"), year, month, oneChannel.getKey() + ",alipayOS"); + BigDecimal total_aps = BigDecimal.ZERO; + BigDecimal total_surage_aps = BigDecimal.ZERO; + BigDecimal net_surage_aps = BigDecimal.ZERO; + BigDecimal royalpay_surage_aps = BigDecimal.ZERO; + BigDecimal transaction_fee_aps = BigDecimal.ZERO; + Date datefrom_aps = new Date(); + Date dateto_aps = new Date(); + JSONObject json_aps = new JSONObject(); + for (JSONObject params : payType.getValue()) { + BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); + BigDecimal channelRate = BigDecimal.ZERO; + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("aliapy_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } + if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } + BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") + .subtract(params.getBigDecimal("surcharge_cashback")) + .subtract(params.getBigDecimal("transaction_fee")); + //增加货币判断 + //增加transaction_fee为null异常 + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); + } + int i = currencyScale(params.getString("clearing_currency")); + if (total_aps.compareTo(BigDecimal.ZERO) == 0) { + datefrom_aps = params.getDate("transaction_time"); + dateto_aps = params.getDate("transaction_time"); + } else { + if (params.getDate("transaction_time").before(datefrom)) { + datefrom_aps = params.getDate("transaction_time"); + } + if (params.getDate("transaction_time").after(dateto)) { + dateto_aps = params.getDate("transaction_time"); + } + } + + total_aps = total_aps.add(tmpClearingAmount); + total_surage_aps = total_surage_aps.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); + royalpay_surage_aps = royalpay_surage_aps.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + //net_surage = net_surage.add(getThirdPartyCharge(params.getString("channel"), params.getBigDecimal("clearing_amount"), channelCharge)); + net_surage_aps = net_surage_aps.add(params.getBigDecimal("channel_surcharge")); + transaction_fee_aps = transaction_fee_aps.add(params.getBigDecimal("transaction_fee")); + } + BigDecimal org_charge = total_surage_aps.subtract(royalpay_surage_aps); + if (channel.toLowerCase().equals("alipay_direct")) { + channel = channel.replace("_", ""); + } + json_aps.put("channel", oneChannel.getKey() + ",alipayOS"); + json_aps.put("record_id", recordId); + json_aps.put("client_id", clientId); + if (clientRate != null) { + json_aps.put("client_rate", clientRate.getBigDecimal("rate_value")); + } else { + json_aps.put("client_rate", oneChannel.getValue().get(0).getBigDecimal("surcharge_rate").multiply(CommonConsts.HUNDRED)); + } + json_aps.put("gross_amount", total); + json_aps.put("total_charge", total_surage); + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + json_aps.put("org_rate", (orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value")))); + } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + json_aps.put("org_rate", (orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value")))); + } else { + json_aps.put("org_rate", orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value")); + } + json_aps.put("royalpay_charge", royalpay_surage_aps); + if (type == 1) { + json_aps.put("net_charge", net_surage_aps); + } + if (type == 2) { + json_aps.put("org_net_charge", net_surage_aps); + } + json_aps.put("org_charge", org_charge.signum() < 0 ? new BigDecimal(0) : org_charge); + json_aps.put("transaction_fee", transaction_fee_aps); + json_aps.put("commission_type", "1"); + json_aps.put("create_time", new Date()); + json_aps.put("date_from", DateFormatUtils.format(datefrom_aps, "yyyy-MM-dd")); + json_aps.put("date_to", DateFormatUtils.format(dateto_aps, "yyyy-MM-dd")); + json_aps.put("year", year); + json_aps.put("month", month); + amountByChannel.add(json_aps); } - if (total.compareTo(BigDecimal.ZERO) == 0) { - datefrom = params.getDate("transaction_time"); - dateto = params.getDate("transaction_time"); - } else { - if (params.getDate("transaction_time").before(datefrom)) { + } + } else { + String recordId = ""; + if (type == 1) { + recordId = financialPartnerCommissionMapper.getRecordId(orgInfo.getInteger("org_id"), year, month, oneChannel.getKey()); + } + if (type == 2) { + recordId = financialAgentCommissionMapper.getRecordId(orgInfo.getInteger("org_id"), year, month, oneChannel.getKey()); + } + for (JSONObject params : oneChannel.getValue()) { + BigDecimal tmpClearingAmount = params.getBooleanValue("customer_surcharge") ? params.getBigDecimal("settle_amount") : params.getBigDecimal("clearing_amount"); + if (StringUtils.equals(channel.toLowerCase() + "_rate_value", "rpaypmt_card_rate_value")) { + //rpaypmt_domestic_card + BigDecimal channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("rpaypmt_domestic_card_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") + .subtract(params.getBigDecimal("surcharge_cashback")) + .subtract(params.getBigDecimal("transaction_fee")); + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); + } + int i = currencyScale(params.getString("clearing_currency")); + if (total.compareTo(BigDecimal.ZERO) == 0) { datefrom = params.getDate("transaction_time"); + dateto = params.getDate("transaction_time"); + } else { + if (params.getDate("transaction_time").before(datefrom)) { + datefrom = params.getDate("transaction_time"); + } + if (params.getDate("transaction_time").after(dateto)) { + dateto = params.getDate("transaction_time"); + } + } + royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + //rpaypmt_overseas_card + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("rpaypmt_overseas_card_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + tmpTotalSurcharge = params.getBigDecimal("total_surcharge").subtract(params.getBigDecimal("surcharge_cashback")); + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); } - if (params.getDate("transaction_time").after(dateto)) { + if (total.compareTo(BigDecimal.ZERO) == 0) { + datefrom = params.getDate("transaction_time"); dateto = params.getDate("transaction_time"); + } else { + if (params.getDate("transaction_time").before(datefrom)) { + datefrom = params.getDate("transaction_time"); + } + if (params.getDate("transaction_time").after(dateto)) { + dateto = params.getDate("transaction_time"); + } } - } - total = total.add(tmpClearingAmount); - total_surage = total_surage.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); - royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); - net_surage = net_surage.add(params.getBigDecimal("channel_surcharge")); - transaction_fee = transaction_fee.add(params.getBigDecimal("transaction_fee")); - } else { - BigDecimal channelRate; - if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { - if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("aliapy_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + total = total.add(tmpClearingAmount); + total_surage = total_surage.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); + royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + net_surage = net_surage.add(params.getBigDecimal("channel_surcharge")); + transaction_fee = transaction_fee.add(params.getBigDecimal("transaction_fee")); + } else { + BigDecimal channelRate; + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("aliapy_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } + } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } else { + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + } } else { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); } - } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { - if ("alipay_cn".equalsIgnoreCase(params.getString("pay_type"))) { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); - } else { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : ((orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value"))).divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); + BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") + .subtract(params.getBigDecimal("surcharge_cashback")) + .subtract(params.getBigDecimal("transaction_fee")); + //增加货币判断 + //增加transaction_fee为null异常 + if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { + params.put("transaction_fee", BigDecimal.ZERO); } - } else { - channelRate = params.get("org_rate") != null ? params.getBigDecimal("org_rate") : (orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value").divide(CommonConsts.HUNDRED, 4, RoundingMode.DOWN)); - } - BigDecimal tmpTotalSurcharge = params.getBigDecimal("total_surcharge") - .subtract(params.getBigDecimal("surcharge_cashback")) - .subtract(params.getBigDecimal("transaction_fee")); - //增加货币判断 - //增加transaction_fee为null异常 - if (!params.containsKey("transaction_fee") || StringUtils.isEmpty(params.getString("transaction_fee"))) { - params.put("transaction_fee", BigDecimal.ZERO); - } - int i = currencyScale(params.getString("clearing_currency")); - if (total.compareTo(BigDecimal.ZERO) == 0) { - datefrom = params.getDate("transaction_time"); - dateto = params.getDate("transaction_time"); - } else { - if (params.getDate("transaction_time").before(datefrom)) { + int i = currencyScale(params.getString("clearing_currency")); + if (total.compareTo(BigDecimal.ZERO) == 0) { datefrom = params.getDate("transaction_time"); - } - if (params.getDate("transaction_time").after(dateto)) { dateto = params.getDate("transaction_time"); + } else { + if (params.getDate("transaction_time").before(datefrom)) { + datefrom = params.getDate("transaction_time"); + } + if (params.getDate("transaction_time").after(dateto)) { + dateto = params.getDate("transaction_time"); + } } + + total = total.add(tmpClearingAmount); + total_surage = total_surage.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); + royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); + //net_surage = net_surage.add(getThirdPartyCharge(params.getString("channel"), params.getBigDecimal("clearing_amount"), channelCharge)); + net_surage = net_surage.add(params.getBigDecimal("channel_surcharge")); + transaction_fee = transaction_fee.add(params.getBigDecimal("transaction_fee")); } - total = total.add(tmpClearingAmount); - total_surage = total_surage.add(tmpTotalSurcharge).setScale(i, RoundingMode.HALF_UP); - royalpay_surage = royalpay_surage.add(tmpClearingAmount.multiply(channelRate).setScale(i, RoundingMode.HALF_UP)); - //net_surage = net_surage.add(getThirdPartyCharge(params.getString("channel"), params.getBigDecimal("clearing_amount"), channelCharge)); - net_surage = net_surage.add(params.getBigDecimal("channel_surcharge")); - transaction_fee = transaction_fee.add(params.getBigDecimal("transaction_fee")); } + BigDecimal org_charge = total_surage.subtract(royalpay_surage); + if (channel.toLowerCase().equals("alipay_direct")) { + channel = channel.replace("_", ""); + } + json.put("channel", oneChannel.getKey()); + json.put("record_id", recordId); + json.put("client_id", clientId); + if (clientRate != null) { + json.put("client_rate", clientRate.getBigDecimal("rate_value")); + } else { + json.put("client_rate", oneChannel.getValue().get(0).getBigDecimal("surcharge_rate").multiply(CommonConsts.HUNDRED)); + } + json.put("gross_amount", total); + json.put("total_charge", total_surage); + if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { + json.put("org_rate", (orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value")))); + } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { + json.put("org_rate", (orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value")))); + } else { + json.put("org_rate", orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value")); + } + json.put("royalpay_charge", royalpay_surage); + if (type == 1) { + json.put("net_charge", net_surage); + } + if (type == 2) { + json.put("org_net_charge", net_surage); + } + json.put("org_charge", org_charge.signum() < 0 ? new BigDecimal(0) : org_charge); + json.put("transaction_fee", transaction_fee); + json.put("commission_type", "1"); + json.put("create_time", new Date()); + json.put("date_from", DateFormatUtils.format(datefrom, "yyyy-MM-dd")); + json.put("date_to", DateFormatUtils.format(dateto, "yyyy-MM-dd")); + json.put("year", year); + json.put("month", month); + amountByChannel.add(json); } - BigDecimal org_charge = total_surage.subtract(royalpay_surage); - if (channel.toLowerCase().equals("alipay_direct")) { - channel = channel.replace("_", ""); - } - json.put("channel", oneChannel.getKey()); - - json.put("record_id", recordId); - json.put("client_id", clientId); - if (clientRate != null) { - json.put("client_rate", clientRate.getBigDecimal("rate_value")); - } else { - json.put("client_rate", oneChannel.getValue().get(0).getBigDecimal("surcharge_rate").multiply(CommonConsts.HUNDRED)); - } - json.put("gross_amount", total); - json.put("total_charge", total_surage); - if (payChannel == PayChannel.ALIPAY_APS_IN_STORE) { - json.put("org_rate", (orgInfo.getBigDecimal("retail_interchange_fee_value").add(orgInfo.getBigDecimal("retail_service_fee_value")))); - } else if (payChannel == PayChannel.ALIPAY_APS_CASHIER) { - json.put("org_rate", (orgInfo.getBigDecimal("online_interchange_fee_value").add(orgInfo.getBigDecimal("online_service_fee_value")))); - } else { - json.put("org_rate", orgInfo.getBigDecimal(channel.toLowerCase() + "_rate_value")); - } - json.put("royalpay_charge", royalpay_surage); - if (type == 1) { - json.put("net_charge", net_surage); - } - if (type == 2) { - json.put("org_net_charge", net_surage); - } - json.put("org_charge", org_charge.signum() < 0 ? new BigDecimal(0) : org_charge); - json.put("transaction_fee", transaction_fee); - json.put("commission_type", "1"); - json.put("create_time", new Date()); - json.put("date_from", DateFormatUtils.format(datefrom, "yyyy-MM-dd")); - json.put("date_to", DateFormatUtils.format(dateto, "yyyy-MM-dd")); - json.put("year", year); - json.put("month", month); - amountByChannel.add(json); } return amountByChannel; diff --git a/src/main/java/au/com/royalpay/payment/manage/citypartner/web/CityPartnerPrizeController.java b/src/main/java/au/com/royalpay/payment/manage/citypartner/web/CityPartnerPrizeController.java index addbf9dbd..7e81cb94e 100644 --- a/src/main/java/au/com/royalpay/payment/manage/citypartner/web/CityPartnerPrizeController.java +++ b/src/main/java/au/com/royalpay/payment/manage/citypartner/web/CityPartnerPrizeController.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * Created by yixian on 2017-03-08. @@ -28,6 +29,7 @@ public class CityPartnerPrizeController { /** * 代理商提成生成 + * * @param param */ @PostMapping("/generate") @@ -42,8 +44,8 @@ public class CityPartnerPrizeController { } @GetMapping("/export/{monthStr}") - public void exportExcel(@PathVariable String monthStr,HttpServletResponse httpResponse) throws Exception { - cityPartnerPrizeService.exportMonthFiles(monthStr,httpResponse); + public void exportExcel(@PathVariable String monthStr, HttpServletResponse httpResponse) throws Exception { + cityPartnerPrizeService.exportMonthFiles(monthStr, httpResponse); } @GetMapping(value = "/months/{monthStr}") @@ -79,6 +81,7 @@ public class CityPartnerPrizeController { int type = 1; ArrayList objectAlipayPlus = new ArrayList<>(); ArrayList unGmos = new ArrayList<>(); + ArrayList aps = new ArrayList<>(); for (JSONObject jsonObject : entry.getValue()) { grossAmount = grossAmount.add(jsonObject.getBigDecimal("gross_amount")); totalCharge = totalCharge.add(jsonObject.getBigDecimal("total_charge")); @@ -94,6 +97,8 @@ public class CityPartnerPrizeController { if (StringUtils.equalsAny(jsonObject.getString("channel"), "alipay_cn", "alipay_ac_sg", "alipay_ac_mo", "alipay_ac_hk", "alipay_ac_lu", "alipay_ac_gb", "alipay_ac_us", "paytm", "kakaopay", "truemoney", "ezlink", "gcash", "tng", "dana", "easy_paisa", "bkash", "lazada_wallet_my")) { jsonObject.put("channel", AlipayPlusChannelEnum.statusOf(jsonObject.getString("channel")).description()); objectAlipayPlus.add(jsonObject); + } else if (StringUtils.equalsAny(jsonObject.getString("channel"), "ApsInStore,alipayCN", "ApsInStore,alipayOS", "ApsCashier,alipayCN", "ApsCashier,alipayOS")) { + aps.add(jsonObject); } else { unGmos.add(jsonObject); } @@ -109,7 +114,7 @@ public class CityPartnerPrizeController { sumResult.put("org_name", cityPartnerName); sumResult.put("org_id", org_id); sumResult.put("net_charge", netCharge); - sumResult.put("type",type); + sumResult.put("type", type); if (objectAlipayPlus.size() != 0) { JSONObject totalAlipayPlus = new JSONObject(); for (JSONObject alipayPlus : objectAlipayPlus) { @@ -128,6 +133,12 @@ public class CityPartnerPrizeController { totalAlipayPlus.put("AlipayPlus", objectAlipayPlus); unGmos.add(totalAlipayPlus); } + if(aps.size() != 0){ + List apsInfo = getApsInfo(aps, monthStr); + for (JSONObject jsonObject : apsInfo) { + unGmos.add(jsonObject); + } + } sumResult.put("channel_detail", unGmos); resultTotalCharge = resultTotalCharge.add(totalCharge); resultRoyalpayCharge = resultRoyalpayCharge.add(royalpayCharge); @@ -150,6 +161,51 @@ public class CityPartnerPrizeController { return result; } + private List getApsInfo(List partnerPrizes, String monthStr) { + for (JSONObject prize : partnerPrizes) { + String[] channels = prize.getString("channel").split(","); + if (channels.length == 2) { + prize.put("channel", channels[0]); + prize.put("pay_type", channels[1]); + } + } + List apsInfo = new ArrayList<>(); + Map> groupByChannel = partnerPrizes.stream().collect(Collectors.groupingBy(e -> e.getString("channel"))); + for (Map.Entry> channel : groupByChannel.entrySet()) { + if (channel.getKey().equals("ApsInStore") || channel.getKey().equals("ApsCashier")) { + JSONObject sumAps = new JSONObject(); + sumAps.put("gross_amount", 0); + sumAps.put("total_charge", 0); + sumAps.put("royalpay_charge", 0); + sumAps.put("org_charge", 0); + sumAps.put("net_charge", 0); + sumAps.put("share_charge", 0); + for (JSONObject aps : channel.getValue()) { + plusKey(sumAps, aps, "gross_amount"); + plusKey(sumAps, aps, "total_charge"); + if (aps.get("parent_org_id") == null) { + aps.put("org_charge", aps.getBigDecimal("org_charge").add(aps.getBigDecimal("share_charge"))); + } + plusKey(sumAps, aps, "royalpay_charge"); + plusKey(sumAps, aps, "org_charge"); + plusKey(sumAps, aps, "net_charge"); + plusKey(sumAps, aps, "share_charge"); + aps.put("monthstr", monthStr); + } + sumAps.put("org_rate", channel.getValue().get(0).getString("org_rate")); + sumAps.put("channel", channel.getKey()); + sumAps.put("monthstr", monthStr); + sumAps.put("sunAps", channel.getValue()); + apsInfo.add(sumAps); + } + } + return apsInfo; + } + + private void plusKey(JSONObject sum, JSONObject prize, String key) { + sum.put(key, sum.getBigDecimal(key).add(prize.getBigDecimal(key))); + } + @ManagerMapping("/months/{monthStr}/orgs/{orgId}") public JSONObject getCityPartnerPrizeDetail(@PathVariable String monthStr, @PathVariable String orgId) { return cityPartnerPrizeService.getCityPartnerPrizeDetail(monthStr, orgId); @@ -247,10 +303,10 @@ public class CityPartnerPrizeController { Map> partenerPrizeMap = new HashMap<>(); for (JSONObject partnerPrizeInfo : partnerPrizeInfos) { String key = partnerPrizeInfo.getString("org_id"); - if(countPartnerPrizeMap.containsKey(key)){ - partnerPrizeInfo.put("royalpay_charge",countPartnerPrizeMap.get(key).getBigDecimal("royalpay_charge")); - }else { - partnerPrizeInfo.put("royalpay_charge",BigDecimal.ZERO); + if (countPartnerPrizeMap.containsKey(key)) { + partnerPrizeInfo.put("royalpay_charge", countPartnerPrizeMap.get(key).getBigDecimal("royalpay_charge")); + } else { + partnerPrizeInfo.put("royalpay_charge", BigDecimal.ZERO); } if (partenerPrizeMap.containsKey(key)) { partenerPrizeMap.get(key).add(partnerPrizeInfo); @@ -262,8 +318,6 @@ public class CityPartnerPrizeController { } - - JSONObject result = new JSONObject(); List partnerInfos = new ArrayList<>(partenerPrizeMap.size()); BigDecimal resultGrossAmount = BigDecimal.ZERO; @@ -292,11 +346,11 @@ public class CityPartnerPrizeController { } sumResult.put("gross_amount", grossAmount); sumResult.put("org_charge", orgCharge); - sumResult.put("org_net_charge",orgNetCharge); + sumResult.put("org_net_charge", orgNetCharge); sumResult.put("org_name", cityPartnerName); sumResult.put("org_id", org_id); sumResult.put("channel_detail", entry.getValue()); - sumResult.put("royalpay_charge",royalpayCharge); + sumResult.put("royalpay_charge", royalpayCharge); resultGrossAmount = resultGrossAmount.add(grossAmount); resultOrgCharge = resultOrgCharge.add(orgCharge); resultAgentCharge = resultAgentCharge.add(agentCharge); @@ -322,14 +376,14 @@ public class CityPartnerPrizeController { @GetMapping("/senior/{orgId}") public void findOne(@RequestParam String monthStr, @PathVariable String orgId) { - cityPartnerPrizeService.getSenior(monthStr,orgId); + cityPartnerPrizeService.getSenior(monthStr, orgId); } @GetMapping("/senior/{orgId}/details") public List findDetail(@RequestParam String monthStr, @PathVariable String orgId) { JSONObject params = new JSONObject(); - params.put("monthStr",monthStr); - params.put("org_id",orgId); - return cityPartnerPrizeService.querySenior(params); + params.put("monthStr", monthStr); + params.put("org_id", orgId); + return cityPartnerPrizeService.querySenior(params); } } diff --git a/src/main/ui/static/config/orgcommission/orgcommission.js b/src/main/ui/static/config/orgcommission/orgcommission.js index 8421f8ca3..5c1490236 100644 --- a/src/main/ui/static/config/orgcommission/orgcommission.js +++ b/src/main/ui/static/config/orgcommission/orgcommission.js @@ -178,6 +178,7 @@ define(['angular', '../../analysis/org/analysis-org'], function (angular) { $scope.commissionTypeMap = commissionTypeMap $scope.seniors = {} $scope.isAlipayPlus = false + $scope.isAps = false $scope.active = function (log) { $http.get('/sys/citypartner_prizes/senior/' + log.org_id + '/details?monthStr=' + $scope.monthData.monthstr).then(function (resp) { $scope.seniors = resp.data @@ -189,6 +190,10 @@ define(['angular', '../../analysis/org/analysis-org'], function (angular) { }) $scope.isAlipayPlus = false } + $scope.activeAps = function (apsInfo){ + $scope.ctrl.apsInfo = apsInfo + $scope.isAps = true + } $scope.activeAlipayPlus= function (detail){ $scope.isAlipayPlus = !$scope.isAlipayPlus if($scope.isAlipayPlus){ diff --git a/src/main/ui/static/config/orgcommission/templates/org_commission_month.html b/src/main/ui/static/config/orgcommission/templates/org_commission_month.html index 1c82dd924..3d73903c8 100644 --- a/src/main/ui/static/config/orgcommission/templates/org_commission_month.html +++ b/src/main/ui/static/config/orgcommission/templates/org_commission_month.html @@ -122,11 +122,16 @@ - {{detail.channel}} + A+(Retail) + A+(Online) + {{detail.channel}} + + + @@ -198,6 +203,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Keep RateTransaction AmountTotal ChargeRoyalPay ChargeNet ChargeCity Partner ChargeShare Chargechannel
AlipayCN + + + + + + + + + + + + Other wallets