diff --git a/src/db/modify.sql b/src/db/modify.sql index e67bdfd22..41c6cf7c8 100644 --- a/src/db/modify.sql +++ b/src/db/modify.sql @@ -139,10 +139,49 @@ ALTER TABLE sys_clients_customers ADD COLUMN channel varchar(15) not NULL ; ALTER TABLE sys_clients_customers ADD COLUMN last_payment_time datetime DEFAULT NULL COMMENT '最后一次付款时间'; ALTER TABLE sys_org ADD COLUMN parent_org_id int(11) DEFAULT NULL; -ALTER TABLE sys_org ADD COLUMN min_wechat_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低微信费率'; -ALTER TABLE sys_org ADD COLUMN min_alipay_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低支付宝费率'; -ALTER TABLE sys_org ADD COLUMN min_alipayonline_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低支付宝线上费率'; -ALTER TABLE sys_org ADD COLUMN min_bestpay_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低翼支付费率'; -ALTER TABLE sys_org ADD COLUMN min_jd_rate DECIMAL(3,2) DEFAULT 'NULL' COMMENT '旗下商户最低京东费率'; +ALTER TABLE sys_org ADD COLUMN min_wechat_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低微信费率'; +ALTER TABLE sys_org ADD COLUMN min_alipay_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低支付宝费率'; +ALTER TABLE sys_org ADD COLUMN min_alipayonline_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低支付宝线上费率'; +ALTER TABLE sys_org ADD COLUMN min_bestpay_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低翼支付费率'; +ALTER TABLE sys_org ADD COLUMN min_jd_rate DECIMAL(3,2) DEFAULT NULL COMMENT '旗下商户最低京东费率'; ALTER TABLE sys_org ADD COLUMN commission_type SMALLINT(1) DEFAULT '1' COMMENT '提成类型 1:渠道计算法 2:总交易额比例 3:收益比例'; + + +--agent_commission + +CREATE TABLE `financial_agent_commission` ( + `record_id` varchar(50) NOT NULL, + `org_id` int(11) NOT NULL, + `year` smallint(6) NOT NULL, + `month` smallint(6) NOT NULL, + `create_time` datetime NOT NULL, + `org_rate` decimal(5,2) DEFAULT NULL COMMENT '保底费率(RoyalPay抽取)', + `gross_amount` decimal(12,2) NOT NULL COMMENT '支付-退款', + `total_charge` decimal(12,2) NOT NULL COMMENT '总手续费', + `org_charge` decimal(12,2) NOT NULL COMMENT '合伙人手续', + `channel` varchar(12) NOT NULL, + `org_net_charge` decimal(12,2) DEFAULT NULL COMMENT '净值', + PRIMARY KEY (`record_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二级代理商提成'; + +CREATE TABLE `financial_agent_commission_detail` ( + `detail_id` varchar(50) NOT NULL, + `year` smallint(6) NOT NULL, + `month` smallint(6) NOT NULL, + `record_id` varchar(50) NOT NULL, + `client_id` int(11) NOT NULL, + `client_rate` decimal(5,2) NOT NULL, + `date_from` date NOT NULL, + `date_to` date NOT NULL, + `gross_amount` decimal(12,2) NOT NULL COMMENT '总支付-总退款', + `total_charge` decimal(12,2) NOT NULL COMMENT '总手续费', + `org_charge` decimal(12,2) NOT NULL COMMENT '合伙人所得手续费', + `channel` varchar(15) NOT NULL, + `org_net_charge` decimal(12,2) DEFAULT NULL COMMENT '净值', + PRIMARY KEY (`detail_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + +alter table financial_partner_commission add column commission_type smallint(1) DEFAULT 1 COMMENT '提成类型 1:渠道计算法 2:总交易额比例 3:收益比例'; +alter table financial_partner_commission_detail add column commission_type smallint(1) DEFAULT 1 COMMENT '提成类型 1:渠道计算法 2:总交易额比例 3:收益比例'; diff --git a/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/AgentCommissionAnalysis.java b/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/AgentCommissionAnalysis.java new file mode 100644 index 000000000..d6d98fc9c --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/AgentCommissionAnalysis.java @@ -0,0 +1,145 @@ +package au.com.royalpay.payment.manage.citypartner.beans; + +import au.com.royalpay.payment.tools.CommonConsts; + +import com.alibaba.fastjson.JSONObject; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by yixian on 2017-03-08. + */ +public class AgentCommissionAnalysis { + private int orgId; + private int year; + private int month; + private BigDecimal rate; + private String channel; + private Map> clientAnalysis = new HashMap<>(); + private BigDecimal totalGrossAmount = BigDecimal.ZERO; + private BigDecimal totalAgentCharge = BigDecimal.ZERO; + private BigDecimal totalAgentNetCharge = BigDecimal.ZERO; + private BigDecimal totalOrgCharge = BigDecimal.ZERO; + private BigDecimal totalOrgNetCharge = BigDecimal.ZERO; + private JSONObject org; + private JSONObject parentOrg; + + public AgentCommissionAnalysis(int orgId, int year, int month, BigDecimal rate,String channel,JSONObject org,JSONObject parentOrg) { + this.orgId = orgId; + this.year = year; + this.month = month; + this.rate = rate; + this.channel = channel; + this.org = org; + this.parentOrg = parentOrg; + } + + public AgentCommissionAnalysis attachAnalysis(JSONObject dayAnalysis,String channel) { + int clientId = dayAnalysis.getIntValue("client_id"); + List clientTrades = clientAnalysis.get(clientId); + if (clientTrades == null) { + clientTrades = new ArrayList<>(); + clientAnalysis.put(clientId, clientTrades); + } + Date tradeDate = dayAnalysis.getDate("trade_date"); + BigDecimal grossAmount = dayAnalysis.getBigDecimal("total"); + BigDecimal dayRate = dayAnalysis.getBigDecimal(channel+"_rate_value"); + BigDecimal agentCharge = grossAmount.multiply(dayRate.divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP)); + BigDecimal orgCharge = BigDecimal.ZERO; + BigDecimal orgNetCharge = BigDecimal.ZERO; + switch (channel){ + case "alipay": + orgCharge = grossAmount.multiply(org.getBigDecimal("alipay_rate_value").divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP)); + orgNetCharge = orgCharge.subtract(grossAmount.multiply(parentOrg.getBigDecimal("alipay_rate_value").divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP))); + break; + case "wechat": + orgCharge = grossAmount.multiply(org.getBigDecimal("wechat_rate_value").divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP)); + orgNetCharge = orgCharge.subtract(grossAmount.multiply(parentOrg.getBigDecimal("wechat_rate_value").divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP))); + break; + case "jd": + orgCharge = grossAmount.multiply(org.getBigDecimal("jd_rate_value").divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP)); + orgNetCharge = orgCharge.subtract(grossAmount.multiply(parentOrg.getBigDecimal("jd_rate_value").divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP))); + break; + case "alipayonline": + orgCharge = grossAmount.multiply(org.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP)); + orgNetCharge = orgCharge.subtract(grossAmount.multiply(parentOrg.getBigDecimal("alipayonline_rate_value").divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP))); + break; + default: + break; + } + + + totalGrossAmount = totalGrossAmount.add(grossAmount); + totalAgentCharge = totalAgentCharge.add(agentCharge); + totalAgentNetCharge = totalAgentNetCharge.add(orgNetCharge); + totalOrgCharge = totalOrgCharge.add(orgCharge); + totalOrgNetCharge = totalOrgNetCharge.add(orgNetCharge); + if (!clientTrades.isEmpty()) { + JSONObject item = clientTrades.get(clientTrades.size() - 1); + BigDecimal rate = item.getBigDecimal("client_rate"); + if (rate.compareTo(dayRate) == 0) { + BigDecimal gross = item.getBigDecimal("gross_amount").add(grossAmount); + item.put("gross_amount", gross); + BigDecimal totalCharge = item.getBigDecimal("total_charge").add(agentCharge); + item.put("total_charge", totalCharge); + BigDecimal totalOrgCharge = item.getBigDecimal("org_charge").add(orgCharge); + item.put("org_charge", totalOrgCharge); + BigDecimal totalRoyalpayClearingCharge = item.getBigDecimal("org_net_charge").add(orgNetCharge); + item.put("org_net_charge", totalRoyalpayClearingCharge); + Date from = item.getDate("date_from"); + Date to = item.getDate("date_to"); + from = from.before(tradeDate) ? from : tradeDate; + to = to.after(tradeDate) ? to : tradeDate; + item.put("date_from", from); + item.put("date_to", to); + return this; + } + } + JSONObject item = new JSONObject(); + item.put("year", year); + item.put("month", month); + item.put("date_from", tradeDate); + item.put("date_to", tradeDate); + item.put("client_rate", dayRate); + item.put("gross_amount", grossAmount); + item.put("total_charge", agentCharge); + item.put("org_charge", orgCharge); + item.put("channel",channel); + item.put("org_net_charge",orgNetCharge); + clientTrades.add(item); + return this; + } + + public JSONObject totalCommission() { + JSONObject result = new JSONObject(); + result.put("org_id", orgId); + result.put("year", year); + result.put("month", month); + result.put("create_time", new Date()); + result.put("org_rate", rate); + result.put("gross_amount", totalGrossAmount); + result.put("total_charge", totalAgentCharge); + result.put("org_charge", totalOrgCharge); + result.put("org_net_charge",totalOrgNetCharge); + result.put("channel",channel); + return result; + } + + public List getCommissionDetails(String recordId) { + List list = new ArrayList<>(); + for (Map.Entry> entry : clientAnalysis.entrySet()) { + int clientId = entry.getKey(); + for (JSONObject item : entry.getValue()) { + item.put("client_id", clientId); + item.put("record_id", recordId); + list.add(item); + } + } + return list; + } +} \ No newline at end of file diff --git a/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/CityPartnerCommissionAnalysis.java b/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/CityPartnerCommissionAnalysis.java index 932b55ec3..b026765bc 100644 --- a/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/CityPartnerCommissionAnalysis.java +++ b/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/CityPartnerCommissionAnalysis.java @@ -1,6 +1,8 @@ package au.com.royalpay.payment.manage.citypartner.beans; import au.com.royalpay.payment.tools.CommonConsts; +import au.com.royalpay.payment.tools.exceptions.ServerErrorException; + import com.alibaba.fastjson.JSONObject; import java.math.BigDecimal; @@ -18,7 +20,9 @@ public class CityPartnerCommissionAnalysis { private BigDecimal jdChargeRate; private BigDecimal alipayonlineChargeRate; private BigDecimal rate; + private BigDecimal orgRate; private String channel; + private int commissionType; private Map> clientAnalysis = new HashMap<>(); private BigDecimal totalGrossAmount = BigDecimal.ZERO; private BigDecimal totalChargeSum = BigDecimal.ZERO; @@ -26,19 +30,34 @@ public class CityPartnerCommissionAnalysis { private BigDecimal totalOrgChargeSum = BigDecimal.ZERO; private BigDecimal totalnetCharge = BigDecimal.ZERO; - public CityPartnerCommissionAnalysis(int orgId, int year, int month, BigDecimal rate,String channel,BigDecimal alipayChargeRate,BigDecimal wechatChargeRate,BigDecimal jdChargeRate,BigDecimal alipayonlineChargeRate) { + public CityPartnerCommissionAnalysis(int orgId, int year, int month, BigDecimal rate, String channel, BigDecimal alipayChargeRate, + BigDecimal wechatChargeRate, BigDecimal jdChargeRate, BigDecimal alipayonlineChargeRate, BigDecimal orgRate,int commissionType) { this.orgId = orgId; this.year = year; this.month = month; this.rate = rate; this.channel = channel; + this.commissionType = commissionType; this.alipayChargeRate = alipayChargeRate; this.wechatChargeRate = wechatChargeRate; this.jdChargeRate = jdChargeRate; this.alipayonlineChargeRate = alipayonlineChargeRate; + this.orgRate = orgRate; } - public CityPartnerCommissionAnalysis attachAnalysis(JSONObject dayAnalysis,String channel) { + public CityPartnerCommissionAnalysis calculator(JSONObject dayAnalysis, String channel, int type) { + switch (type) { + case 1: + return attachAnalysis(dayAnalysis, channel); + case 3: + return attachNetCommissionAnalysis(dayAnalysis, channel); + default: + throw new ServerErrorException("unkonw calculate type"); + } + + } + + public CityPartnerCommissionAnalysis attachAnalysis(JSONObject dayAnalysis, String channel) { int clientId = dayAnalysis.getIntValue("client_id"); List clientTrades = clientAnalysis.get(clientId); if (clientTrades == null) { @@ -47,31 +66,13 @@ public class CityPartnerCommissionAnalysis { } Date tradeDate = dayAnalysis.getDate("trade_date"); BigDecimal total = dayAnalysis.getBigDecimal("total"); - BigDecimal dayRate = dayAnalysis.getBigDecimal(channel+"_rate_value"); + BigDecimal dayRate = dayAnalysis.getBigDecimal(channel + "_rate_value"); BigDecimal dayCharge = total.multiply(dayRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); BigDecimal royalpayCharge = total.multiply(rate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); - BigDecimal thirdPartyPaymentCharge = BigDecimal.ZERO; - switch (channel){ - case "alipay": - thirdPartyPaymentCharge = total.multiply(alipayChargeRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); - break; - case "wechat": - thirdPartyPaymentCharge = total.multiply(wechatChargeRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); - break; - case "jd": - thirdPartyPaymentCharge = total.multiply(jdChargeRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); - break; - case "alipayonline": - thirdPartyPaymentCharge = total.multiply(alipayonlineChargeRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); - break; - default: - break; - } - - BigDecimal netCharge = royalpayCharge.subtract(thirdPartyPaymentCharge); - + BigDecimal thirdPartyPaymentCharge = getThirdPartyCharge(channel, total); + BigDecimal netCharge = royalpayCharge.subtract(thirdPartyPaymentCharge); BigDecimal orgCharge = dayCharge.subtract(royalpayCharge); @@ -113,8 +114,9 @@ public class CityPartnerCommissionAnalysis { item.put("total_charge", dayCharge); item.put("royalpay_charge", royalpayCharge); item.put("org_charge", orgCharge); - item.put("channel",channel); - item.put("net_charge",netCharge); + item.put("channel", channel); + item.put("net_charge", netCharge); + item.put("commission_type",commissionType); clientTrades.add(item); return this; } @@ -130,8 +132,9 @@ public class CityPartnerCommissionAnalysis { result.put("total_charge", totalChargeSum); result.put("royalpay_charge", totalRoyalPayCharge); result.put("org_charge", totalOrgChargeSum); - result.put("net_charge",totalnetCharge); - result.put("channel",channel); + result.put("net_charge", totalnetCharge); + result.put("channel", channel); + result.put("commission_type",commissionType); return result; } @@ -147,4 +150,87 @@ public class CityPartnerCommissionAnalysis { } return list; } + + public CityPartnerCommissionAnalysis attachNetCommissionAnalysis(JSONObject dayAnalysis, String channel) { + int clientId = dayAnalysis.getIntValue("client_id"); + List clientTrades = clientAnalysis.get(clientId); + if (clientTrades == null) { + clientTrades = new ArrayList<>(); + clientAnalysis.put(clientId, clientTrades); + } + Date tradeDate = dayAnalysis.getDate("trade_date"); + BigDecimal total = dayAnalysis.getBigDecimal("total"); + BigDecimal dayRate = dayAnalysis.getBigDecimal(channel + "_rate_value"); + BigDecimal dayCharge = total.multiply(dayRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); + + BigDecimal royalpayCharge = total.multiply(rate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); + + BigDecimal thirdPartyPaymentCharge = getThirdPartyCharge(channel, total); + BigDecimal netCharge = royalpayCharge.subtract(thirdPartyPaymentCharge); + BigDecimal orgCharge = netCharge.multiply(orgRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); + totalGrossAmount = totalGrossAmount.add(total); + totalChargeSum = totalChargeSum.add(dayCharge); + totalRoyalPayCharge = totalRoyalPayCharge.add(royalpayCharge); + totalOrgChargeSum = totalOrgChargeSum.add(orgCharge); + totalnetCharge = totalnetCharge.add(netCharge); + if (!clientTrades.isEmpty()) { + JSONObject item = clientTrades.get(clientTrades.size() - 1); + BigDecimal rate = item.getBigDecimal("client_rate"); + if (rate.compareTo(dayRate) == 0) { + BigDecimal gross = item.getBigDecimal("gross_amount").add(total); + item.put("gross_amount", gross); + BigDecimal totalCharge = item.getBigDecimal("total_charge").add(dayCharge); + item.put("total_charge", totalCharge); + BigDecimal totalRoyalCharge = item.getBigDecimal("royalpay_charge").add(royalpayCharge); + item.put("royalpay_charge", totalRoyalCharge); + BigDecimal totalOrgCharge = item.getBigDecimal("org_charge").add(orgCharge); + item.put("org_charge", totalOrgCharge); + BigDecimal totalRoyalpayClearingCharge = item.getBigDecimal("net_charge").add(netCharge); + item.put("net_charge", totalRoyalpayClearingCharge); + Date from = item.getDate("date_from"); + Date to = item.getDate("date_to"); + from = from.before(tradeDate) ? from : tradeDate; + to = to.after(tradeDate) ? to : tradeDate; + item.put("date_from", from); + item.put("date_to", to); + return this; + } + } + JSONObject item = new JSONObject(); + item.put("year", year); + item.put("month", month); + item.put("date_from", tradeDate); + item.put("date_to", tradeDate); + item.put("client_rate", dayRate); + item.put("gross_amount", total); + item.put("total_charge", dayCharge); + item.put("royalpay_charge", royalpayCharge); + item.put("org_charge", orgCharge); + item.put("channel", channel); + item.put("net_charge", netCharge); + clientTrades.add(item); + return this; + } + + private BigDecimal getThirdPartyCharge(String channel, BigDecimal total) { + BigDecimal thirdPartyPaymentCharge = BigDecimal.ZERO; + switch (channel) { + case "alipay": + thirdPartyPaymentCharge = total.multiply(alipayChargeRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); + break; + case "wechat": + thirdPartyPaymentCharge = total.multiply(wechatChargeRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); + break; + case "jd": + thirdPartyPaymentCharge = total.multiply(jdChargeRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); + break; + case "alipayonline": + thirdPartyPaymentCharge = total.multiply(alipayonlineChargeRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); + break; + default: + break; + } + return thirdPartyPaymentCharge; + } + } diff --git a/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/ReferrerCommissionAnalysis.java b/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/ReferrerCommissionAnalysis.java index 8aa123851..f3c71e8b6 100644 --- a/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/ReferrerCommissionAnalysis.java +++ b/src/main/java/au/com/royalpay/payment/manage/citypartner/beans/ReferrerCommissionAnalysis.java @@ -36,7 +36,6 @@ public class ReferrerCommissionAnalysis { BigDecimal total = dayAnalysis.getBigDecimal("total"); BigDecimal orgCharge = total.multiply(referrerRate).divide(CommonConsts.HUNDRED, 2, BigDecimal.ROUND_HALF_UP); Date tradeDate = dayAnalysis.getDate("trade_date"); - BigDecimal dayRate = dayAnalysis.getBigDecimal("rate_value"); totalGrossAmount = totalGrossAmount.add(total); totalOrgChargeSum = totalOrgChargeSum.add(orgCharge); diff --git a/src/main/java/au/com/royalpay/payment/manage/citypartner/core/CityPartnerPrizeService.java b/src/main/java/au/com/royalpay/payment/manage/citypartner/core/CityPartnerPrizeService.java index 2d432e60f..23817ffa3 100644 --- a/src/main/java/au/com/royalpay/payment/manage/citypartner/core/CityPartnerPrizeService.java +++ b/src/main/java/au/com/royalpay/payment/manage/citypartner/core/CityPartnerPrizeService.java @@ -29,5 +29,15 @@ public interface CityPartnerPrizeService { List getReferrerPrizeInfoList(String monthStr); + void generateAgent(String month,int orgId); + + List listAgentAvailableMonths(String year); + + JSONObject getAgentPrizeInfo(String monthStr); + + JSONObject getAgentPrizeDetail(String monthStr, String orgId); + + List getAgentPrizeInfoList(String monthStr); + } 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 08d9a8bc8..71f147ec8 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 @@ -1,8 +1,33 @@ package au.com.royalpay.payment.manage.citypartner.core.impls; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.annotation.Resource; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.alibaba.fastjson.JSONObject; + +import au.com.royalpay.payment.manage.citypartner.beans.AgentCommissionAnalysis; import au.com.royalpay.payment.manage.citypartner.beans.CityPartnerCommissionAnalysis; import au.com.royalpay.payment.manage.citypartner.beans.ReferrerCommissionAnalysis; import au.com.royalpay.payment.manage.citypartner.core.CityPartnerPrizeService; +import au.com.royalpay.payment.manage.mappers.financial.FinancialAgentCommissionDetailMapper; +import au.com.royalpay.payment.manage.mappers.financial.FinancialAgentCommissionMapper; import au.com.royalpay.payment.manage.mappers.financial.FinancialPartnerCommissionDetailMapper; import au.com.royalpay.payment.manage.mappers.financial.FinancialPartnerCommissionMapper; import au.com.royalpay.payment.manage.mappers.financial.FinancialReferrerCommissionDetailMapper; @@ -12,18 +37,6 @@ import au.com.royalpay.payment.manage.mappers.system.OrgMapper; import au.com.royalpay.payment.tools.env.SysConfigManager; import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.exceptions.ServerErrorException; -import com.alibaba.fastjson.JSONObject; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.time.DateUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; -import java.math.BigDecimal; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.*; /** * Created by yixian on 2017-03-08. @@ -41,6 +54,10 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { @Resource private FinancialReferrerCommissionDetailMapper financialReferrerCommissionDetailMapper; @Resource + private FinancialAgentCommissionDetailMapper financialAgentCommissionDetailMapper; + @Resource + private FinancialAgentCommissionMapper financialAgentCommissionMapper; + @Resource private FinancialReferrerCommissionMapper financialReferrerCommissionMapper; @Resource private SysConfigManager sysConfigManager; @@ -180,6 +197,7 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { BigDecimal netCharge = BigDecimal.ZERO; BigDecimal orgCharge = BigDecimal.ZERO; String clientMoniker = ""; + int type = 1; for (JSONObject jsonObject : entry.getValue()) { grossAmount = grossAmount.add(jsonObject.getBigDecimal("gross_amount")); totalCharge = totalCharge.add(jsonObject.getBigDecimal("total_charge")); @@ -189,6 +207,7 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { netCharge = netCharge.add(jsonObject.getBigDecimal("net_charge")); } clientMoniker = jsonObject.getString("client_moniker"); + type = jsonObject.getIntValue("type"); } resultGrossAmount = resultGrossAmount.add(grossAmount); resultTotalCharge = resultTotalCharge.add(totalCharge); @@ -202,6 +221,7 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { sumResult.put("net_charge", netCharge); sumResult.put("client_moniker", clientMoniker); sumResult.put("channel_detail", entry.getValue()); + sumResult.put("type",type); partnerClientInfos.add(sumResult); } result.put("partner_client_infos", partnerClientInfos); @@ -227,8 +247,7 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { int year = monthCal.get(Calendar.YEAR); int month = monthCal.get(Calendar.MONTH) + 1; - financialPartnerCommissionDetailMapper.clearData(year, month); - financialPartnerCommissionMapper.clearData(year, month); + JSONObject sysConfig = sysConfigManager.getSysConfig(); BigDecimal alipayChargeRate = new BigDecimal("0.6"); BigDecimal wechatChargeRate = new BigDecimal("0.6"); @@ -250,31 +269,38 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { channelMap.put("Alipay", "Alipay"); channelMap.put("Wechat", "Wechat"); channelMap.put("Bestpay", "Bestpay"); - channelMap.put("jd","jd"); - channelMap.put("AlipayOnline","AlipayOnline"); + channelMap.put("jd", "jd"); + channelMap.put("AlipayOnline", "AlipayOnline"); + Set orgIds = new HashSet<>(); List transactionAnalysis = transactionMapper.listTransactionsForCityPartnerCommission(year, month); Map results = new HashMap<>(); for (JSONObject analysisDay : transactionAnalysis) { - String key = analysisDay.getString("channel"); - String channel = analysisDay.getString("channel"); - if (!channelMap.containsKey(key)) { - continue; - } int orgId = analysisDay.getIntValue("org_id"); - JSONObject org = orgMapper.findOne(orgId); + if(org.getIntValue("parent_org_id")>0){ + orgIds.add(orgId); + } if (org == null) { // shall never happen throw new ServerErrorException("Organization Id not exists:" + orgId); } + financialPartnerCommissionDetailMapper.clearData(year, month,org.getIntValue("commission_type")); + financialPartnerCommissionMapper.clearData(year, month,org.getIntValue("commission_type")); + + + String key = analysisDay.getString("channel"); + String channel = analysisDay.getString("channel"); + if (!channelMap.containsKey(key)) { + continue; + } channel = channel.toLowerCase(); CityPartnerCommissionAnalysis orgAnalysis = results.get(orgId + channel); if (orgAnalysis == null) { orgAnalysis = new CityPartnerCommissionAnalysis(orgId, year, month, org.getBigDecimal(channel + "_rate_value"), key, alipayChargeRate, - wechatChargeRate,jdChargeRate,alipayonlineChargeRate); + wechatChargeRate, jdChargeRate, alipayonlineChargeRate,org.getBigDecimal("rate_value"),org.getIntValue("commission_type")); results.put(orgId + channel, orgAnalysis); } - orgAnalysis.attachAnalysis(analysisDay, channel); + orgAnalysis.calculator(analysisDay, channel,org.getIntValue("commission_type")); } for (CityPartnerCommissionAnalysis commission : results.values()) { @@ -286,7 +312,12 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { financialPartnerCommissionDetailMapper.save(detail); } } - + Runnable task = ()->{ + orgIds.forEach((p)->{ + generateAgent(monthStr,p); + }); + }; + new Thread(task).start(); } @Override @@ -323,6 +354,62 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { } } + @Override + @Transactional + public void generateAgent(String monthStr, int orgId) { + JSONObject org = orgMapper.findOne(orgId); + if (org == null) { + // shall never happen + throw new ServerErrorException("Organization Id not exists:" + orgId); + } + JSONObject parnetOrg = orgMapper.findOne(org.getIntValue("parent_org_id")); + if (parnetOrg == null) { + // shall never happen + throw new ServerErrorException("Organization Parent Id not exists:" + org.getIntValue("parent_org_id")); + } + + Date mon = checkMonth(monthStr); + Calendar monthCal = Calendar.getInstance(); + monthCal.setTime(mon); + int year = monthCal.get(Calendar.YEAR); + int month = monthCal.get(Calendar.MONTH) + 1; + + financialAgentCommissionDetailMapper.clearData(year, month); + financialAgentCommissionMapper.clearData(year, month); + HashMap channelMap = new HashMap<>(); + channelMap.put("Alipay", "Alipay"); + channelMap.put("Wechat", "Wechat"); + channelMap.put("Bestpay", "Bestpay"); + channelMap.put("jd", "jd"); + channelMap.put("AlipayOnline", "AlipayOnline"); + List transactionAnalysis = transactionMapper.listTransactionsForAgentCommission(year, month, org.getIntValue("parent_org_id")); + Map results = new HashMap<>(); + for (JSONObject analysisDay : transactionAnalysis) { + String key = analysisDay.getString("channel"); + String channel = analysisDay.getString("channel"); + if (!channelMap.containsKey(key)) { + continue; + } + channel = channel.toLowerCase(); + AgentCommissionAnalysis agentCommissionAnalysis = results.get(orgId + channel); + if (agentCommissionAnalysis == null) { + agentCommissionAnalysis = new AgentCommissionAnalysis(orgId, year, month, org.getBigDecimal(channel + "_rate_value"), key, org, parnetOrg); + results.put(orgId + channel, agentCommissionAnalysis); + } + agentCommissionAnalysis.attachAnalysis(analysisDay, channel); + + } + for (AgentCommissionAnalysis commission : results.values()) { + JSONObject commissionAnalysis = commission.totalCommission(); + financialAgentCommissionMapper.save(commissionAnalysis); + String recordId = commissionAnalysis.getString("record_id"); + List details = commission.getCommissionDetails(recordId); + for (JSONObject detail : details) { + financialAgentCommissionDetailMapper.save(detail); + } + } + } + @Override public List listReferrerAvailableMonths(String year) { int yearNum = checkValidYear(year); @@ -438,4 +525,176 @@ public class CityPartnerPrizeServiceImpl implements CityPartnerPrizeService { } } + @Override + public List listAgentAvailableMonths(String year) { + int yearNum = checkValidYear(year); + List months = financialAgentCommissionMapper.listAvailableMonths(yearNum); + List monthObjs = new ArrayList<>(); + for (Integer mon : months) { + JSONObject item = new JSONObject(); + item.put("month", mon); + item.put("monthstr", year + "-" + StringUtils.substring("00" + mon, -2)); + JSONObject chargeInfo = getAgentPrizeInfo(item.getString("monthstr")); + item.put("org_charge", chargeInfo.getString("org_charge")); + item.put("gross_amount", chargeInfo.getString("gross_amount")); + item.put("total_charge", chargeInfo.getString("total_charge")); + monthObjs.add(item); + } + return monthObjs; + } + + @Override + public JSONObject getAgentPrizeInfo(String monthStr) { + Date monthDate = parseMonth(monthStr); + Calendar monthCal = Calendar.getInstance(); + monthCal.setTime(monthDate); + int year = monthCal.get(Calendar.YEAR); + int month = monthCal.get(Calendar.MONTH) + 1; + JSONObject sum = new JSONObject(); + sum.put("gross_amount", 0); + sum.put("org_charge", 0); + sum.put("total_charge",0); + List referrerPrizes = financialAgentCommissionMapper.list(year, month); + for (JSONObject prize : referrerPrizes) { + plusKey(sum, prize, "gross_amount"); + plusKey(sum, prize, "org_charge"); + plusKey(sum, prize, "total_charge"); + prize.put("monthstr", monthStr); + } + sum.put("referrer", referrerPrizes); + sum.put("monthstr", monthStr); + return sum; + } + + @Override + public JSONObject getAgentPrizeDetail(String monthStr, String orgId) { + + Date monthDate = parseMonth(monthStr); + Calendar monthCal = Calendar.getInstance(); + monthCal.setTime(monthDate); + int year = monthCal.get(Calendar.YEAR); + int month = monthCal.get(Calendar.MONTH) + 1; + JSONObject result = new JSONObject(); + + List total = financialAgentCommissionMapper.find(year, month, orgId); + if (CollectionUtils.isEmpty(total)) { + return null; + } + BigDecimal royalpay_charge = BigDecimal.ZERO; + List partnerPrizeList = financialPartnerCommissionDetailMapper.listDetailByMonth(year,month); + Map countPartnerPrizeMap = new HashMap<>(); + for (JSONObject p : partnerPrizeList) { + royalpay_charge = royalpay_charge.add(p.getBigDecimal("royalpay_charge")); + String key = p.getString("client_id")+p.getString("channel").toLowerCase(); + JSONObject partnerTmp = countPartnerPrizeMap.get(key); + if (partnerTmp == null) { + JSONObject partner = new JSONObject(); + partner.put("royalpay_charge", p.getBigDecimal("royalpay_charge")); + countPartnerPrizeMap.put(key, partner); + } else { + partnerTmp.put("royalpay_charge", partnerTmp.getBigDecimal("royalpay_charge").add(p.getBigDecimal("royalpay_charge"))); + } + } + + String tableColumn[] = { "gross_amount", "total_charge", "org_charge", "org_net_charge" }; + + List recordIds = new ArrayList<>(); + Map chargeResultMap = new HashMap<>(); + for (JSONObject jsonObject : total) { + result.put("name", jsonObject.getString("name")); + recordIds.add(jsonObject.getString("record_id")); + for (String s : tableColumn) { + String key = jsonObject.getString("channel") + "_" + s; + if (chargeResultMap.containsKey(key)) { + chargeResultMap.put(key, chargeResultMap.get(key).add(jsonObject.getBigDecimal(s))); + } else { + chargeResultMap.put(key, jsonObject.getBigDecimal(s)); + } + } + } + + List details = financialAgentCommissionDetailMapper.listDetailsByRecordIds(recordIds); + Map> detailMap = new HashMap<>(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + for (JSONObject detail : details) { + detail.put("date_from", format.format(detail.get("date_from"))); + detail.put("date_to", format.format(detail.get("date_to"))); + String key = detail.getString("client_id"); + detail.put("royalpay_charge",BigDecimal.ZERO); + if(countPartnerPrizeMap.get(key+detail.getString("channel").toLowerCase())!=null){ + detail.put("royalpay_charge",countPartnerPrizeMap.get(key+detail.getString("channel")).getBigDecimal("royalpay_charge")); + }else { + detail.put("royalpay_charge",BigDecimal.ZERO); + } + if (detailMap.containsKey(key)) { + detailMap.get(key).add(detail); + } else { + List tmpList = new ArrayList<>(); + tmpList.add(detail); + detailMap.put(key, tmpList); + } + } + + List partnerClientInfos = new ArrayList<>(); + BigDecimal resultGrossAmount = BigDecimal.ZERO; + BigDecimal resultTotalCharge = BigDecimal.ZERO; + BigDecimal resultRoyalpayCharge = BigDecimal.ZERO; + BigDecimal resultOrgCharge = BigDecimal.ZERO; + BigDecimal resultNetCharge = BigDecimal.ZERO; + for (Map.Entry> entry : detailMap.entrySet()) { + JSONObject sumResult = new JSONObject(); + BigDecimal grossAmount = BigDecimal.ZERO; + BigDecimal totalCharge = BigDecimal.ZERO; + BigDecimal royalpayCharge = BigDecimal.ZERO; + BigDecimal netCharge = BigDecimal.ZERO; + BigDecimal orgCharge = BigDecimal.ZERO; + String clientMoniker = ""; + for (JSONObject jsonObject : entry.getValue()) { + grossAmount = grossAmount.add(jsonObject.getBigDecimal("gross_amount")); + totalCharge = totalCharge.add(jsonObject.getBigDecimal("total_charge")); + royalpayCharge = royalpayCharge.add(jsonObject.getBigDecimal("royalpay_charge")); + orgCharge = orgCharge.add(jsonObject.getBigDecimal("org_charge")); + if (jsonObject.getBigDecimal("net_charge") != null) { + netCharge = netCharge.add(jsonObject.getBigDecimal("org_net_charge")); + } + clientMoniker = jsonObject.getString("client_moniker"); + } + resultGrossAmount = resultGrossAmount.add(grossAmount); + resultTotalCharge = resultTotalCharge.add(totalCharge); + resultRoyalpayCharge = resultRoyalpayCharge.add(royalpayCharge); + resultOrgCharge = resultOrgCharge.add(orgCharge); + resultNetCharge = resultNetCharge.add(netCharge); + sumResult.put("gross_amount", grossAmount); + sumResult.put("total_charge", totalCharge); + sumResult.put("royalpay_charge", royalpayCharge); + sumResult.put("org_charge", orgCharge); + sumResult.put("org_net_charge", netCharge); + sumResult.put("client_moniker", clientMoniker); + sumResult.put("channel_detail", entry.getValue()); + partnerClientInfos.add(sumResult); + } + result.put("partner_client_infos", partnerClientInfos); + + for (Map.Entry entry : chargeResultMap.entrySet()) { + result.put(entry.getKey(), entry.getValue()); + } + result.put("monthstr", monthStr); + result.put("total_transaction", resultGrossAmount); + result.put("total_charge", resultTotalCharge); + result.put("royalPay_charge", resultRoyalpayCharge); + result.put("org_net_charge", resultNetCharge); + result.put("city_partner_charge", resultOrgCharge); + return result; + } + + @Override + public List getAgentPrizeInfoList(String monthStr) { + Date monthDate = parseMonth(monthStr); + Calendar monthCal = Calendar.getInstance(); + monthCal.setTime(monthDate); + int year = monthCal.get(Calendar.YEAR); + int month = monthCal.get(Calendar.MONTH) + 1; + return financialAgentCommissionMapper.list(year, month); + } + } 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 eb62f6b82..3e53c6041 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 @@ -2,17 +2,27 @@ package au.com.royalpay.payment.manage.citypartner.web; import au.com.royalpay.payment.manage.citypartner.core.CityPartnerPrizeService; import au.com.royalpay.payment.manage.permission.manager.ManagerMapping; +import au.com.royalpay.payment.tools.CommonConsts; import au.com.royalpay.payment.tools.permission.enums.ManagerRole; + import com.alibaba.fastjson.JSONObject; -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.annotation.Resource; + /** * Created by yixian on 2017-03-08. */ @@ -63,16 +73,18 @@ public class CityPartnerPrizeController { BigDecimal netCharge = BigDecimal.ZERO; String cityPartnerName = ""; int org_id = 0; + int type = 1; for (JSONObject jsonObject : entry.getValue()) { - grossAmount = grossAmount.add(jsonObject.getBigDecimal("gross_amount")); - totalCharge = totalCharge.add(jsonObject.getBigDecimal("total_charge")); - royalpayCharge = royalpayCharge.add(jsonObject.getBigDecimal("royalpay_charge")); + grossAmount = grossAmount.add(jsonObject.getBigDecimal("gross_amount")); + totalCharge = totalCharge.add(jsonObject.getBigDecimal("total_charge")); + royalpayCharge = royalpayCharge.add(jsonObject.getBigDecimal("royalpay_charge")); orgCharge = orgCharge.add(jsonObject.getBigDecimal("org_charge")); - if(jsonObject.getBigDecimal("net_charge")!=null) { + if (jsonObject.getBigDecimal("net_charge") != null) { netCharge = netCharge.add(jsonObject.getBigDecimal("net_charge")); } org_id = jsonObject.getIntValue("org_id"); cityPartnerName = jsonObject.getString("name"); + type = jsonObject.getIntValue("commission_type"); } sumResult.put("gross_amount", grossAmount); sumResult.put("total_charge", totalCharge); @@ -80,7 +92,8 @@ public class CityPartnerPrizeController { sumResult.put("org_charge", orgCharge); sumResult.put("org_name", cityPartnerName); sumResult.put("org_id", org_id); - sumResult.put("net_charge",netCharge); + sumResult.put("net_charge", netCharge); + sumResult.put("type",type); sumResult.put("channel_detail", entry.getValue()); resultTotalCharge = resultTotalCharge.add(totalCharge); resultRoyalpayCharge = resultRoyalpayCharge.add(royalpayCharge); @@ -89,11 +102,11 @@ public class CityPartnerPrizeController { partnerInfos.add(sumResult); } result.put("monthstr", monthStr); - result.put("total_charge",resultTotalCharge); - result.put("royalpay_charge",resultRoyalpayCharge); - result.put("net_charge",resultNetCharge); - result.put("org_charge",resultOrgCharge); - result.put("partner_info_list",partnerInfos); + result.put("total_charge", resultTotalCharge); + result.put("royalpay_charge", resultRoyalpayCharge); + result.put("net_charge", resultNetCharge); + result.put("org_charge", resultOrgCharge); + result.put("partner_info_list", partnerInfos); return result; } @@ -107,14 +120,17 @@ public class CityPartnerPrizeController { String month = param.getString("month"); cityPartnerPrizeService.generateReferrer(month); } + @ManagerMapping("/referrer/months/{monthStr}/orgs/{orgId}") public JSONObject getreferrerPrizeDetail(@PathVariable String monthStr, @PathVariable String orgId) { return cityPartnerPrizeService.getReferrerPrizeDetail(monthStr, orgId); } + @RequestMapping("/referrer/months") public List listReferrerAvailableMonths(@RequestParam String year) { return cityPartnerPrizeService.listReferrerAvailableMonths(year); } + @RequestMapping(value = "/referrer/months/{monthStr}") public JSONObject getReferrerPrizeInfo(@PathVariable String monthStr) { List partnerPrizeInfos = cityPartnerPrizeService.getReferrerPrizeInfoList(monthStr); @@ -140,24 +156,121 @@ public class CityPartnerPrizeController { String cityPartnerName = ""; int org_id = 0; for (JSONObject jsonObject : entry.getValue()) { - grossAmount = grossAmount.add(jsonObject.getBigDecimal("gross_amount")); + grossAmount = grossAmount.add(jsonObject.getBigDecimal("gross_amount")); + orgCharge = orgCharge.add(jsonObject.getBigDecimal("org_charge")); + org_id = jsonObject.getIntValue("org_id"); + cityPartnerName = jsonObject.getString("name"); + } + sumResult.put("gross_amount", grossAmount); + sumResult.put("org_charge", orgCharge); + sumResult.put("org_name", cityPartnerName); + sumResult.put("org_id", org_id); + sumResult.put("channel_detail", entry.getValue()); + resultGrossAmount = resultGrossAmount.add(grossAmount); + resultOrgCharge = resultOrgCharge.add(orgCharge); + partnerInfos.add(sumResult); + } + result.put("monthstr", monthStr); + result.put("gross_amount", resultGrossAmount); + result.put("org_charge", resultOrgCharge); + result.put("partner_info_list", partnerInfos); + return result; + } + + @ManagerMapping("/agent/months/{monthStr}/orgs/{orgId}") + public JSONObject getAgentPrizeDetail(@PathVariable String monthStr, @PathVariable String orgId) { + return cityPartnerPrizeService.getAgentPrizeDetail(monthStr, orgId); + } + + @RequestMapping("/agent/months") + public List listAgentAvailableMonths(@RequestParam String year) { + return cityPartnerPrizeService.listAgentAvailableMonths(year); + } + + @RequestMapping(value = "/agent/months/{monthStr}") + public JSONObject getAgentPrizeInfo(@PathVariable String monthStr) { + List partnerPrizeList = cityPartnerPrizeService.getCityPartnerPrizeInfoList(monthStr); + Map countPartnerPrizeMap = new HashMap<>(); + for (JSONObject p : partnerPrizeList) { + String key = p.getString("org_id"); + JSONObject partnerTmp = countPartnerPrizeMap.get(key); + if (partnerTmp == null) { + JSONObject partner = new JSONObject(); + partner.put("royalpay_charge", p.getBigDecimal("royalpay_charge")); + countPartnerPrizeMap.put(key, partner); + } else { + partnerTmp.put("royalpay_charge", partnerTmp.getBigDecimal("royalpay_charge").add(p.getBigDecimal("royalpay_charge"))); + } + } + + List partnerPrizeInfos = cityPartnerPrizeService.getAgentPrizeInfoList(monthStr); + 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 (partenerPrizeMap.containsKey(key)) { + partenerPrizeMap.get(key).add(partnerPrizeInfo); + } else { + List tmpList = new ArrayList<>(); + tmpList.add(partnerPrizeInfo); + partenerPrizeMap.put(key, tmpList); + } + } + + + + + JSONObject result = new JSONObject(); + List partnerInfos = new ArrayList<>(partenerPrizeMap.size()); + BigDecimal resultGrossAmount = BigDecimal.ZERO; + BigDecimal resultOrgCharge = BigDecimal.ZERO; + BigDecimal resultAgentCharge = BigDecimal.ZERO; + BigDecimal resultOrgNetCharge = BigDecimal.ZERO; + BigDecimal resultRoyalpayCharge = BigDecimal.ZERO; + + for (Map.Entry> entry : partenerPrizeMap.entrySet()) { + JSONObject sumResult = new JSONObject(); + BigDecimal grossAmount = BigDecimal.ZERO; + BigDecimal orgCharge = BigDecimal.ZERO; + BigDecimal agentCharge = BigDecimal.ZERO; + BigDecimal orgNetCharge = BigDecimal.ZERO; + BigDecimal royalpayCharge = BigDecimal.ZERO; + String cityPartnerName = ""; + int org_id = 0; + for (JSONObject jsonObject : entry.getValue()) { + grossAmount = grossAmount.add(jsonObject.getBigDecimal("gross_amount")); orgCharge = orgCharge.add(jsonObject.getBigDecimal("org_charge")); + agentCharge = agentCharge.add(jsonObject.getBigDecimal("total_charge")); + orgNetCharge = orgNetCharge.add(jsonObject.getBigDecimal("org_net_charge")); + royalpayCharge = royalpayCharge.add(jsonObject.getBigDecimal("royalpay_charge")); org_id = jsonObject.getIntValue("org_id"); cityPartnerName = jsonObject.getString("name"); } sumResult.put("gross_amount", grossAmount); sumResult.put("org_charge", orgCharge); + 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); resultGrossAmount = resultGrossAmount.add(grossAmount); resultOrgCharge = resultOrgCharge.add(orgCharge); + resultAgentCharge = resultAgentCharge.add(agentCharge); + resultOrgNetCharge = resultOrgNetCharge.add(orgNetCharge); partnerInfos.add(sumResult); } + + result.put("royalpay_charge", resultRoyalpayCharge); result.put("monthstr", monthStr); - result.put("gross_amount",resultGrossAmount); - result.put("org_charge",resultOrgCharge); - result.put("partner_info_list",partnerInfos); + result.put("gross_amount", resultGrossAmount); + result.put("agent_total_charge", resultAgentCharge); + result.put("org_charge", resultOrgCharge); + result.put("org_net_charge", resultOrgNetCharge); + result.put("partner_info_list", partnerInfos); return result; } } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionDetailMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionDetailMapper.java new file mode 100644 index 000000000..394ed637d --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionDetailMapper.java @@ -0,0 +1,27 @@ +package au.com.royalpay.payment.manage.mappers.financial; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.alibaba.fastjson.JSONObject; + +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; + +/** + * Created by yixian on 2017-03-08. + */ +@AutoMapper(tablename = "financial_agent_commission_detail", pkName = "detail_id") +public interface FinancialAgentCommissionDetailMapper { + @AutoSql(type = SqlType.DELETE) + void clearData(@Param("year") int year, @Param("month") int month); + + @AutoSql(type = SqlType.INSERT) + void save(JSONObject detail); + + List listDetails(@Param("record_id") String recordId); + + List listDetailsByRecordIds(List recordId); +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionMapper.java new file mode 100644 index 000000000..c0b847a56 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionMapper.java @@ -0,0 +1,31 @@ +package au.com.royalpay.payment.manage.mappers.financial; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.alibaba.fastjson.JSONObject; + +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; + +/** + * Created by yixian on 2017-03-08. + */ +@AutoMapper(tablename = "financial_agent_commission", pkName = "record_id") +public interface FinancialAgentCommissionMapper { + @AutoSql(type = SqlType.INSERT) + void save(JSONObject commissionAnalysis); + + @AutoSql(type = SqlType.DELETE) + void clearData(@Param("year") int year, @Param("month") int month); + + List listAvailableMonths(@Param("year") int year); + + List find(@Param("year") int year, @Param("month") int month, @Param("org_id") String orgId); + + List list(@Param("year") int year, @Param("month") int month); + + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionDetailMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionDetailMapper.java index ff8692851..3efb8de35 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionDetailMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionDetailMapper.java @@ -14,7 +14,7 @@ import java.util.List; @AutoMapper(tablename = "financial_partner_commission_detail", pkName = "detail_id") public interface FinancialPartnerCommissionDetailMapper { @AutoSql(type = SqlType.DELETE) - void clearData(@Param("year") int year, @Param("month") int month); + void clearData(@Param("year") int year, @Param("month") int month,@Param("commission_type") int commission_type); @AutoSql(type = SqlType.INSERT) void save(JSONObject detail); @@ -22,4 +22,7 @@ public interface FinancialPartnerCommissionDetailMapper { List listDetails(@Param("record_id") String recordId); List listDetailsByRecordIds(List recordId); + + @AutoSql(type = SqlType.SELECT) + List listDetailByMonth(@Param("year") int year, @Param("month") int month); } diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionMapper.java index 720b8b371..cd44243f5 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionMapper.java @@ -14,7 +14,7 @@ import java.util.List; @AutoMapper(tablename = "financial_partner_commission", pkName = "record_id") public interface FinancialPartnerCommissionMapper { @AutoSql(type = SqlType.DELETE) - void clearData(@Param("year") int year, @Param("month") int month); + void clearData(@Param("year") int year, @Param("month") int month,@Param("commission_type") int commission_type); @AutoSql(type = SqlType.INSERT) void save(JSONObject commissionAnalysis); diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java index 05cf97958..97622c602 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/payment/TransactionMapper.java @@ -96,6 +96,8 @@ public interface TransactionMapper { List listTransactionsForReferrerCommission(@Param("year") int year, @Param("month") int month); + List listTransactionsForAgentCommission(@Param("year") int year, @Param("month") int month,@Param("parent_org_id") int parent_org_id); + BigDecimal checkBalance(@Param("end") Date endDate); @AutoSql(type = SqlType.COUNT) 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 dacf64869..1b1b54812 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 @@ -1164,6 +1164,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } checkOrgPermission(manager, client); int clientId = client.getIntValue("client_id"); + JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); if (config == null) { throw new ForbiddenException(clientId + "费率参数配置不完整,请重新输入===>"); } @@ -1174,15 +1175,22 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid config.put("update_time", new Date()); config.put("active_time", DateFormatUtils.format(config.getDate("active_time"), "yyyy-MM-dd")); config.put("expiry_time", DateFormatUtils.format(config.getDate("expiry_time"), "yyyy-MM-dd")); - configNewClientRate(config, clientId, "Alipay", "alipay_rate_value"); - configNewClientRate(config, clientId, "AlipayOnline", "alipayonline_rate_value"); - configNewClientRate(config, clientId, "Wechat", "wechat_rate_value"); - configNewClientRate(config, clientId, "jd", "jd_rate_value"); - configNewClientRate(config, clientId, "Bestpay", "bestpay_rate_value"); + + checkAddRate(config,"Wechat", "wechat_rate_value",org,"min_wechat_rate"); + checkAddRate(config,"Alipay", "alipay_rate_value",org,"min_alipay_rate"); + checkAddRate(config,"AlipayOnline", "alipayonline_rate_value",org,"min_alipayonline_rate"); + checkAddRate(config,"Bestpay", "bestpay_rate_value",org,"min_bestpay_rate"); + checkAddRate(config,"jd", "jd_rate_value",org,"min_jd_rate"); + + configNewClientRate(config, clientId, "Wechat", "wechat_rate_value",org,"min_wechat_rate"); + configNewClientRate(config, clientId, "Alipay", "alipay_rate_value",org,"min_alipay_rate"); + configNewClientRate(config, clientId, "AlipayOnline", "alipayonline_rate_value",org,"min_alipayonline_rate"); + configNewClientRate(config, clientId, "Bestpay", "bestpay_rate_value",org,"min_bestpay_rate"); + configNewClientRate(config, clientId, "jd", "jd_rate_value",org,"min_jd_rate"); } - private void configNewClientRate(JSONObject config, int clientId, String channel, String rateKey) { + private void configNewClientRate(JSONObject config, int clientId, String channel, String rateKey,JSONObject org,String rateValueKey) { if (config.containsKey(rateKey)) { JSONObject newConfig = new JSONObject(); newConfig.putAll(config); @@ -1210,6 +1218,12 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } checkOrgPermission(manager, client); JSONObject configJson = config.toJSON(); + JSONObject org = orgMapper.findOne(client.getIntValue("org_id")); + checkModifyRate(org,configJson,"Wechat","min_wechat_rate"); + checkModifyRate(org,configJson,"Alipay","min_alipay_rate"); + checkModifyRate(org,configJson,"AlipayOnline","min_alipayonline_rate"); + checkModifyRate(org,configJson,"jd","min_jd_rate"); + checkModifyRate(org,configJson,"Bestpay","min_bestpay_rate"); configJson.put("client_rate_id", rateId); configJson.put("manager_id", manager.getString("manager_id")); configJson.put("manager_name", manager.getString("username")); @@ -1223,6 +1237,24 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid } // clientMapper.updateCleanDays(clientId, config.getCleanDays()); } + private void checkModifyRate(JSONObject org,JSONObject configJson,String rateName,String rateValueKey){ + if(configJson.getString("rate_name").equals(rateName)){ + if(org.containsKey(rateValueKey)){ + if(configJson.getDouble("rate_value").compareTo(org.getDouble(rateValueKey)) > 0){ + throw new ForbiddenException("费率参数大于旗下商户最低"+rateName+"费率,请重新输入===>"); + }; + } + } + } + private void checkAddRate(JSONObject config,String channel, String rateKey,JSONObject org,String rateValueKey){ + if(config.containsKey(rateKey)){ + if(org.containsKey(rateValueKey)){ + if(config.getBigDecimal(rateKey).compareTo(org.getBigDecimal(rateValueKey)) > 0){ + throw new ForbiddenException("费率参数大于旗下商户最低"+channel+"费率,请重新输入===>"); + }; + } + } + } @Override public List listSubClients(JSONObject manager, String clientMoniker) { diff --git a/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java b/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java index 3eda2a10d..04b119196 100644 --- a/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java +++ b/src/main/java/au/com/royalpay/payment/manage/organizations/beans/OrgInfo.java @@ -34,6 +34,12 @@ public class OrgInfo { private int limit = 10; private String parent_org_id; private String org_id; + private String commission_type; + private Double min_wechat_rate; + private Double min_alipay_rate; + private Double min_bestpay_rate; + private Double min_jd_rate; + private Double min_alipayonline_rate; public JSONObject toJsonParam() { JSONObject param = new JSONObject(); @@ -229,4 +235,52 @@ public class OrgInfo { public void setOrg_id(String org_id) { this.org_id = org_id; } + + public String getCommission_type() { + return commission_type; + } + + public void setCommission_type(String commission_type) { + this.commission_type = commission_type; + } + + public Double getMin_wechat_rate() { + return min_wechat_rate; + } + + public void setMin_wechat_rate(Double min_wechat_rate) { + this.min_wechat_rate = min_wechat_rate; + } + + public Double getMin_alipay_rate() { + return min_alipay_rate; + } + + public void setMin_alipay_rate(Double min_alipay_rate) { + this.min_alipay_rate = min_alipay_rate; + } + + public Double getMin_bestpay_rate() { + return min_bestpay_rate; + } + + public void setMin_bestpay_rate(Double min_bestpay_rate) { + this.min_bestpay_rate = min_bestpay_rate; + } + + public Double getMin_jd_rate() { + return min_jd_rate; + } + + public void setMin_jd_rate(Double min_jd_rate) { + this.min_jd_rate = min_jd_rate; + } + + public Double getMin_alipayonline_rate() { + return min_alipayonline_rate; + } + + public void setMin_alipayonline_rate(Double min_alipayonline_rate) { + this.min_alipayonline_rate = min_alipayonline_rate; + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 40af310fa..48b29bfd1 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -96,6 +96,3 @@ app.foreign-currency=AUD app.ofei.md5-key=Khjx6wejblaJzmG0JBWFlPFKAUxhFIXQ app.ofei.pwd=aomi@8888 app.ofei.sp-code=A1407200 - -android.message.secret=2b96d9bc6169c9554218aab1 -android.message.appkey=3f33a10d0a7d4ac94d8f2431 \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerMembershipMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerMembershipMapper.xml index 387f73791..df98c4b89 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerMembershipMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/customers/CustomerMembershipMapper.xml @@ -52,8 +52,9 @@ \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionDetailMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionDetailMapper.xml new file mode 100644 index 000000000..a4c412d42 --- /dev/null +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionDetailMapper.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionMapper.xml new file mode 100644 index 000000000..0a2b3df45 --- /dev/null +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialAgentCommissionMapper.xml @@ -0,0 +1,26 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionDetailMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionDetailMapper.xml index d4fa79e43..539bb7de5 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionDetailMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/financial/FinancialPartnerCommissionDetailMapper.xml @@ -23,4 +23,5 @@ ORDER BY c.client_moniker ASC, d.date_from ASC + \ No newline at end of file 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 141aa0ba3..119671664 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 @@ -515,6 +515,52 @@ ORDER BY c.org_id ASC, t.client_id ASC, trade_date ASC + + + + +
+
+
+
+
+
+ +
+
+ Total Charge: + +
+
+ Org Charge: + +
+
+
+
+
+
+ + +
+ \ No newline at end of file diff --git a/src/main/ui/static/config/organizations/organizations.js b/src/main/ui/static/config/organizations/organizations.js index 175906192..7a2973e40 100644 --- a/src/main/ui/static/config/organizations/organizations.js +++ b/src/main/ui/static/config/organizations/organizations.js @@ -11,6 +11,13 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) { "label": "推荐人", "value": 1 }]; + var commission_types = [{ + "label": "渠道计算法", + "value": 1 + }, { + "label": "收益比例", + "value": 3 + }]; var app = angular.module('organizations', ['ui.router', 'ui.bootstrap']); app.config(['$stateProvider', function ($stateProvider) { $stateProvider.state('organizations', { @@ -43,7 +50,7 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) { }]); app.controller('orgsCtrl', ['$scope', '$http','commonDialog', function ($scope, $http,commonDialog ) { $scope.params = {}; - if($scope.currentUser.org_id !=null && !angular.equals({}, $scope.currentUser.org_id)) { + if(($scope.currentUser.role & parseInt('1000000000000', 2)) > 0 && $scope.currentUser.org_id) { $scope.params.org_id = $scope.currentUser.org_id; } $scope.pagination = {}; @@ -80,8 +87,9 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) { }]); app.controller('orgDetailCtrl', ['$scope', '$http', '$state', 'Upload', '$uibModal','commonDialog', 'org', function ($scope, $http, $state, Upload,$uibModal,commonDialog, org) { $scope.types = angular.copy(types); + $scope.commission_types = angular.copy(commission_types); $scope.org = angular.copy(org.data); - if ($scope.currentUser.org_id != null) { + if (($scope.currentUser.role & parseInt('1000000000000', 2)) > 0 && $scope.currentUser.org_id) { $scope.org.type = 0; } $scope.uploadLogo = function (file) { @@ -111,6 +119,9 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) { }); return; } + if($scope.org.type == 1){ + $scope.org.commission_type = 2; + } $http.put('/sys/orgs/' + $scope.org.org_id, $scope.org).then(function () { commonDialog.alert({title: 'Succeed', content: 'Organization update succeeded', type: 'success'}); $state.reload(); @@ -177,8 +188,9 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) { }]); app.controller('orgDetailParentCtrl', ['$scope', '$http', '$state', 'Upload', '$uibModal','commonDialog', 'org', function ($scope, $http, $state, Upload,$uibModal,commonDialog, org) { $scope.types = angular.copy(types); + $scope.commission_types = angular.copy(commission_types); $scope.org = angular.copy(org.data); - if ($scope.currentUser.org_id != null) { + if (($scope.currentUser.role & parseInt('1000000000000', 2)) > 0 && $scope.currentUser.org_id) { $scope.org.type = 0; } $scope.uploadLogo = function (file) { @@ -274,6 +286,7 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) { }]); app.controller('newOrgCtrl', ['$scope', '$http', '$state', 'Upload', 'commonDialog', function ($scope, $http, $state, Upload, commonDialog) { $scope.types = angular.copy(types); + $scope.commission_types = angular.copy(commission_types); $scope.uploadLogo = function (file) { if (file == null) { return; @@ -301,7 +314,10 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) { }); return; } - if($scope.currentUser.org_id !=null && !angular.equals({}, $scope.currentUser.org_id)) { + if($scope.org.type == 1){ + $scope.org.commission_type = 2; + } + if(($scope.currentUser.role & parseInt('1000000000000', 2)) > 0 && $scope.currentUser.org_id) { $scope.org.parent_org_id = angular.copy($scope.currentUser.org.org_id); $scope.org.type = '0'; } diff --git a/src/main/ui/static/config/organizations/templates/new_org.html b/src/main/ui/static/config/organizations/templates/new_org.html index 0682ae4c9..6b54fde0c 100644 --- a/src/main/ui/static/config/organizations/templates/new_org.html +++ b/src/main/ui/static/config/organizations/templates/new_org.html @@ -65,7 +65,7 @@
+ ng-show="!('1000000000000'|withRole)">
@@ -79,6 +79,17 @@
+
+ +
+ +
+
@@ -89,52 +100,110 @@
-
-
- -
- +
+
+
+ +
+ +
+
+
+ +
+ +
+
-
- -
- +
+ +
+ +
-
-
- -
- +
+ +
+ +
-
-
- -
- +
+ +
+ +
-
-
- -
- +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
diff --git a/src/main/ui/static/config/organizations/templates/org_detail.html b/src/main/ui/static/config/organizations/templates/org_detail.html index c23704ac5..740de3528 100644 --- a/src/main/ui/static/config/organizations/templates/org_detail.html +++ b/src/main/ui/static/config/organizations/templates/org_detail.html @@ -51,7 +51,7 @@
+ ng-if="!('1000000000000'|withRole)">
@@ -65,6 +65,16 @@
+
+ +
+ +
+
@@ -75,46 +85,143 @@
-
- -
- - % +
+
+ +
+ + % +
+
-
+
+
+ +
+ + % +
+
-
- -
- - % +
+ +
+ + % +
+
+ +
+ +
+ + % +
+
+ +
+ +
+ + % +
+
+ +
+ +
+ + % +
+
-
-
- -
- - % + +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
-
- -
- - % + +
diff --git a/src/main/ui/static/config/organizations/templates/org_detail_parent.html b/src/main/ui/static/config/organizations/templates/org_detail_parent.html index e2053af76..3f4b23d70 100644 --- a/src/main/ui/static/config/organizations/templates/org_detail_parent.html +++ b/src/main/ui/static/config/organizations/templates/org_detail_parent.html @@ -22,7 +22,7 @@
- + - - - + <!––>
@@ -155,19 +155,251 @@ Back
- + <!––> - - + + +
+
+
+ +
+ +
+
+
+ +
+

+ + + +

+
+
+
+ +
+ +
+
+
+ +
+ + + + + +
+
+
+ +
+ +
+
+
+
+ +
+ + % +
+
+
+
+
+
+ +
+ + % +
+
+
+
+
+ +
+ + % +
+
+ +
+ +
+ + % +
+
+ +
+ +
+ + % +
+
+ +
+ +
+ + % +
+
+ +
+ +
+ + % +
+
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + Back +
+
-
--> +
diff --git a/src/main/ui/static/config/orgcommission/orgcommission.js b/src/main/ui/static/config/orgcommission/orgcommission.js index fe1eda92c..3171ff7a7 100644 --- a/src/main/ui/static/config/orgcommission/orgcommission.js +++ b/src/main/ui/static/config/orgcommission/orgcommission.js @@ -1,6 +1,21 @@ /** * Created by yixian on 2017-03-08. */ +var commissionTypeMap = [{ + "label": 1, + "value": "渠道计算法" +}, + { + "label": 2, + "value": "总交易额比例" + }, + { + "label": 3, + "value": "收益比例" + } +]; + + define(['angular','../../analysis/org/analysis-org'], function (angular) { 'use strict'; var app = angular.module('orgcommission', ['ui.router']); @@ -78,9 +93,11 @@ define(['angular','../../analysis/org/analysis-org'], function (angular) { $state.go('analysis_org.orgcommission.month', {monthStr: monthStr}) }; }]); - app.controller('orgCommissionMonthViewCtrl', ['$scope', 'monthData', function ($scope, monthData) { + app.controller('orgCommissionMonthViewCtrl', ['$scope', 'monthData','$filter', function ($scope, monthData) { $scope.monthData = monthData.data; $scope.ctrl = {}; + $scope.commissionTypeMap = commissionTypeMap; + $scope.active = function (log) { if($scope.ctrl.activeLog && $scope.ctrl.activeLog.org_id==log.org_id){ $scope.ctrl.activeLog=null; @@ -100,5 +117,23 @@ define(['angular','../../analysis/org/analysis-org'], function (angular) { $scope.ctrl.activeLog=log; } }]); + + + app.filter('commission_type_filter', function () { + return function (sectorValue) { + var sectorLabel = ''; + angular.forEach(commissionTypeMap, function (sector) { + if (sector.label == sectorValue) { + sectorLabel = sector.value; + } + }); + return sectorLabel; + } + }); + + return app; + + + }); \ No newline at end of file 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 fede91cc7..3c5675ffc 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 @@ -33,6 +33,7 @@ RoyalPay Charge Net Charge City Partner Charge + Type Details @@ -44,6 +45,7 @@ + diff --git a/src/test/java/au/com/royalpay/payment/manage/citypartner/core/impls/CityPartnerPrizeServiceImplTest.java b/src/test/java/au/com/royalpay/payment/manage/citypartner/core/impls/CityPartnerPrizeServiceImplTest.java new file mode 100644 index 000000000..7851d03dc --- /dev/null +++ b/src/test/java/au/com/royalpay/payment/manage/citypartner/core/impls/CityPartnerPrizeServiceImplTest.java @@ -0,0 +1,33 @@ +package au.com.royalpay.payment.manage.citypartner.core.impls; + +import au.com.royalpay.payment.manage.citypartner.core.CityPartnerPrizeService; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * Created by wangning on 09/01/2018. + */ +@SpringBootTest +@ActiveProfiles({"local","alipay","wechat","jd","bestpay"}) +@RunWith(SpringRunner.class) +public class CityPartnerPrizeServiceImplTest { + + @Resource + private CityPartnerPrizeService cityPartnerPrizeService; + @Test + public void generateAgent() throws Exception { + cityPartnerPrizeService.generateAgent("2017-06",9); + } + + @Test + public void generate() throws Exception { + cityPartnerPrizeService.generate("2017-06"); + } + +} \ No newline at end of file