diff --git a/src/main/ui/m_login.html b/src/main/ui/m_login.html
index 3c4210286..631c24fd5 100644
--- a/src/main/ui/m_login.html
+++ b/src/main/ui/m_login.html
@@ -55,7 +55,7 @@
-
+
Easy Business,Easy Payment
diff --git a/src/main/ui/manage.html b/src/main/ui/manage.html
index ed66924d3..82d0b522f 100644
--- a/src/main/ui/manage.html
+++ b/src/main/ui/manage.html
@@ -80,7 +80,7 @@
ng-class="{'sidebar-collapse':hideSideBar,'sidebar-open':hideSideBar}">
-
To Be The Best QRCode Payment Service Provider!
From 8073bf876c893c56597a6d1633b39130ca07f848 Mon Sep 17 00:00:00 2001
From: yuan <1551130722@qq.com>
Date: Mon, 25 Dec 2017 15:14:42 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E6=9B=B4=E6=94=B9BD=E9=94=80=E5=94=AE?=
=?UTF-8?q?=E9=A1=B5=E8=A1=8C=E4=B8=9A=E5=B1=95=E7=A4=BA=EF=BC=8C=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E8=A1=A8=E6=A0=BC=E5=AF=BC=E5=87=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../manage/analysis/beans/AnalysisBean.java | 12 ++
.../analysis/core/BDAnalysisService.java | 4 +
.../core/impls/BDAnalysisServiceImpl.java | 129 ++++++++++++-
.../web/BDSaleAnalysisController.java | 10 +
.../analysis/mappers/BDAnalysisMapper.xml | 4 +-
src/main/ui/static/analysis/bd-sale-volume.js | 175 ++++++++++++++++--
.../analysis/templates/bd_sale_analysis.html | 39 +++-
src/main/ui/static/images/christmas.png | Bin 0 -> 357137 bytes
8 files changed, 350 insertions(+), 23 deletions(-)
create mode 100644 src/main/ui/static/images/christmas.png
diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/beans/AnalysisBean.java b/src/main/java/au/com/royalpay/payment/manage/analysis/beans/AnalysisBean.java
index f8b4251b7..1c90ca15d 100644
--- a/src/main/java/au/com/royalpay/payment/manage/analysis/beans/AnalysisBean.java
+++ b/src/main/java/au/com/royalpay/payment/manage/analysis/beans/AnalysisBean.java
@@ -35,6 +35,7 @@ public class AnalysisBean {
private String client_moniker;
private String amount_from;
private String amount_to;
+ private String bd_name;
public JSONObject toParams(String timezone) {
JSONObject params = new JSONObject();
if (timezone != null) {
@@ -78,6 +79,9 @@ public class AnalysisBean {
if(channel!=null){
params.put("channel",channel);
}
+ if(bd_name!=null){
+ params.put("bd_name",bd_name);
+ }
if (client_moniker!=null){
params.put("client_moniker", client_moniker);
}
@@ -217,4 +221,12 @@ public class AnalysisBean {
public void setClient_moniker(String client_moniker) {
this.client_moniker = client_moniker;
}
+
+ public String getBd_name() {
+ return bd_name;
+ }
+
+ public void setBd_name(String bd_name) {
+ this.bd_name = bd_name;
+ }
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/core/BDAnalysisService.java b/src/main/java/au/com/royalpay/payment/manage/analysis/core/BDAnalysisService.java
index e5067b457..ae814453e 100644
--- a/src/main/java/au/com/royalpay/payment/manage/analysis/core/BDAnalysisService.java
+++ b/src/main/java/au/com/royalpay/payment/manage/analysis/core/BDAnalysisService.java
@@ -19,6 +19,10 @@ public interface BDAnalysisService {
void exportSalesExcel(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException;
+ void exportPartnerExcelByBd(AnalysisBean analysisBean, HttpServletResponse httpResponse,JSONObject manager) throws IOException;
+
+ void exportPartnerExcelByData(AnalysisBean analysisBean, HttpServletResponse httpResponse,JSONObject manager) throws IOException;
+
/**
* 开通商户按bd统计
*
diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/BDAnalysisServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/BDAnalysisServiceImpl.java
index dbaa47917..119a02304 100644
--- a/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/BDAnalysisServiceImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/analysis/core/impls/BDAnalysisServiceImpl.java
@@ -4,9 +4,12 @@ import au.com.royalpay.payment.manage.analysis.beans.AnalysisBean;
import au.com.royalpay.payment.manage.analysis.core.BDAnalysisService;
import au.com.royalpay.payment.manage.analysis.mappers.BDAnalysisMapper;
import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.io.IOUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.stereotype.Service;
@@ -15,6 +18,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -29,7 +33,20 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
@Override
public List
getSalesAnalysis(JSONObject jsonObject) {
- return bdAnalysisMapper.getBDSaleList(jsonObject);
+ return listSalesAnalysis(jsonObject);
+ }
+
+ private List listSalesAnalysis(JSONObject jsonObject){
+ List listCountApproved = bdAnalysisMapper.countApproved(jsonObject);
+ List bdSaleList = bdAnalysisMapper.getBDSaleList(jsonObject);
+ for(JSONObject countApproved : listCountApproved){
+ for(JSONObject saleList : bdSaleList){
+ if(countApproved.getIntValue("bd_id") == saleList.getIntValue("bd_id")){
+ saleList.put("num",countApproved.getString("num"));
+ }
+ }
+ }
+ return bdSaleList;
}
@Override
@@ -39,7 +56,37 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
@Override
public List getSalesPartnersReportByBD(JSONObject jsonObject) {
- return bdAnalysisMapper.getBDSalePartnerReport(jsonObject);
+ List bdAnalysis = bdAnalysisMapper.getBDSalePartnerReport(jsonObject);
+ List result = new ArrayList<>();
+ String keys_1[] = {"1","2","3","4","5","6","7","8","9"};
+ String key_2[] = {"10","11","12"};
+ result = getPartnerTypes(keys_1,result,1,5,bdAnalysis);
+ return getPartnerTypes(key_2,result,2,6,bdAnalysis);
+ }
+
+ private List getPartnerTypes(String keys[],List result,int short_length,int long_length,List bdAnalysis){
+ for(String key : keys){
+ int countValue = 0;
+ int countTotal = 0;
+ JSONObject object = new JSONObject();
+ JSONArray list = new JSONArray();
+ for(JSONObject type : bdAnalysis){
+ if(type.getString("royalpayindustry") != null && type.getString("royalpayindustry").startsWith(key) && (type.getString("royalpayindustry").length()==short_length || type.getString("royalpayindustry").length()==long_length)){
+ countValue += type.getIntValue("partner_counts");
+ countTotal += type.getIntValue("total");
+ list.add(type);
+ }
+ }
+ if(countValue == 0){
+ continue;
+ }
+ object.put("count_value",countValue);
+ object.put("count_total",countTotal);
+ object.put("mccCode",key);
+ object.put("children",list);
+ result.add(object);
+ }
+ return result;
}
@Override
@@ -97,6 +144,84 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
return bdAnalysisMapper.countApproved(params);
}
+ @Override
+ public void exportPartnerExcelByBd(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException {
+ OutputStream ous = null;
+ try{
+ JSONObject parmerters = analysisBean.toParams(null);
+ List listPartnerByBd = bdAnalysisMapper.getBDSalePartnerList(parmerters);
+ httpResponse.setContentType("application/octet-stream;");
+ httpResponse.addHeader("Content-Disposition", "attachment; filename=" + "Merchant_list--" +parmerters.getString("bd_name") + analysisBean.getBegin() + "~" + analysisBean.getEnd() + ".xls");
+ ous = httpResponse.getOutputStream();
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFFont font = wb.createFont();
+ font.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ font.setFontHeightInPoints((short) 15);
+ CellStyle analysisStyle = wb.createCellStyle();
+ analysisStyle.setFont(font);
+ Sheet sheet = wb.createSheet("Merchant list" );
+ sheet.createFreezePane(1, 2);
+ sheet.setDefaultColumnWidth((short) 25);
+ int rowNum = 0;
+ Row row = sheet.createRow(rowNum);
+ String[] title = {"Short Name", "Client Moniker", "AUD Amount"};
+ for (int i = 0; i < title.length; i++) {
+ row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]);
+ }
+ for(JSONObject partner : listPartnerByBd){
+ row = sheet.createRow(++rowNum);
+ row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("short_name"));
+ row.createCell(1, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("client_moniker"));
+ row.createCell(2, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("total"));
+ }
+ wb.write(ous);
+ ous.flush();
+ }catch (IOException e){
+ } finally {
+ IOUtils.closeQuietly(ous);
+ }
+
+ }
+
+ @Override
+ public void exportPartnerExcelByData(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException {
+ OutputStream ous = null;
+ try{
+ JSONObject parmerters = analysisBean.toParams(null);
+ List listPartnerByData = listSalesAnalysis(parmerters);
+ httpResponse.setContentType("application/octet-stream;");
+ httpResponse.addHeader("Content-Disposition", "attachment; filename=" + "Merchant_sale" + analysisBean.getBegin() + "~" + analysisBean.getEnd() + ".xls");
+ ous = httpResponse.getOutputStream();
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFFont font = wb.createFont();
+ font.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ font.setFontHeightInPoints((short) 15);
+ CellStyle analysisStyle = wb.createCellStyle();
+ analysisStyle.setFont(font);
+ Sheet sheet = wb.createSheet("Merchant Sale List" );
+ sheet.createFreezePane(1, 2);
+ sheet.setDefaultColumnWidth((short) 25);
+ int rowNum = 0;
+ Row row = sheet.createRow(rowNum);
+ String[] title = {"BD Name", "AUD Amount", "Refund Fee","New Merchants"};
+ for (int i = 0; i < title.length; i++) {
+ row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]);
+ }
+ for(JSONObject dataSale : listPartnerByData){
+ row = sheet.createRow(++rowNum);
+ row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(dataSale.getString("bd_name"));
+ row.createCell(1, Cell.CELL_TYPE_STRING).setCellValue(dataSale.getString("total"));
+ row.createCell(2, Cell.CELL_TYPE_STRING).setCellValue(dataSale.getString("refund_fee"));
+ row.createCell(3, Cell.CELL_TYPE_STRING).setCellValue(dataSale.getString("num") == null? "0" : dataSale.getString("num"));
+ }
+ wb.write(ous);
+ ous.flush();
+ }catch (IOException e){
+ } finally {
+ IOUtils.closeQuietly(ous);
+ }
+ }
+
private void exportExcel(HSSFWorkbook workbook,String title,List monthTotalSale) {
// 声明一个工作薄
// 生成一个表格
diff --git a/src/main/java/au/com/royalpay/payment/manage/analysis/web/BDSaleAnalysisController.java b/src/main/java/au/com/royalpay/payment/manage/analysis/web/BDSaleAnalysisController.java
index d50deff10..03e2e0944 100644
--- a/src/main/java/au/com/royalpay/payment/manage/analysis/web/BDSaleAnalysisController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/analysis/web/BDSaleAnalysisController.java
@@ -51,4 +51,14 @@ public class BDSaleAnalysisController {
return bdAnalysisService.getSalesPartnersReportByBD(analysis.toParams(null));
}
+ @ManagerMapping("/sales/partners/excel_bd")
+ public void exportPartnerExcelByBd(AnalysisBean analysis, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, HttpServletResponse httpResponse) throws Exception {
+ bdAnalysisService.exportPartnerExcelByBd(analysis,httpResponse,manager);
+ }
+
+ @ManagerMapping("/sales/partners/excel_data")
+ public void exportPartnerExcelByData(AnalysisBean analysis, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, HttpServletResponse httpResponse) throws Exception {
+ bdAnalysisService.exportPartnerExcelByData(analysis,httpResponse,manager);
+ }
+
}
diff --git a/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/BDAnalysisMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/BDAnalysisMapper.xml
index 6cded9c11..696d064cc 100644
--- a/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/BDAnalysisMapper.xml
+++ b/src/main/resources/au/com/royalpay/payment/manage/analysis/mappers/BDAnalysisMapper.xml
@@ -149,7 +149,7 @@
order by num desc
diff --git a/src/main/ui/static/analysis/bd-sale-volume.js b/src/main/ui/static/analysis/bd-sale-volume.js
index 7e6eafac1..5230d2821 100644
--- a/src/main/ui/static/analysis/bd-sale-volume.js
+++ b/src/main/ui/static/analysis/bd-sale-volume.js
@@ -12,6 +12,7 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
}]);
app.controller('bdSaleAnalysisCtrl', ['$scope', '$http', '$filter', '$timeout', 'commonDialog', 'chartParser','industryMap',
function ($scope, $http, $filter, $timeout, commonDialog, chartParser,industryMap) {
+ $scope.showItems = true;
$scope.params = {};
$scope.today = new Date();
$scope.chooseToday = function () {
@@ -151,9 +152,33 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
}
})
};
-
+ $scope.loadRoyalpayindustry = function () {
+ $http.get('/static/data/royalpayindustry.json').then(function (resp) {
+ $scope.royalpayindustry = resp.data;
+ })
+ };
+ $scope.loadRoyalpayindustry();
+ var getType = function (industryCode) {
+ var industryLabel = '';
+ angular.forEach($scope.royalpayindustry, function (industry) {
+ if (industry.mccCode == industryCode) {
+ industryLabel = industry.label;
+ }else {
+ angular.forEach(industry.children, function (children){
+ if (children.mccCode == industryCode) {
+ industryLabel = children.label;
+ }
+ })
+ }
+ });
+ if (!industryLabel) {
+ industryLabel = industryCode;
+ }
+ return industryLabel;
+ };
$scope.loadPartnersChart = function (bd_id, bd_name) {
$scope.chooseBdName = bd_name;
+ $scope.bd_id = bd_id
var params = angular.copy($scope.params);
if (params.begin) {
params.begin = $filter('date')(params.begin, 'yyyyMMdd');
@@ -188,7 +213,7 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
}
});
- var getType = function (industryCode) {
+ /* var getType = function (industryCode) {
var industryLabel = '';
angular.forEach(industryMap.configs(), function (industry) {
if (industry.value == industryCode) {
@@ -199,21 +224,22 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
industryLabel = industryCode;
}
return industryLabel;
- };
+ };*/
$http.get('/analysis/bd/sales/partners/report', {params: params}).then(function (resp) {
$scope.legends = [];
for (var i = 0; i < resp.data.length; i++) {
- $scope.legends[i] = resp.data[i].partner_type;
- var partner_type = getType(resp.data[i].industry);
+ /* $scope.legends[i] = resp.data[i].partner_type;*/
+ var partner_type = getType(resp.data[i].mccCode);
resp.data[i].partner_type = partner_type;
- $scope.legends[i] = partner_type;
+ /* $scope.legends[i] = partner_type;*/
}
$scope.PartnerTypes = angular.copy(resp.data);
- var legend = $scope.legends;
- $scope.partners_type_chart = chartParser.parse(partnerTypesConfig(), $scope.PartnerTypes);
+ /* var legend = $scope.legends;*/
+ childrenType(0);
+ $scope.partners_type_chart = partnerTypesConfig($scope.PartnerTypes,$scope.children);
$scope.partnersAnalysischart = chartParser.parse(analysisPartner(), $scope.PartnerTypes);
- function partnerTypesConfig() {
+ /*function partnerTypesConfig() {
return {
chart: {
tooltip: {
@@ -237,7 +263,7 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
column: {key: 'partner_counts', name: 'partner_type'}
}]
}
- };
+ };*/
function analysisPartner() {
return {
@@ -279,7 +305,7 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
}
,
column: {
- key: 'total', name: 'total', color: function (idx) {
+ key: 'count_total', name: 'total', color: function (idx) {
return colors[idx % colors.length]
}
}
@@ -292,6 +318,103 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
});
};
+ var partnerTypesConfig = function (innerData,outerData) {
+ outerData = outerData||[];
+ var innerSeriesTemplate = {
+ name: '商户类别',
+ type: 'pie',
+ radius: outerData.length==0?'80%':'40%',
+ center: ['50%', '40%'],
+ selectedMode: 'single',
+ itemStyle: {
+ emphasis: {
+ shadowBlur: 10,
+ shadowOffsetX: 0,
+ shadowColor: 'rgba(0, 0, 0, 0.5)'
+ },
+ normal : {
+ label : {
+ position : 'inner'
+ },
+ labelLine : {
+ show : false
+ }
+ }
+ },
+ data:[]
+ };
+ angular.forEach(innerData,function (item) {
+ innerSeriesTemplate.data.push({
+ name:item.partner_type,
+ value:item.count_value,
+ selected:$scope.partners_type.partner_type===item.partner_type
+ })
+ });
+ var outerSeriesTemplate = {
+ name: '商户类别', type: 'pie',
+ radius : ['50%', '63%'],
+ center: ['50%', '40%'],
+ label: {
+ normal: {
+ formatter: '{b} : {c} ({d}%)'
+ }
+ },
+ itemStyle: {
+ emphasis: {
+ shadowBlur: 10,
+ shadowOffsetX: 0,
+ shadowColor: 'rgba(0, 0, 0, 0.5)'
+ }
+ },
+ data:[]
+ };
+ angular.forEach(outerData,function (item) {
+ outerSeriesTemplate.data.push({
+ name:item.children_partner_type,
+ value:item.partner_counts})
+ });
+ var series = [innerSeriesTemplate];
+ if(outerData.length){
+ series.push(outerSeriesTemplate)
+ }
+ return {
+ tooltip: {
+ trigger: 'item',
+ formatter: "{a}
{b} : {c} ({d}%)"
+ },
+ color: colors,
+ /* legend: {
+ orient: 'horizontal',
+ /!*y: '450px',
+ left: 'right',*!/
+ x: 'center',
+ y: 'bottom',
+ data: $scope.legends
+ },*/
+ series: series
+ }
+ };
+ $scope.partner_type_chart = function (chart) {
+ chart.on('click', function (params) {
+ childrenType(params.dataIndex);
+ $scope.partners_type_chart = partnerTypesConfig($scope.PartnerTypes,$scope.children);
+ try {
+ $scope.$digest();
+ }catch (err){}
+ });
+ };
+ var childrenType = function (index) {
+ $scope.partners_type = $scope.PartnerTypes[index];
+ $scope.children = $scope.partners_type.children;
+ for (var i = 0; i < $scope.children.length; i++) {
+ $scope.legends[i] = $scope.children.children_partner_type;
+ var children_partner_type= getType($scope.children[i].royalpayindustry);
+ $scope.children[i].children_partner_type = children_partner_type;
+ }
+ $scope.PartnerTypes[index].children = $scope.children;
+ /*$scope.type_count = $scope.PartnerTypes[index].count_value;*/
+ }
+
$scope.exportMonthSale = function () {
var params = angular.copy($scope.params);
if (params.begin_month) {
@@ -314,6 +437,36 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
return url;
}
+ $scope.exportExcelByBdOrDate = function (type) {
+ if (type=='data'){
+ url = '/analysis/bd/sales/partners/excel_data';
+ }
+ if (type=='bd'){
+ var url = '/analysis/bd/sales/partners/excel_bd';
+ }
+ var params = angular.copy($scope.params);
+ if (params.begin) {
+ params.begin = $filter('date')(params.begin, 'yyyyMMdd');
+ } else {
+ params.begin = $filter('date')('2016-01-01', 'yyyyMMdd');
+ }
+ if (params.end) {
+ params.end = $filter('date')(params.end, 'yyyyMMdd');
+ } else {
+ params.end = $filter('date')(new Date(), 'yyyyMMdd');
+ }
+ var connectSymbol = '?';
+ url += connectSymbol + 'begin=' + params.begin + '&' + 'end=' + params.end;
+ if (type=='bd') {
+ url += '&'+'bd_id=' + $scope.bd_id + '&'+ 'bd_name=' + $scope.chooseBdName;
+ }
+ if (params.org_id) {
+ url += '&' + 'org_id=' + params.org_id;
+ }
+ return url;
+ }
+
+
}]);
return app;
diff --git a/src/main/ui/static/analysis/templates/bd_sale_analysis.html b/src/main/ui/static/analysis/templates/bd_sale_analysis.html
index 09a1b4b4f..a071dd659 100644
--- a/src/main/ui/static/analysis/templates/bd_sale_analysis.html
+++ b/src/main/ui/static/analysis/templates/bd_sale_analysis.html
@@ -98,7 +98,7 @@