Upd:优化BD销量,合伙人交易量数据查询

Add:生成BD销量数据每日定时计算
master
duLingLing 5 years ago
parent 042c95fed1
commit 2aa3f072fe

@ -30,4 +30,10 @@ public interface BDAnalysisService {
* @return bd_id, bd_name, num
*/
List<JSONObject> approvedAnalysis(JSONObject params);
/**
* BD
* @param format
*/
void generateReport(String format);
}

@ -3,10 +3,13 @@ package au.com.royalpay.payment.manage.analysis.core.impls;
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.manage.mappers.log.StatisticsBDSalesReportMapper;
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.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
@ -18,8 +21,12 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* Created by yishuqian on 30/09/2016.
@ -30,24 +37,50 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
@Resource
private BDAnalysisMapper bdAnalysisMapper;
@Resource
private StatisticsBDSalesReportMapper bdSalesReportMapper;
@Override
public List<JSONObject> getSalesAnalysis(JSONObject jsonObject) {
return listSalesAnalysis(jsonObject);
}
private List<JSONObject> listSalesAnalysis(JSONObject jsonObject){
private List<JSONObject> listSalesAnalysis(JSONObject jsonObject) {
List<JSONObject> listCountApproved = bdAnalysisMapper.countApproved(jsonObject);
List<JSONObject> bdSaleList = bdAnalysisMapper.getBDSaleList(jsonObject);
for(JSONObject countApproved : listCountApproved){
for(JSONObject saleList : bdSaleList){
if(countApproved.getString("bd_id").equals(saleList.getString("bd_id"))){
saleList.put("num",countApproved.getString("num"));
List<JSONObject> bdSaleList = bdSalesReportMapper.getBDSaleList(jsonObject);
for (JSONObject countApproved : listCountApproved) {
for (JSONObject saleList : bdSaleList) {
if (countApproved.getString("bd_id").equals(saleList.getString("bd_id"))) {
saleList.put("num", countApproved.getString("num"));
}
}
}
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
if (sd.format(jsonObject.getDate("end")).equals(sd.format(DateUtils.addDays(new Date(), 1)))) {
jsonObject.put("begin", DateUtils.addDays(jsonObject.getDate("end"), -1));
// jsonObject.put("end", DateUtils.addDays(jsonObject.getDate("end"), -2));
jsonObject.put("end",jsonObject.getDate("end"));
List<JSONObject> todaySaleList = bdAnalysisMapper.getBDSaleList(jsonObject);
for (JSONObject todayBDSaleItem : todaySaleList) {
boolean flag = false;
for(JSONObject baSaleItem: bdSaleList){
if (baSaleItem.getString("bd_id").equals(todayBDSaleItem.getString("bd_id"))) {
BigDecimal newAmount = baSaleItem.getBigDecimal("total").add(todayBDSaleItem.getBigDecimal("total"));
baSaleItem.put("total",newAmount);
flag = true;
}
}
if (!flag) {
bdSaleList.add(todayBDSaleItem);
}
}
}
return bdSaleList;
}
//单独计算当日数据
@Override
public List<JSONObject> getSalesPartnersByBD(JSONObject jsonObject) {
@ -58,32 +91,32 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
public List<JSONObject> getSalesPartnersReportByBD(JSONObject jsonObject) {
List<JSONObject> bdAnalysis = bdAnalysisMapper.getBDSalePartnerReport(jsonObject);
List<JSONObject> 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);
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<JSONObject> getPartnerTypes(String keys[],List<JSONObject> result,int short_length,int long_length,List<JSONObject> bdAnalysis){
for(String key : keys){
private List<JSONObject> getPartnerTypes(String keys[], List<JSONObject> result, int short_length, int long_length, List<JSONObject> 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)){
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){
if (countValue == 0) {
continue;
}
object.put("count_value",countValue);
object.put("count_total",countTotal);
object.put("mccCode",key);
object.put("children",list);
object.put("count_value", countValue);
object.put("count_total", countTotal);
object.put("mccCode", key);
object.put("children", list);
result.add(object);
}
return result;
@ -92,7 +125,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
@Override
public void exportSalesExcel(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException {
httpResponse.setContentType("application/vnd.ms-excel");
String fileName = analysisBean.getBegin_month()+"~"+analysisBean.getEnd_month();
String fileName = analysisBean.getBegin_month() + "~" + analysisBean.getEnd_month();
// String fileName = new String(URLEncoder.encode(defaultname,"utf8"));
httpResponse.setHeader("Content-Disposition", "attachment;filename="
+ fileName + ".xls");
@ -113,20 +146,20 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
List<JSONObject> bds = bdAnalysisMapper.getBDSaleList(params);
HSSFWorkbook workbook = new HSSFWorkbook();
for (JSONObject bd:bds){
for (JSONObject bd : bds) {
String bd_id = bd.getString("bd_id");
String bd_name = bd.getString("bd_name");
JSONObject monthParams = new JSONObject();
monthParams.put("bd_id",bd_id);
monthParams.put("begin_month",analysisBean.getBegin_month());
monthParams.put("end_month",analysisBean.getEnd_month());
monthParams.put("bd_id", bd_id);
monthParams.put("begin_month", analysisBean.getBegin_month());
monthParams.put("end_month", analysisBean.getEnd_month());
List<JSONObject> monthTotalSale = bdAnalysisMapper.getMonthSalesList(monthParams);
for (JSONObject month:monthTotalSale){
monthParams.put("month",month.getString("y_m"));
List<JSONObject> clientsMonthSale = bdAnalysisMapper.getClientsMonthSale(bd_id,analysisBean.getBegin_month(),analysisBean.getEnd_month(),month.getString("y_m"));
month.put("clients",clientsMonthSale);
for (JSONObject month : monthTotalSale) {
monthParams.put("month", month.getString("y_m"));
List<JSONObject> clientsMonthSale = bdAnalysisMapper.getClientsMonthSale(bd_id, analysisBean.getBegin_month(), analysisBean.getEnd_month(), month.getString("y_m"));
month.put("clients", clientsMonthSale);
}
exportExcel(workbook,bd_name,monthTotalSale);
exportExcel(workbook, bd_name, monthTotalSale);
}
OutputStream outputStream = httpResponse.getOutputStream();
try {
@ -144,14 +177,52 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
return bdAnalysisMapper.countApproved(params);
}
/**
* BD
* @param date
*/
@Override
public void generateReport(String date) {
try {
Date beginTime = DateUtils.parseDate(date, new String[]{"yyyy-MM-dd"});
Date yesterdayEndTime = DateUtils.addDays(beginTime, 1);
String endDate = DateFormatUtils.format(yesterdayEndTime, "yyyy-MM-dd");
Date endTime = DateUtils.parseDate(endDate, new String[]{"yyyy-MM-dd"});
JSONObject params = new JSONObject();
params.put("begin", beginTime);
params.put("end", endTime);
List<JSONObject> bdSaleList = bdAnalysisMapper.getOneDayBDSaleList(params);
if (bdSaleList.size() != 0) {
for (JSONObject item : bdSaleList) {
JSONObject existBDSalesReport = bdSalesReportMapper.findByBDIdAndLogDate(item.getString("bd_id"),beginTime);
if(existBDSalesReport==null){
JSONObject object = new JSONObject(item);
object.put("log_id", UUID.randomUUID().toString());
object.put("log_date", beginTime);
object.put("create_time", new Date());
bdSalesReportMapper.save(object);
}else{
existBDSalesReport.put("pay_amount",item.getString("pay_amount"));
existBDSalesReport.put("refund_amount",item.getString("refund_amount"));
existBDSalesReport.put("net_amount",item.getString("net_amount"));
bdSalesReportMapper.update(existBDSalesReport);
}
}
}
} catch (ParseException e) {
e.printStackTrace();
}
}
@Override
public void exportPartnerExcelByBd(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException {
OutputStream ous = null;
try{
try {
JSONObject parmerters = analysisBean.toParams(null);
List<JSONObject> 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");
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();
@ -159,7 +230,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
font.setFontHeightInPoints((short) 15);
CellStyle analysisStyle = wb.createCellStyle();
analysisStyle.setFont(font);
Sheet sheet = wb.createSheet("Merchant list" );
Sheet sheet = wb.createSheet("Merchant list");
sheet.createFreezePane(1, 2);
sheet.setDefaultColumnWidth((short) 25);
int rowNum = 0;
@ -168,7 +239,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
for (int i = 0; i < title.length; i++) {
row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]);
}
for(JSONObject partner : listPartnerByBd){
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"));
@ -176,7 +247,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
}
wb.write(ous);
ous.flush();
}catch (IOException e){
} catch (IOException e) {
} finally {
IOUtils.closeQuietly(ous);
}
@ -186,7 +257,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
@Override
public void exportPartnerExcelByData(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException {
OutputStream ous = null;
try{
try {
JSONObject parmerters = analysisBean.toParams(null);
List<JSONObject> listPartnerByData = listSalesAnalysis(parmerters);
httpResponse.setContentType("application/octet-stream;");
@ -198,31 +269,31 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
font.setFontHeightInPoints((short) 15);
CellStyle analysisStyle = wb.createCellStyle();
analysisStyle.setFont(font);
Sheet sheet = wb.createSheet("Merchant Sale List" );
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"};
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){
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"));
row.createCell(3, Cell.CELL_TYPE_STRING).setCellValue(dataSale.getString("num") == null ? "0" : dataSale.getString("num"));
}
wb.write(ous);
ous.flush();
}catch (IOException e){
} catch (IOException e) {
} finally {
IOUtils.closeQuietly(ous);
}
}
private void exportExcel(HSSFWorkbook workbook,String title,List<JSONObject> monthTotalSale) {
private void exportExcel(HSSFWorkbook workbook, String title, List<JSONObject> monthTotalSale) {
// 声明一个工作薄
// 生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
@ -271,9 +342,9 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
// comment.setAuthor("leno");
//产生表格标题行
HSSFRow row0= sheet.createRow(0);
HSSFRow row1= sheet.createRow(1);
HSSFRow row2= sheet.createRow(2);
HSSFRow row0 = sheet.createRow(0);
HSSFRow row1 = sheet.createRow(1);
HSSFRow row2 = sheet.createRow(2);
HSSFCell cell00 = row0.createCell(0);
HSSFCell cell01 = row0.createCell(1);
HSSFCell cell20 = row2.createCell(0);
@ -294,15 +365,13 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
cell20.setCellValue(text20);
for (int i = 0; i < monthTotalSale.size(); i++) {
sheet.addMergedRegion(new CellRangeAddress(0,0,2*i+2,2*i+3));
HSSFCell cell02 = row0.createCell(i*2+2);
HSSFCell cell12 = row1.createCell(i*2+2);
HSSFCell cell13 = row1.createCell(i*2+3);
HSSFCell cell22 = row2.createCell(i*2+2);
HSSFCell cell23 = row2.createCell(i*2+3);
sheet.addMergedRegion(new CellRangeAddress(0, 0, 2 * i + 2, 2 * i + 3));
HSSFCell cell02 = row0.createCell(i * 2 + 2);
HSSFCell cell12 = row1.createCell(i * 2 + 2);
HSSFCell cell13 = row1.createCell(i * 2 + 3);
HSSFCell cell22 = row2.createCell(i * 2 + 2);
HSSFCell cell23 = row2.createCell(i * 2 + 3);
cell02.setCellStyle(style);
cell12.setCellStyle(style);
@ -314,19 +383,18 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
HSSFRichTextString text13 = new HSSFRichTextString("增长百分比");
HSSFRichTextString text22 = new HSSFRichTextString(monthTotalSale.get(i).getString("total"));
double rate = 0;
if (i>0){
BigDecimal lastTotal = monthTotalSale.get(i-1).getBigDecimal("total");
BigDecimal total = monthTotalSale.get(i).getBigDecimal("total");
if (lastTotal.compareTo(new BigDecimal(0))==0 && total.compareTo(new BigDecimal(0)) !=0){
rate=100;
}
else if (lastTotal.compareTo(new BigDecimal(0))==0 && total.compareTo(new BigDecimal(0)) ==0){
rate=0;
}else {
rate = total.subtract(lastTotal).multiply(new BigDecimal(100)).divide(lastTotal,2,BigDecimal.ROUND_DOWN).doubleValue();
}
if (i > 0) {
BigDecimal lastTotal = monthTotalSale.get(i - 1).getBigDecimal("total");
BigDecimal total = monthTotalSale.get(i).getBigDecimal("total");
if (lastTotal.compareTo(new BigDecimal(0)) == 0 && total.compareTo(new BigDecimal(0)) != 0) {
rate = 100;
} else if (lastTotal.compareTo(new BigDecimal(0)) == 0 && total.compareTo(new BigDecimal(0)) == 0) {
rate = 0;
} else {
rate = total.subtract(lastTotal).multiply(new BigDecimal(100)).divide(lastTotal, 2, BigDecimal.ROUND_DOWN).doubleValue();
}
}
HSSFRichTextString text23 = i==0?new HSSFRichTextString("-"):new HSSFRichTextString(String.valueOf(rate));
HSSFRichTextString text23 = i == 0 ? new HSSFRichTextString("-") : new HSSFRichTextString(String.valueOf(rate));
cell02.setCellValue(text0);
cell12.setCellValue(text12);
cell13.setCellValue(text13);
@ -335,35 +403,34 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
}
List<JSONObject> partnersSale = (List<JSONObject>) monthTotalSale.get(0).get("clients");
for (int m=0;m<partnersSale.size();m++){
HSSFRow row = sheet.createRow(m+3);
for (int m = 0; m < partnersSale.size(); m++) {
HSSFRow row = sheet.createRow(m + 3);
HSSFCell cell_client_name = row.createCell(0);
HSSFCell cell_approve_time = row.createCell(1);
cell_client_name.setCellStyle(style);
cell_approve_time.setCellStyle(style);
HSSFRichTextString text_client_name = new HSSFRichTextString(partnersSale.get(m).getString("short_name"));
HSSFRichTextString text_approve_time= new HSSFRichTextString(partnersSale.get(m).getString("approve_time"));
HSSFRichTextString text_approve_time = new HSSFRichTextString(partnersSale.get(m).getString("approve_time"));
cell_client_name.setCellValue(text_client_name);
cell_approve_time.setCellValue(text_approve_time);
for (int n = 0; n < monthTotalSale.size(); n++) {
List<JSONObject> clients = (List<JSONObject>) monthTotalSale.get(n).get("clients");
HSSFCell celli2 = row.createCell(n*2+2);
HSSFCell celli3 = row.createCell(n*2+3);
HSSFCell celli2 = row.createCell(n * 2 + 2);
HSSFCell celli3 = row.createCell(n * 2 + 3);
celli2.setCellStyle(style2);
celli3.setCellStyle(style2);
HSSFRichTextString texti2 = new HSSFRichTextString(clients.get(m).getString("month_total"));
double rate = 0;
if (n>0){
List<JSONObject> lastClients = (List<JSONObject>) monthTotalSale.get(n-1).get("clients");
if (n > 0) {
List<JSONObject> lastClients = (List<JSONObject>) monthTotalSale.get(n - 1).get("clients");
BigDecimal lastTotal = lastClients.get(m).getBigDecimal("month_total");
BigDecimal total = clients.get(m).getBigDecimal("month_total");
if (lastTotal.compareTo(new BigDecimal(0))==0 && total.compareTo(new BigDecimal(0)) !=0){
rate=100;
}
else if (lastTotal.compareTo(new BigDecimal(0))==0 && total.compareTo(new BigDecimal(0)) ==0){
rate=0;
}else {
rate = total.subtract(lastTotal).multiply(new BigDecimal(100)).divide(lastTotal,2,BigDecimal.ROUND_DOWN).doubleValue();
if (lastTotal.compareTo(new BigDecimal(0)) == 0 && total.compareTo(new BigDecimal(0)) != 0) {
rate = 100;
} else if (lastTotal.compareTo(new BigDecimal(0)) == 0 && total.compareTo(new BigDecimal(0)) == 0) {
rate = 0;
} else {
rate = total.subtract(lastTotal).multiply(new BigDecimal(100)).divide(lastTotal, 2, BigDecimal.ROUND_DOWN).doubleValue();
}
}
HSSFRichTextString texti3 = new HSSFRichTextString(String.valueOf(rate));

@ -1,12 +1,19 @@
package au.com.royalpay.payment.manage.analysis.core.impls;
import au.com.royalpay.payment.manage.analysis.core.OrgAnalysisService;
import au.com.royalpay.payment.manage.analysis.mappers.CustomerAndOrdersStatisticsMapper;
import au.com.royalpay.payment.manage.analysis.mappers.TransactionAnalysisMapper;
import au.com.royalpay.payment.manage.mappers.log.StatisticsBDSalesReportMapper;
import au.com.royalpay.payment.manage.organizations.core.OrgManager;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@ -17,14 +24,52 @@ public class OrgAnalysisServiceImp implements OrgAnalysisService {
@Resource
private TransactionAnalysisMapper transactionAnalysisMapper;
@Resource
private StatisticsBDSalesReportMapper statisticsBDSalesReportMapper;
@Resource
private OrgManager orgManager;
@Resource
private CustomerAndOrdersStatisticsMapper customerAndOrdersStatisticsMapper;
@Override
public List<JSONObject> getSalesAnalysis(JSONObject params,JSONObject manager) {
orgManager.checkOrgIds(manager,params);
List<JSONObject> OrgTransaction = transactionAnalysisMapper.getOrgTransactionAnalysis(params);
return OrgTransaction;
params.put("org_type",0);
List<JSONObject> OrgTransaction = statisticsBDSalesReportMapper.getPartnerAmountList(params);
List<JSONObject> newOrgTransaction = new ArrayList<>();
OrgTransaction.forEach(item->{
newOrgTransaction.add(new JSONObject(){{
put("org_id",item.getString("org_id"));
put("org_name",item.getString("org_name"));
put("amount",item.getString("clearing_amount"));
}}
);
});
//判断查询的最后一天是否是当日,若是当日,将当日数据添加至结果集内
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
if (sd.format(params.getDate("end")).equals(sd.format(DateUtils.addDays(new Date(), 1)))) {
params.put("begin", DateUtils.addDays(params.getDate("end"), -1));
params.put("end",params.getDate("end"));
List<JSONObject> todayOrgTransaction = transactionAnalysisMapper.getOrgTransactionAnalysis(params);
if(todayOrgTransaction.size()!=0){
for (JSONObject todayOrgTransactionItem : todayOrgTransaction) {
boolean flag = false;
for (JSONObject orgTransaction : newOrgTransaction) {
if (orgTransaction.getString("org_id").equals(todayOrgTransactionItem.getString("org_id"))) {
BigDecimal newAmount = orgTransaction.getBigDecimal("clearing_amount").add(todayOrgTransactionItem.getBigDecimal("amount"));
orgTransaction.put("amount", newAmount);
flag = true;
}
}
if (!flag) {
newOrgTransaction.add(todayOrgTransactionItem);
}
}
}
}
return newOrgTransaction;
}
@Override

@ -26,4 +26,7 @@ public interface BDAnalysisMapper {
List<JSONObject> countApproved(JSONObject params);
List<JSONObject> getBDSalePartnerReport(JSONObject jsonObject);
//获取指定一天销售数据
List<JSONObject> getOneDayBDSaleList(JSONObject params);
}

@ -0,0 +1,28 @@
package au.com.royalpay.payment.manage.dev.web;
import au.com.royalpay.payment.manage.analysis.core.BDAnalysisService;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@RestController
@RequestMapping("/analysis")
public class AnalysisController {
@Resource
private BDAnalysisService bdAnalysisService;
@GetMapping("/report/bd/sales")
public void reportDBSalesList(@RequestParam("date") String date) throws ParseException {
Date newDate = new SimpleDateFormat("yyyy-MM-dd").parse(date);
bdAnalysisService.generateReport(DateFormatUtils.format(newDate, "yyyy-MM-dd"));
}
}

@ -0,0 +1,29 @@
package au.com.royalpay.payment.manage.mappers.log;
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
* Created by dulingling on 2019-08-14
*/
@AutoMapper(tablename = "statistics_bd_sales", pkName = "log_id")
public interface StatisticsBDSalesReportMapper {
@AutoSql(type = SqlType.INSERT)
void save(JSONObject report);
List<JSONObject> getBDSaleList(JSONObject params);
List<JSONObject> getPartnerAmountList(JSONObject params);
JSONObject findByBDIdAndLogDate(@Param("bd_id") String bd_id, @Param("log_date")Date beginTime);
@AutoSql(type = SqlType.UPDATE)
void update(JSONObject existBDSalesReport);
}

@ -0,0 +1,34 @@
package au.com.royalpay.payment.manage.task;
import au.com.royalpay.payment.manage.analysis.core.BDAnalysisService;
import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
/**
* Created by dulingling on 2019-08-14
*/
@Component
@ConditionalOnProperty(value = "app.run-tasks", havingValue = "true")
public class DBSaleAnalysisTask {
@Resource
private SynchronizedScheduler synchronizedScheduler;
@Resource
private BDAnalysisService bdAnalysisService;
@Scheduled(cron = "0 0 10 * * ?")
public void dailyReportAutoGenerateReport() {
synchronizedScheduler.executeProcess("manage_task:dailyReportAutoGenerateReport", 120_000, () -> {
Date yesterday = DateUtils.addDays(new Date(), -1);
bdAnalysisService.generateReport(DateFormatUtils.format(yesterday, "yyyy-MM-dd"));
});
}
}

@ -3,67 +3,41 @@
<mapper namespace="au.com.royalpay.payment.manage.analysis.mappers.BDAnalysisMapper">
<select id="getBDSaleList" resultType="com.alibaba.fastjson.JSONObject">
SELECT
d.bd_name,
d.bd_id,
SUM(if(temp.transaction_type = 'Credit', temp.clearing_amount * d.proportion, -temp.clearing_amount * d.proportion)) total,
ifnull(SUM(if(temp.refund_id IS NOT NULL, if(temp.transaction_type='Debit', temp.clearing_amount, -temp.clearing_amount) * d.proportion, 0)), 0) refund_fee
clinetBD.bd_name,
clinetBD.bd_id,
SUM(if(temp.transaction_type = 'Credit', temp.clearing_amount * clinetBD.proportion, -temp.clearing_amount * clinetBD.proportion)) total,
ifnull(SUM(if(temp.refund_id IS NOT NULL, if(temp.transaction_type='Debit', temp.clearing_amount, -temp.clearing_amount) * clinetBD.proportion, 0)), 0) refund_fee
FROM(
SELECT
l.client_id,
l.clearing_amount,
l.refund_id,
l.transaction_type,
l.create_time
FROM pmt_transactions l
INNER JOIN pmt_orders o
ON o.order_id = l.order_id
SELECT
trans.client_id,
trans.clearing_amount,
trans.refund_id,
trans.transaction_type,
trans.create_time
FROM pmt_transactions AS trans
WHERE (trans.transaction_type = 'Credit' OR trans.refund_id IS NOT NULL)
AND trans.system_generate = 0
AND trans.channel !='Settlement'
<if test="begin != null">
AND l.create_time &gt;= #{begin}
AND trans.create_time &gt;= #{begin}
</if>
<if test="end != null">
AND l.create_time &lt; #{end}
</if>
<if test="begin_month">
AND DATE_FORMAT(l.create_time, '%Y-%m') &gt;= #{begin_month}
AND trans.create_time &lt; #{end}
</if>
<if test="end_month">
AND DATE_FORMAT(l.create_time, '%Y-%m') &lt;= #{end_month}
</if>
WHERE (l.transaction_type = 'Credit' OR l.refund_id IS NOT NULL)
) temp
INNER JOIN sys_client_bd d
ON temp.client_id = d.client_id
AND d.start_date &lt;= temp.create_time
AND d.is_valid = '1'
AND (d.end_date IS NULL OR d.end_date > temp.create_time)
<if test="org_id != null and org_ids == null">
INNER JOIN sys_managers m
ON m.manager_id = d.bd_id
AND m.org_id = #{org_id}
</if>
<if test="org_ids != null">
INNER JOIN sys_managers m
ON m.manager_id = d.bd_id
AND m.org_id IN
<foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">
#{org_id}
</foreach></if>
<if test="bd_group != null">
AND temp.client_id IN(
SELECT b.client_id
FROM sys_client_bd b
INNER JOIN financial_bd_config c
ON c.manager_id = b.bd_id
WHERE b.is_valid = 1
AND b.start_date &lt;= now()
AND (b.end_date IS NULL OR b.end_date &gt;= now())
AND (c.bd_group = #{bd_group} OR c.manager_id = #{bd_group})
<if test="bd_group_bd">
AND c.manager_id = #{bd_group_bd}
</if>
)
) AS temp
INNER JOIN sys_client_bd AS clinetBD
ON temp.client_id = clinetBD.client_id
AND clinetBD.start_date &lt;= temp.create_time
AND clinetBD.is_valid = '1'
AND (clinetBD.end_date IS NULL OR clinetBD.end_date > temp.create_time)
INNER JOIN sys_managers AS manage
ON manage.manager_id = clinetBD.bd_id
<if test="org_id != null">
AND manage.org_id = #{org_id}
</if>
GROUP BY d.bd_id
GROUP BY clinetBD.bd_id
ORDER BY total DESC
</select>
@ -179,11 +153,11 @@
where client_id in(select client_id from sys_clients c where c.approve_time >= #{begin} AND c.approve_time < #{end} AND c.is_valid = 1 AND c.approve_result = 1
]]>
<if test="org_id!=null and org_ids==null">and c.org_id=#{org_id}</if>
<if test="org_ids!=null">and c.org_id in
<foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">#{org_id}</foreach></if>
<if test="source==1">and c.source=1</if>
<if test="source==2">and c.source!=1</if>
<if test="org_id!=null and org_ids==null">and c.org_id=#{org_id}</if>
<if test="org_ids!=null">and c.org_id in
<foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">#{org_id}</foreach></if>
<if test="source==1">and c.source=1</if>
<if test="source==2">and c.source!=1</if>
<![CDATA[
)
@ -195,8 +169,8 @@
on a.bd_id = b.bd_id and a.create_time = b.create_time
where a.is_valid = 1
]]>
group by bd_id
order by num desc
group by bd_id
order by num desc
</select>
<select id="getBDSalePartnerReport" resultType="com.alibaba.fastjson.JSONObject">
SELECT c.industry,c.royalpayindustry,
@ -220,4 +194,54 @@
ORDER BY partner_counts DESC;
</select>
<select id="getOneDayBDSaleList" resultType="com.alibaba.fastjson.JSONObject">
SELECT
clinetBD.bd_name,
clinetBD.bd_id,
manage.org_id,
org.type AS org_type,
org.name AS org_name,
if(org.org_id=1,1,0) AS isOrg,
SUM( IF ( temp.transaction_type = 'Credit', temp.clearing_amount, 0 )) clearing_amount,
SUM(if(temp.transaction_type = 'Credit',temp.clearing_amount * clinetBD.proportion, -temp.clearing_amount * clinetBD.proportion)) pay_amount,
ifnull(SUM(if(temp.refund_id IS NOT NULL, if(temp.transaction_type='Debit', temp.clearing_amount, -temp.clearing_amount) * clinetBD.proportion, 0)), 0) refund_amount,
(SUM(if(temp.transaction_type = 'Credit', temp.clearing_amount * clinetBD.proportion, -temp.clearing_amount * clinetBD.proportion))) - (ifnull(SUM(if(temp.refund_id IS NOT NULL, if(temp.transaction_type='Debit', temp.clearing_amount, -temp.clearing_amount) * clinetBD.proportion, 0)), 0)) AS net_amount
FROM(
SELECT
trans.client_id,
trans.clearing_amount,
trans.refund_id,
trans.transaction_type,
trans.create_time
FROM pmt_transactions AS trans
WHERE (trans.transaction_type = 'Credit' OR trans.refund_id IS NOT NULL)
AND trans.system_generate = 0
AND trans.channel !='Settlement'
<if test="begin != null">
AND trans.create_time &gt;= #{begin}
</if>
<if test="end != null">
AND trans.create_time &lt; #{end}
</if>
)
AS temp
INNER JOIN sys_client_bd AS clinetBD
ON temp.client_id = clinetBD.client_id
AND clinetBD.start_date &lt;= temp.create_time
AND clinetBD.is_valid = '1'
AND (clinetBD.end_date IS NULL OR clinetBD.end_date > temp.create_time)
INNER JOIN sys_managers AS manage
ON manage.manager_id = clinetBD.bd_id
AND manage.org_id IS NOT NULL
INNER JOIN sys_org AS org
ON org.org_id = manage.org_id
<if test="org_id != null">
AND manage.org_id = #{org_id}
</if>
GROUP BY clinetBD.bd_id
ORDER BY pay_amount DESC
</select>
</mapper>

@ -716,20 +716,37 @@
<select id="getOrgTransactionAnalysis" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT o.org_id, o.name org_name,sum(if(t.transaction_type='Credit',t.clearing_amount,0)) amount
FROM pmt_transactions t
INNER JOIN pmt_orders ord on ord.order_id = t.order_id
RIGHT JOIN sys_clients c on t.client_id = c.client_id and c.is_valid = 1
RIGHT JOIN sys_org o on o.org_id = c.org_id and o.org_id != 1 and o.type=0
where (t.transaction_type = 'Credit' or t.refund_id is not null)
SELECT
org.org_id,
org.name org_name,
SUM(if(trans.transaction_type='Credit',trans.clearing_amount,0)) AS amount
FROM pmt_transactions AS trans
RIGHT JOIN sys_clients AS clinet
ON trans.client_id = clinet.client_id
AND clinet.is_valid = 1
RIGHT JOIN sys_org org
ON org.org_id = clinet.org_id
AND org.org_id != 1
AND org.type=0
WHERE trans.system_generate=0
AND trans.channel !='Settlement'
AND( trans.transaction_type = 'Credit' OR trans.refund_id IS NOT NULL )
]]>
<if test="begin!=null">and t.transaction_time &gt;= #{begin}</if>
<if test="end!=null">and t.transaction_time &lt;= #{end}</if>
<if test="org_id!=null and org_ids==null">and o.org_id=#{org_id}</if>
<if test="org_ids!=null">and o.org_id in
<if test="begin!=null">
AND trans.transaction_time &gt;= #{begin}
</if>
<if test="end!=null">
AND trans.transaction_time &lt;= #{end}
</if>
<if test="org_id!=null and org_ids==null">
AND org.org_id=#{org_id}
</if>
<if test="org_ids!=null">
AND org.org_id in
<foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">#{org_id}</foreach>
</if>
GROUP BY o.org_id order by amount desc
GROUP BY org.org_id
ORDER BY amount DESC
</select>
<select id="getPartnersAmountByOrg" resultType="com.alibaba.fastjson.JSONObject">

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="au.com.royalpay.payment.manage.mappers.log.StatisticsBDSalesReportMapper">
<select id="getBDSaleList" resultType="com.alibaba.fastjson.JSONObject">
SELECT
bd_id,
bd_name,
org_id,
org_name,
SUM(pay_amount) AS total,
SUM(refund_amount) AS refund_fee
FROM statistics_bd_sales
<where>
<if test="org_id != null">
AND org_id = #{org_id}
</if>
<if test="org_type != null">
AND org_type = #{org_type}
</if>
<if test="begin != null">
AND log_date &gt;= #{begin}
</if>
<if test="end != null">
AND log_date &lt; #{end}
</if>
<if test="org_ids!=null">
AND org.org_id in
<foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">#{org_id}</foreach>
</if>
</where>
GROUP BY bd_id
ORDER BY total DESC
</select>
<select id="getPartnerAmountList" resultType="com.alibaba.fastjson.JSONObject">
SELECT
bd_id,
bd_name,
org_id,
org_name,
SUM(clearing_amount) AS clearing_amount,
SUM(pay_amount) AS total,
SUM(refund_amount) AS refund_fee
FROM statistics_bd_sales
WHERE org_id !=1
<if test="org_id != null">
AND org_id = #{org_id}
</if>
<if test="org_type != null">
AND org_type = #{org_type}
</if>
<if test="begin != null">
AND log_date &gt;= #{begin}
</if>
<if test="end != null">
AND log_date &lt; #{end}
</if>
<if test="org_ids!=null">
AND org_id in
<foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">#{org_id}</foreach>
</if>
GROUP BY bd_id
ORDER BY total DESC
</select>
<select id="findByBDIdAndLogDate" resultType="com.alibaba.fastjson.JSONObject">
SELECT
log_id,
org_id,
isOrg,
org_name,
org_type,
bd_id,
bd_name,
log_date,
pay_amount,
refund_amount,
net_amount,
create_time,
clearing_amount
FROM statistics_bd_sales
WHERE bd_id = #{bd_id} AND log_date = #{log_date}
</select>
</mapper>

@ -76,7 +76,6 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
};
$scope.loadSale = function () {
var params = angular.copy($scope.params);
if (params.begin) {
params.begin = $filter('date')(params.begin, 'yyyyMMdd');
@ -88,6 +87,7 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts', './bd/analysis-b
} else {
params.end = $filter('date')(new Date(), 'yyyyMMdd');
}
params.org_id =1;
$http.get('/analysis/bd/sales', {params: params}).then(function (resp) {
$scope.sales = resp.data;
loadSaleChart();

@ -59,6 +59,7 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts','./org/analysis-o
$scope.showOrg = 'Organization';
$http.get('/sys/orgs', {params: {}}).then(function (resp) {
$scope.orgs = resp.data;
$scope.orgs.splice($scope.orgs.findIndex(item => item.org_id === 1), 1)
});
}
@ -98,6 +99,7 @@ define(['angular', 'uiBootstrap', 'uiRouter', 'angularEcharts','./org/analysis-o
$scope.future_loading = false;
});
};
$scope.chooseToday()
$scope.chooseOrgId = function (org) {
if (org == 'all') {
delete $scope.params.org_id;

@ -68,19 +68,6 @@
<a role="button" class="btn btn-default btn-sm"
ng-click="thisYear()">This Year</a>
</div>
<div uib-dropdown ng-if="orgs" class="btn-group">
<button id="single-button" type="button" class="btn btn-default"
uib-dropdown-toggle ng-disabled="disabled">
{{showOrg}} <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu
aria-labelledby="single-button">
<li><a ng-click="chooseOrg('all')">All</a></li>
<li ng-repeat="org in orgs"><a ng-click="chooseOrg(org)">{{org.name}}</a>
</li>
</ul>
</div>
<button class="btn btn-success" type="button" ng-click="loadSale()">
<i class="fa fa-search"></i>
</button>

@ -60,10 +60,6 @@
<a role="button" class="btn btn-default btn-sm" ng-click="lastMonth()">Last
Month</a>
</div>
<div class="btn-group">
<a role="button" class="btn btn-default btn-sm" ng-click="thisYear()">This
Year</a>
</div>
<div uib-dropdown ng-if="orgs" class="btn-group">
<button id="single-button" type="button" class="btn btn-default"
uib-dropdown-toggle ng-disabled="disabled">

@ -0,0 +1,28 @@
package au.com.royalpay.payment.manage.task;
import au.com.royalpay.payment.manage.analysis.core.BDAnalysisService;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.Date;
@SpringBootTest
@RunWith(SpringRunner.class)
public class DBAnalysisTaskTest {
@Resource
private BDAnalysisService bdAnalysisService;
@Test
public void test(){
for (int i = 1;i<=365;i++){
Date yesterday = DateUtils.addDays(new Date(), -i);
bdAnalysisService.generateReport(DateFormatUtils.format(yesterday, "yyyy-MM-dd"));
}
}
}
Loading…
Cancel
Save