Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java
master
luoyang 5 years ago
commit f34a17e25c

@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>manage</artifactId> <artifactId>manage</artifactId>
<version>1.1.15</version> <version>1.1.30</version>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

@ -721,4 +721,6 @@ ADD INDEX `report_id` (`report_id`) USING HASH ;
update pmt_custom_reports set report_serial=uuid(); update pmt_custom_reports set report_serial=uuid();
alter pmt_custom_reports add PRIMARY key (report_serial); alter pmt_custom_reports add PRIMARY key (report_serial);
alter table sys_org add COLUMN `state` varchar(20) DEFAULT NULL COMMENT '州 (使用标准码 NSW,QLD,WA,VIC,ACT,NT,TAS,SA)'; alter table sys_org add COLUMN `state` varchar(20) DEFAULT NULL COMMENT '州 (使用标准码 NSW,QLD,WA,VIC,ACT,NT,TAS,SA)';
INSERT INTO `royalpay`.`sys_configs`(`config_key`, `config_value`, `config_desc`) VALUES ('rick_interior_send_email', 'dll19920503@qq.com', '内部调用测试发送邮箱');

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

@ -3,14 +3,19 @@ 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.beans.AnalysisBean;
import au.com.royalpay.payment.manage.analysis.core.BDAnalysisService; import au.com.royalpay.payment.manage.analysis.core.BDAnalysisService;
import au.com.royalpay.payment.manage.analysis.mappers.BDAnalysisMapper; import au.com.royalpay.payment.manage.analysis.mappers.BDAnalysisMapper;
import au.com.royalpay.payment.manage.analysis.mappers.TransactionAnalysisMapper;
import au.com.royalpay.payment.manage.mappers.log.StatisticsBDSalesReportMapper;
import au.com.royalpay.payment.tools.permission.enums.ManagerRole; import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.IOUtils; 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.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -18,8 +23,12 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.UUID;
/** /**
* Created by yishuqian on 30/09/2016. * Created by yishuqian on 30/09/2016.
@ -30,24 +39,52 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
@Resource @Resource
private BDAnalysisMapper bdAnalysisMapper; private BDAnalysisMapper bdAnalysisMapper;
@Resource
private StatisticsBDSalesReportMapper bdSalesReportMapper;
@Resource
private TransactionAnalysisMapper transactionAnalysisMapper;
@Override @Override
public List<JSONObject> getSalesAnalysis(JSONObject jsonObject) { public List<JSONObject> getSalesAnalysis(JSONObject jsonObject) {
return listSalesAnalysis(jsonObject); return listSalesAnalysis(jsonObject);
} }
private List<JSONObject> listSalesAnalysis(JSONObject jsonObject){ private List<JSONObject> listSalesAnalysis(JSONObject jsonObject) {
List<JSONObject> listCountApproved = bdAnalysisMapper.countApproved(jsonObject); List<JSONObject> listCountApproved = bdAnalysisMapper.countApproved(jsonObject);
List<JSONObject> bdSaleList = bdAnalysisMapper.getBDSaleList(jsonObject); List<JSONObject> bdSaleList = bdSalesReportMapper.getBDSaleList(jsonObject);
for(JSONObject countApproved : listCountApproved){ for (JSONObject countApproved : listCountApproved) {
for(JSONObject saleList : bdSaleList){ for (JSONObject saleList : bdSaleList) {
if(countApproved.getString("bd_id").equals(saleList.getString("bd_id"))){ if (countApproved.getString("bd_id").equals(saleList.getString("bd_id"))) {
saleList.put("num",countApproved.getString("num")); 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",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; return bdSaleList;
} }
//单独计算当日数据
@Override @Override
public List<JSONObject> getSalesPartnersByBD(JSONObject jsonObject) { public List<JSONObject> getSalesPartnersByBD(JSONObject jsonObject) {
@ -58,32 +95,32 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
public List<JSONObject> getSalesPartnersReportByBD(JSONObject jsonObject) { public List<JSONObject> getSalesPartnersReportByBD(JSONObject jsonObject) {
List<JSONObject> bdAnalysis = bdAnalysisMapper.getBDSalePartnerReport(jsonObject); List<JSONObject> bdAnalysis = bdAnalysisMapper.getBDSalePartnerReport(jsonObject);
List<JSONObject> result = new ArrayList<>(); List<JSONObject> result = new ArrayList<>();
String keys_1[] = {"1","2","3","4","5","6","7","8","9"}; String keys_1[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
String key_2[] = {"10","11","12"}; String key_2[] = {"10", "11", "12"};
result = getPartnerTypes(keys_1,result,1,5,bdAnalysis); result = getPartnerTypes(keys_1, result, 1, 5, bdAnalysis);
return getPartnerTypes(key_2,result,2,6,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){ private List<JSONObject> getPartnerTypes(String keys[], List<JSONObject> result, int short_length, int long_length, List<JSONObject> bdAnalysis) {
for(String key : keys){ for (String key : keys) {
int countValue = 0; int countValue = 0;
int countTotal = 0; int countTotal = 0;
JSONObject object = new JSONObject(); JSONObject object = new JSONObject();
JSONArray list = new JSONArray(); JSONArray list = new JSONArray();
for(JSONObject type : bdAnalysis){ 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)){ 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"); countValue += type.getIntValue("partner_counts");
countTotal += type.getIntValue("total"); countTotal += type.getIntValue("total");
list.add(type); list.add(type);
} }
} }
if(countValue == 0){ if (countValue == 0) {
continue; continue;
} }
object.put("count_value",countValue); object.put("count_value", countValue);
object.put("count_total",countTotal); object.put("count_total", countTotal);
object.put("mccCode",key); object.put("mccCode", key);
object.put("children",list); object.put("children", list);
result.add(object); result.add(object);
} }
return result; return result;
@ -92,7 +129,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
@Override @Override
public void exportSalesExcel(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException { public void exportSalesExcel(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException {
httpResponse.setContentType("application/vnd.ms-excel"); 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")); // String fileName = new String(URLEncoder.encode(defaultname,"utf8"));
httpResponse.setHeader("Content-Disposition", "attachment;filename=" httpResponse.setHeader("Content-Disposition", "attachment;filename="
+ fileName + ".xls"); + fileName + ".xls");
@ -113,20 +150,20 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
List<JSONObject> bds = bdAnalysisMapper.getBDSaleList(params); List<JSONObject> bds = bdAnalysisMapper.getBDSaleList(params);
HSSFWorkbook workbook = new HSSFWorkbook(); HSSFWorkbook workbook = new HSSFWorkbook();
for (JSONObject bd:bds){ for (JSONObject bd : bds) {
String bd_id = bd.getString("bd_id"); String bd_id = bd.getString("bd_id");
String bd_name = bd.getString("bd_name"); String bd_name = bd.getString("bd_name");
JSONObject monthParams = new JSONObject(); JSONObject monthParams = new JSONObject();
monthParams.put("bd_id",bd_id); monthParams.put("bd_id", bd_id);
monthParams.put("begin_month",analysisBean.getBegin_month()); monthParams.put("begin_month", analysisBean.getBegin_month());
monthParams.put("end_month",analysisBean.getEnd_month()); monthParams.put("end_month", analysisBean.getEnd_month());
List<JSONObject> monthTotalSale = bdAnalysisMapper.getMonthSalesList(monthParams); List<JSONObject> monthTotalSale = bdAnalysisMapper.getMonthSalesList(monthParams);
for (JSONObject month:monthTotalSale){ for (JSONObject month : monthTotalSale) {
monthParams.put("month",month.getString("y_m")); monthParams.put("month", month.getString("y_m"));
List<JSONObject> clientsMonthSale = bdAnalysisMapper.getClientsMonthSale(bd_id,analysisBean.getBegin_month(),analysisBean.getEnd_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); month.put("clients", clientsMonthSale);
} }
exportExcel(workbook,bd_name,monthTotalSale); exportExcel(workbook, bd_name, monthTotalSale);
} }
OutputStream outputStream = httpResponse.getOutputStream(); OutputStream outputStream = httpResponse.getOutputStream();
try { try {
@ -144,14 +181,70 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
return bdAnalysisMapper.countApproved(params); 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,0);
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);
}
}
}
List<JSONObject> orgSaleList= transactionAnalysisMapper.getOneDayOrgMerchantSaleList(params);
if (orgSaleList.size() != 0) {
for (JSONObject item : orgSaleList) {
JSONObject existOrgSalesReport = bdSalesReportMapper.findByBDIdAndLogDate(item.getString("bd_id"),beginTime,1);
if(existOrgSalesReport==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{
existOrgSalesReport.put("pay_amount",item.getString("pay_amount"));
existOrgSalesReport.put("refund_amount",item.getString("refund_amount"));
existOrgSalesReport.put("net_amount",item.getString("net_amount"));
bdSalesReportMapper.update(existOrgSalesReport);
}
}
}
} catch (ParseException e) {
e.printStackTrace();
}
}
@Override @Override
public void exportPartnerExcelByBd(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException { public void exportPartnerExcelByBd(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException {
OutputStream ous = null; OutputStream ous = null;
try{ try {
JSONObject parmerters = analysisBean.toParams(null); JSONObject parmerters = analysisBean.toParams(null);
List<JSONObject> listPartnerByBd = bdAnalysisMapper.getBDSalePartnerList(parmerters); List<JSONObject> listPartnerByBd = bdAnalysisMapper.getBDSalePartnerList(parmerters);
httpResponse.setContentType("application/octet-stream;"); 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(); ous = httpResponse.getOutputStream();
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFFont font = wb.createFont(); HSSFFont font = wb.createFont();
@ -159,7 +252,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
font.setFontHeightInPoints((short) 15); font.setFontHeightInPoints((short) 15);
CellStyle analysisStyle = wb.createCellStyle(); CellStyle analysisStyle = wb.createCellStyle();
analysisStyle.setFont(font); analysisStyle.setFont(font);
Sheet sheet = wb.createSheet("Merchant list" ); Sheet sheet = wb.createSheet("Merchant list");
sheet.createFreezePane(1, 2); sheet.createFreezePane(1, 2);
sheet.setDefaultColumnWidth((short) 25); sheet.setDefaultColumnWidth((short) 25);
int rowNum = 0; int rowNum = 0;
@ -168,7 +261,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
for (int i = 0; i < title.length; i++) { for (int i = 0; i < title.length; i++) {
row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]); row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]);
} }
for(JSONObject partner : listPartnerByBd){ for (JSONObject partner : listPartnerByBd) {
row = sheet.createRow(++rowNum); row = sheet.createRow(++rowNum);
row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("short_name")); 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(1, Cell.CELL_TYPE_STRING).setCellValue(partner.getString("client_moniker"));
@ -176,7 +269,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
} }
wb.write(ous); wb.write(ous);
ous.flush(); ous.flush();
}catch (IOException e){ } catch (IOException e) {
} finally { } finally {
IOUtils.closeQuietly(ous); IOUtils.closeQuietly(ous);
} }
@ -186,7 +279,7 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
@Override @Override
public void exportPartnerExcelByData(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException { public void exportPartnerExcelByData(AnalysisBean analysisBean, HttpServletResponse httpResponse, JSONObject manager) throws IOException {
OutputStream ous = null; OutputStream ous = null;
try{ try {
JSONObject parmerters = analysisBean.toParams(null); JSONObject parmerters = analysisBean.toParams(null);
List<JSONObject> listPartnerByData = listSalesAnalysis(parmerters); List<JSONObject> listPartnerByData = listSalesAnalysis(parmerters);
httpResponse.setContentType("application/octet-stream;"); httpResponse.setContentType("application/octet-stream;");
@ -198,31 +291,31 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
font.setFontHeightInPoints((short) 15); font.setFontHeightInPoints((short) 15);
CellStyle analysisStyle = wb.createCellStyle(); CellStyle analysisStyle = wb.createCellStyle();
analysisStyle.setFont(font); analysisStyle.setFont(font);
Sheet sheet = wb.createSheet("Merchant Sale List" ); Sheet sheet = wb.createSheet("Merchant Sale List");
sheet.createFreezePane(1, 2); sheet.createFreezePane(1, 2);
sheet.setDefaultColumnWidth((short) 25); sheet.setDefaultColumnWidth((short) 25);
int rowNum = 0; int rowNum = 0;
Row row = sheet.createRow(rowNum); 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++) { for (int i = 0; i < title.length; i++) {
row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]); row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(title[i]);
} }
for(JSONObject dataSale : listPartnerByData){ for (JSONObject dataSale : listPartnerByData) {
row = sheet.createRow(++rowNum); row = sheet.createRow(++rowNum);
row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(dataSale.getString("bd_name")); 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(1, Cell.CELL_TYPE_STRING).setCellValue(dataSale.getString("total"));
row.createCell(2, Cell.CELL_TYPE_STRING).setCellValue(dataSale.getString("refund_fee")); 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); wb.write(ous);
ous.flush(); ous.flush();
}catch (IOException e){ } catch (IOException e) {
} finally { } finally {
IOUtils.closeQuietly(ous); 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); HSSFSheet sheet = workbook.createSheet(title);
@ -271,9 +364,9 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
// comment.setAuthor("leno"); // comment.setAuthor("leno");
//产生表格标题行 //产生表格标题行
HSSFRow row0= sheet.createRow(0); HSSFRow row0 = sheet.createRow(0);
HSSFRow row1= sheet.createRow(1); HSSFRow row1 = sheet.createRow(1);
HSSFRow row2= sheet.createRow(2); HSSFRow row2 = sheet.createRow(2);
HSSFCell cell00 = row0.createCell(0); HSSFCell cell00 = row0.createCell(0);
HSSFCell cell01 = row0.createCell(1); HSSFCell cell01 = row0.createCell(1);
HSSFCell cell20 = row2.createCell(0); HSSFCell cell20 = row2.createCell(0);
@ -294,15 +387,13 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
cell20.setCellValue(text20); cell20.setCellValue(text20);
for (int i = 0; i < monthTotalSale.size(); i++) { for (int i = 0; i < monthTotalSale.size(); i++) {
sheet.addMergedRegion(new CellRangeAddress(0,0,2*i+2,2*i+3)); sheet.addMergedRegion(new CellRangeAddress(0, 0, 2 * i + 2, 2 * i + 3));
HSSFCell cell02 = row0.createCell(i*2+2); HSSFCell cell02 = row0.createCell(i * 2 + 2);
HSSFCell cell12 = row1.createCell(i*2+2); HSSFCell cell12 = row1.createCell(i * 2 + 2);
HSSFCell cell13 = row1.createCell(i*2+3); HSSFCell cell13 = row1.createCell(i * 2 + 3);
HSSFCell cell22 = row2.createCell(i*2+2); HSSFCell cell22 = row2.createCell(i * 2 + 2);
HSSFCell cell23 = row2.createCell(i*2+3); HSSFCell cell23 = row2.createCell(i * 2 + 3);
cell02.setCellStyle(style); cell02.setCellStyle(style);
cell12.setCellStyle(style); cell12.setCellStyle(style);
@ -314,19 +405,18 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
HSSFRichTextString text13 = new HSSFRichTextString("增长百分比"); HSSFRichTextString text13 = new HSSFRichTextString("增长百分比");
HSSFRichTextString text22 = new HSSFRichTextString(monthTotalSale.get(i).getString("total")); HSSFRichTextString text22 = new HSSFRichTextString(monthTotalSale.get(i).getString("total"));
double rate = 0; double rate = 0;
if (i>0){ if (i > 0) {
BigDecimal lastTotal = monthTotalSale.get(i-1).getBigDecimal("total"); BigDecimal lastTotal = monthTotalSale.get(i - 1).getBigDecimal("total");
BigDecimal total = monthTotalSale.get(i).getBigDecimal("total"); BigDecimal total = monthTotalSale.get(i).getBigDecimal("total");
if (lastTotal.compareTo(new BigDecimal(0))==0 && total.compareTo(new BigDecimal(0)) !=0){ if (lastTotal.compareTo(new BigDecimal(0)) == 0 && total.compareTo(new BigDecimal(0)) != 0) {
rate=100; rate = 100;
} } else if (lastTotal.compareTo(new BigDecimal(0)) == 0 && total.compareTo(new BigDecimal(0)) == 0) {
else if (lastTotal.compareTo(new BigDecimal(0))==0 && total.compareTo(new BigDecimal(0)) ==0){ rate = 0;
rate=0; } else {
}else { rate = total.subtract(lastTotal).multiply(new BigDecimal(100)).divide(lastTotal, 2, BigDecimal.ROUND_DOWN).doubleValue();
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); cell02.setCellValue(text0);
cell12.setCellValue(text12); cell12.setCellValue(text12);
cell13.setCellValue(text13); cell13.setCellValue(text13);
@ -335,35 +425,34 @@ public class BDAnalysisServiceImpl implements BDAnalysisService {
} }
List<JSONObject> partnersSale = (List<JSONObject>) monthTotalSale.get(0).get("clients"); List<JSONObject> partnersSale = (List<JSONObject>) monthTotalSale.get(0).get("clients");
for (int m=0;m<partnersSale.size();m++){ for (int m = 0; m < partnersSale.size(); m++) {
HSSFRow row = sheet.createRow(m+3); HSSFRow row = sheet.createRow(m + 3);
HSSFCell cell_client_name = row.createCell(0); HSSFCell cell_client_name = row.createCell(0);
HSSFCell cell_approve_time = row.createCell(1); HSSFCell cell_approve_time = row.createCell(1);
cell_client_name.setCellStyle(style); cell_client_name.setCellStyle(style);
cell_approve_time.setCellStyle(style); cell_approve_time.setCellStyle(style);
HSSFRichTextString text_client_name = new HSSFRichTextString(partnersSale.get(m).getString("short_name")); 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_client_name.setCellValue(text_client_name);
cell_approve_time.setCellValue(text_approve_time); cell_approve_time.setCellValue(text_approve_time);
for (int n = 0; n < monthTotalSale.size(); n++) { for (int n = 0; n < monthTotalSale.size(); n++) {
List<JSONObject> clients = (List<JSONObject>) monthTotalSale.get(n).get("clients"); List<JSONObject> clients = (List<JSONObject>) monthTotalSale.get(n).get("clients");
HSSFCell celli2 = row.createCell(n*2+2); HSSFCell celli2 = row.createCell(n * 2 + 2);
HSSFCell celli3 = row.createCell(n*2+3); HSSFCell celli3 = row.createCell(n * 2 + 3);
celli2.setCellStyle(style2); celli2.setCellStyle(style2);
celli3.setCellStyle(style2); celli3.setCellStyle(style2);
HSSFRichTextString texti2 = new HSSFRichTextString(clients.get(m).getString("month_total")); HSSFRichTextString texti2 = new HSSFRichTextString(clients.get(m).getString("month_total"));
double rate = 0; double rate = 0;
if (n>0){ if (n > 0) {
List<JSONObject> lastClients = (List<JSONObject>) monthTotalSale.get(n-1).get("clients"); List<JSONObject> lastClients = (List<JSONObject>) monthTotalSale.get(n - 1).get("clients");
BigDecimal lastTotal = lastClients.get(m).getBigDecimal("month_total"); BigDecimal lastTotal = lastClients.get(m).getBigDecimal("month_total");
BigDecimal total = clients.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){ if (lastTotal.compareTo(new BigDecimal(0)) == 0 && total.compareTo(new BigDecimal(0)) != 0) {
rate=100; rate = 100;
} } else if (lastTotal.compareTo(new BigDecimal(0)) == 0 && total.compareTo(new BigDecimal(0)) == 0) {
else if (lastTotal.compareTo(new BigDecimal(0))==0 && total.compareTo(new BigDecimal(0)) ==0){ rate = 0;
rate=0; } else {
}else { rate = total.subtract(lastTotal).multiply(new BigDecimal(100)).divide(lastTotal, 2, BigDecimal.ROUND_DOWN).doubleValue();
rate = total.subtract(lastTotal).multiply(new BigDecimal(100)).divide(lastTotal,2,BigDecimal.ROUND_DOWN).doubleValue();
} }
} }
HSSFRichTextString texti3 = new HSSFRichTextString(String.valueOf(rate)); HSSFRichTextString texti3 = new HSSFRichTextString(String.valueOf(rate));

@ -1,12 +1,19 @@
package au.com.royalpay.payment.manage.analysis.core.impls; 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.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.analysis.mappers.TransactionAnalysisMapper;
import au.com.royalpay.payment.manage.mappers.log.StatisticsBDSalesReportMapper;
import au.com.royalpay.payment.manage.organizations.core.OrgManager; import au.com.royalpay.payment.manage.organizations.core.OrgManager;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -17,14 +24,53 @@ public class OrgAnalysisServiceImp implements OrgAnalysisService {
@Resource @Resource
private TransactionAnalysisMapper transactionAnalysisMapper; private TransactionAnalysisMapper transactionAnalysisMapper;
@Resource
private StatisticsBDSalesReportMapper statisticsBDSalesReportMapper;
@Resource @Resource
private OrgManager orgManager; private OrgManager orgManager;
@Resource
private CustomerAndOrdersStatisticsMapper customerAndOrdersStatisticsMapper;
@Override @Override
public List<JSONObject> getSalesAnalysis(JSONObject params,JSONObject manager) { public List<JSONObject> getSalesAnalysis(JSONObject params,JSONObject manager) {
orgManager.checkOrgIds(manager,params); orgManager.checkOrgIds(manager,params);
List<JSONObject> OrgTransaction = transactionAnalysisMapper.getOrgTransactionAnalysis(params); params.put("org_type",0);
return OrgTransaction; 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.getOneDayOrgMerchantSaleList(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("amount").add(todayOrgTransactionItem.getBigDecimal("clearing_amount"));
orgTransaction.put("amount", newAmount);
flag = true;
}
}
if (!flag) {
todayOrgTransactionItem.put("amount",todayOrgTransactionItem.getString("clearing_amount"));
newOrgTransaction.add(todayOrgTransactionItem);
}
}
}
}
return newOrgTransaction;
} }
@Override @Override

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

@ -77,6 +77,9 @@ public interface TransactionAnalysisMapper {
JSONObject getClientTransaction(JSONObject params); JSONObject getClientTransaction(JSONObject params);
List<JSONObject> getWeekClientTransaction(JSONObject params);
@CountRef(".countAreaMerchantAmountAnalysis") @CountRef(".countAreaMerchantAmountAnalysis")
PageList<JSONObject> getAreaMerchantAmountAnalysis(JSONObject params, PageBounds pagination); PageList<JSONObject> getAreaMerchantAmountAnalysis(JSONObject params, PageBounds pagination);
@ -93,4 +96,6 @@ public interface TransactionAnalysisMapper {
* @return * @return
*/ */
BigDecimal getCnyAmount(JSONObject params); BigDecimal getCnyAmount(JSONObject params);
List<JSONObject> getOneDayOrgMerchantSaleList(JSONObject params);
} }

@ -26,6 +26,8 @@ import javax.servlet.http.HttpServletResponse;
public interface RetailAppService { public interface RetailAppService {
JSONObject getTransactionCommonData(JSONObject device, AppQueryBean appQueryBean); JSONObject getTransactionCommonData(JSONObject device, AppQueryBean appQueryBean);
List<JSONObject> getTransactionCommonWeekData(JSONObject device, AppQueryBean appQueryBean);
JSONObject getClientSettlementLog(JSONObject device, AppQueryBean appQueryBean); JSONObject getClientSettlementLog(JSONObject device, AppQueryBean appQueryBean);
JSONObject getTransactionLogsByClearingDetailId(JSONObject device, int clearing_detail_id, String timezone); JSONObject getTransactionLogsByClearingDetailId(JSONObject device, int clearing_detail_id, String timezone);

@ -109,7 +109,6 @@ import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -219,7 +218,7 @@ public class RetailAppServiceImp implements RetailAppService {
private final int BIND_PHONE_TEMPLID = 126978; private final int BIND_PHONE_TEMPLID = 126978;
private Map<String, AppMsgSender> senderMap = new HashMap<>(); private Map<String, AppMsgSender> senderMap = new HashMap<>();
private final String fileName[] = { "client_bank_file", "client_id_file", "client_company_file" }; private final String fileName[] = {"client_bank_file", "client_id_file", "client_company_file"};
@Resource @Resource
public void setAppMsgSenders(AppMsgSender[] senders) { public void setAppMsgSenders(AppMsgSender[] senders) {
@ -270,6 +269,27 @@ public class RetailAppServiceImp implements RetailAppService {
return res; return res;
} }
@Override
public List<JSONObject> getTransactionCommonWeekData(JSONObject device, AppQueryBean appQueryBean) {
String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType);
int client_id = device.getIntValue("client_id");
JSONObject client = clientManager.getClientInfo(client_id);
String timezone = client.getString("timezone");
if (timezone != null && !timezone.isEmpty()) {
appQueryBean.setTimezone(timezone);
}
JSONObject params = appQueryBean.toParams();
setAllClientIds(params, client_id);
params.put("client_id", client_id);
List<JSONObject> res = transactionAnalysisMapper.getWeekClientTransaction(params);
res.forEach(r -> {
r.put("date",r.getDate("date").toString());
});
res.remove(res.size() - 1);
return res;
}
@Override @Override
public JSONObject getTradeCommonDate(JSONObject device, AppQueryBean appQueryBean) { public JSONObject getTradeCommonDate(JSONObject device, AppQueryBean appQueryBean) {
String clientType = device.getString("client_type"); String clientType = device.getString("client_type");
@ -310,7 +330,7 @@ public class RetailAppServiceImp implements RetailAppService {
@Override @Override
public JSONObject getQrcode(JSONObject device, QRCodeConfig config, int client_id) { public JSONObject getQrcode(JSONObject device, QRCodeConfig config, int client_id) {
JSONObject client = merchantInfoProvider.getClientInfo(client_id); JSONObject client = merchantInfoProvider.getClientInfo(client_id);
String url = PlatformEnvironment.getEnv().concatUrl("/api/payment/v1.0/partners/" + client.getString("client_moniker")); String url = PlatformEnvironment.getEnv().concatUrl("/api/v1.0/payment/partners/" + client.getString("client_moniker"));
if (config.isCNY()) { if (config.isCNY()) {
url += "_CNY"; url += "_CNY";
} }
@ -492,7 +512,7 @@ public class RetailAppServiceImp implements RetailAppService {
@Override @Override
public JSONObject ctripCouponInfo(JSONObject device, String coupon_id) { public JSONObject ctripCouponInfo(JSONObject device, String coupon_id) {
return couponVerificationService.ctripCouponInfo(coupon_id,device.getIntValue("client_id"), true); return couponVerificationService.ctripCouponInfo(coupon_id, device.getIntValue("client_id"), true);
} }
@ -506,7 +526,7 @@ public class RetailAppServiceImp implements RetailAppService {
PageList<JSONObject> cusCouponLogs = couponAccuessLogMapper.getCouponAccuessLog( PageList<JSONObject> cusCouponLogs = couponAccuessLogMapper.getCouponAccuessLog(
client.getIntValue("client_id"), keyword, new PageBounds(appQueryBean.getPage(), appQueryBean.getLimit(), Order.formString("creation_date.desc"))); client.getIntValue("client_id"), keyword, new PageBounds(appQueryBean.getPage(), appQueryBean.getLimit(), Order.formString("creation_date.desc")));
HashMap<String, JSONObject> couponMap = new HashMap<>(); HashMap<String, JSONObject> couponMap = new HashMap<>();
for(JSONObject cusCouponLog : cusCouponLogs) { for (JSONObject cusCouponLog : cusCouponLogs) {
cusCouponLog.put("client_moniker", client_moniker); cusCouponLog.put("client_moniker", client_moniker);
if (couponMap.containsKey(cusCouponLog.getString("coupon_id"))) { if (couponMap.containsKey(cusCouponLog.getString("coupon_id"))) {
cusCouponLog.put("coupon", couponMap.get(cusCouponLog.getString("coupon_id"))); cusCouponLog.put("coupon", couponMap.get(cusCouponLog.getString("coupon_id")));
@ -529,7 +549,7 @@ public class RetailAppServiceImp implements RetailAppService {
Date date = new Date(); Date date = new Date();
couponAccuessLog.put("client_id", client_id); couponAccuessLog.put("client_id", client_id);
couponAccuessLog.put("order_id", "NON_PLATFORM_ORDER"); couponAccuessLog.put("order_id", "NON_PLATFORM_ORDER");
couponAccuessLog.put("coupon_id", "CTRIP_"+coupon_id); couponAccuessLog.put("coupon_id", "CTRIP_" + coupon_id);
couponAccuessLog.put("customer_openid", "NON_PLATFORM_ORDER"); couponAccuessLog.put("customer_openid", "NON_PLATFORM_ORDER");
couponAccuessLog.put("coupon_deal_amount", 0); couponAccuessLog.put("coupon_deal_amount", 0);
couponAccuessLog.put("currency", "AUD"); couponAccuessLog.put("currency", "AUD");
@ -589,7 +609,7 @@ public class RetailAppServiceImp implements RetailAppService {
|| ("Company".equals(clientWithConfig.getString("business_structure")) && StringUtils.isEmpty(clientWithConfig.getString("acn"))) || ("Company".equals(clientWithConfig.getString("business_structure")) && StringUtils.isEmpty(clientWithConfig.getString("acn")))
|| (!"Company".equals(clientWithConfig.getString("business_structure")) && StringUtils.isEmpty(clientWithConfig.getString("abn"))) || (!"Company".equals(clientWithConfig.getString("business_structure")) && StringUtils.isEmpty(clientWithConfig.getString("abn")))
|| (StringUtils.isEmpty(clientWithConfig.getString("company_website")) && StringUtils.isEmpty(clientWithConfig.getString("company_photo")) || (StringUtils.isEmpty(clientWithConfig.getString("company_website")) && StringUtils.isEmpty(clientWithConfig.getString("company_photo"))
&& StringUtils.isEmpty(clientWithConfig.getString("store_photo")))) { && StringUtils.isEmpty(clientWithConfig.getString("store_photo")))) {
res.put("base_info_lack", true); res.put("base_info_lack", true);
} }
@ -621,7 +641,7 @@ public class RetailAppServiceImp implements RetailAppService {
|| ("Company".equals(client.getString("business_structure")) && StringUtils.isEmpty(client.getString("acn"))) || ("Company".equals(client.getString("business_structure")) && StringUtils.isEmpty(client.getString("acn")))
|| (!"Company".equals(client.getString("business_structure")) && StringUtils.isEmpty(client.getString("abn"))) || (!"Company".equals(client.getString("business_structure")) && StringUtils.isEmpty(client.getString("abn")))
|| (StringUtils.isEmpty(client.getString("company_website")) && StringUtils.isEmpty(client.getString("company_photo")) || (StringUtils.isEmpty(client.getString("company_website")) && StringUtils.isEmpty(client.getString("company_photo"))
&& StringUtils.isEmpty(client.getString("store_photo")))) { && StringUtils.isEmpty(client.getString("store_photo")))) {
result.put("base_info_lack", true); result.put("base_info_lack", true);
} }
@ -1296,10 +1316,10 @@ public class RetailAppServiceImp implements RetailAppService {
String father = "<div style=\"padding:0 10px\"></div>"; String father = "<div style=\"padding:0 10px\"></div>";
String html = doc.body().children().wrap(father).html(); String html = doc.body().children().wrap(father).html();
// logger.debug("wrapped html---->"+html); // logger.debug("wrapped html---->"+html);
if (res.getIntValue("type")==2) { if (res.getIntValue("type") == 2) {
List<JSONObject> buttons = JSONObject.parseArray(res.getString("buttons"),JSONObject.class); List<JSONObject> buttons = JSONObject.parseArray(res.getString("buttons"), JSONObject.class);
res.put("buttons", buttons); res.put("buttons", buttons);
}else { } else {
res.put("content", doc.html()); res.put("content", doc.html());
} }
return res; return res;
@ -1331,14 +1351,14 @@ public class RetailAppServiceImp implements RetailAppService {
if (latestConfirmNotice != null) { if (latestConfirmNotice != null) {
latestConfirmNotice.put("id", latestConfirmNotice.getString("notice_id")); latestConfirmNotice.put("id", latestConfirmNotice.getString("notice_id"));
latestConfirmNotice.remove("notice_id"); latestConfirmNotice.remove("notice_id");
List<JSONObject> buttons = JSONObject.parseArray(latestConfirmNotice.getString("buttons"),JSONObject.class); List<JSONObject> buttons = JSONObject.parseArray(latestConfirmNotice.getString("buttons"), JSONObject.class);
latestConfirmNotice.put("buttons", buttons); latestConfirmNotice.put("buttons", buttons);
String content = latestConfirmNotice.getString("content"); String content = latestConfirmNotice.getString("content");
if (content.indexOf("%excharge_rate%")>0) { if (content.indexOf("%excharge_rate%") > 0) {
JSONObject rate = merchantInfoProvider.clientCurrentRate(client_id, new Date(), "CB_BankPay"); JSONObject rate = merchantInfoProvider.clientCurrentRate(client_id, new Date(), "CB_BankPay");
if (rate != null) { if (rate != null) {
content = content.replace("%excharge_rate%", (rate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN).toPlainString() + "%")); content = content.replace("%excharge_rate%", (rate.getBigDecimal("rate_value").setScale(2, BigDecimal.ROUND_DOWN).toPlainString() + "%"));
}else { } else {
content = content.replace("%excharge_rate%", "(暂未配置)"); content = content.replace("%excharge_rate%", "(暂未配置)");
} }
} }
@ -1351,10 +1371,10 @@ public class RetailAppServiceImp implements RetailAppService {
String EndDate = DateFormatUtils.format(rate.getDate("expiry_date"), "yyyy-MM-dd"); String EndDate = DateFormatUtils.format(rate.getDate("expiry_date"), "yyyy-MM-dd");
String[] rateName = {"清算时间", "签约费率", "结束时间"}; String[] rateName = {"清算时间", "签约费率", "结束时间"};
String[] rateKey = {cleanDays, rateValue, EndDate}; String[] rateKey = {cleanDays, rateValue, EndDate};
for(int i =0;i<rateName.length;i++){ for (int i = 0; i < rateName.length; i++) {
JSONObject b = new JSONObject(); JSONObject b = new JSONObject();
b.put("name",rateName[i]); b.put("name", rateName[i]);
b.put("value",rateKey[i]); b.put("value", rateKey[i]);
b.put("type", "string"); b.put("type", "string");
rateInfo.add(b); rateInfo.add(b);
} }
@ -1911,7 +1931,7 @@ public class RetailAppServiceImp implements RetailAppService {
getActs.put("ad_cover", getActs.getString("page_desc")); getActs.put("ad_cover", getActs.getString("page_desc"));
getActs.put("ad_mode", getActs.getString("page_keywords")); getActs.put("ad_mode", getActs.getString("page_keywords"));
getActs.put("ad_link", getActs.getString("summery")); getActs.put("ad_link", getActs.getString("summery"));
getActs.put("publish_date", DateFormatUtils.format(getActs.getDate("publish_time"),"yyyy/MM/dd HH:mm:ss")); getActs.put("publish_date", DateFormatUtils.format(getActs.getDate("publish_time"), "yyyy/MM/dd HH:mm:ss"));
String reference = getActs.getString("reference"); String reference = getActs.getString("reference");
JSONObject referenceObj = JSONObject.parseObject(reference); JSONObject referenceObj = JSONObject.parseObject(reference);
if (reference != null) { if (reference != null) {
@ -1924,7 +1944,7 @@ public class RetailAppServiceImp implements RetailAppService {
if (referenceObj.getString("duration_time") != null) { if (referenceObj.getString("duration_time") != null) {
getActs.put("duration_time", referenceObj.getString("duration_time")); getActs.put("duration_time", referenceObj.getString("duration_time"));
} }
}else { } else {
getActs.put("message", "mess : (ad_type && expire_date && duration_time) not set"); getActs.put("message", "mess : (ad_type && expire_date && duration_time) not set");
} }
getActs.remove("reference"); getActs.remove("reference");
@ -1979,9 +1999,9 @@ public class RetailAppServiceImp implements RetailAppService {
@Override @Override
public void submitMaterial(JSONObject material, JSONObject device) { public void submitMaterial(JSONObject material, JSONObject device) {
riskUploadService.submitMaterial(material); riskUploadService.submitMaterial(material);
JSONObject event = riskBusinessService.getRiskEventDetail(material.getString("risk_id")); JSONObject event = riskBusinessService.getRiskEventDetail(material.getString("risk_id"));
//材料审核通过后可以重新提交 //材料审核通过后可以重新提交
if(event.getIntValue("result_type")==3){ if (event.getIntValue("result_type") == 3) {
return; return;
} }
JSONObject account = clientAccountMapper.findById(device.getString("account_id")); JSONObject account = clientAccountMapper.findById(device.getString("account_id"));
@ -1999,14 +2019,14 @@ public class RetailAppServiceImp implements RetailAppService {
public void bindAccountEmail(JSONObject device, JSONObject email) { public void bindAccountEmail(JSONObject device, JSONObject email) {
String codeKey = device.getString("account_id"); String codeKey = device.getString("account_id");
String codeKeyValueRedis = stringRedisTemplate.boundValueOps(getUpdateAccountEmailKey(codeKey)).get(); String codeKeyValueRedis = stringRedisTemplate.boundValueOps(getUpdateAccountEmailKey(codeKey)).get();
if(StringUtils.isNotEmpty(codeKeyValueRedis)){ if (StringUtils.isNotEmpty(codeKeyValueRedis)) {
throw new BadRequestException("Captcha has been sent.Please check your email or try again in 5 minutes."); throw new BadRequestException("Captcha has been sent.Please check your email or try again in 5 minutes.");
} }
String codeKeyValue = RandomStringUtils.random(6, false, true); String codeKeyValue = RandomStringUtils.random(6, false, true);
Context ctx = new Context(); Context ctx = new Context();
JSONObject account = clientAccountMapper.findById(device.getString("account_id")); JSONObject account = clientAccountMapper.findById(device.getString("account_id"));
ctx.setVariable("account",account); ctx.setVariable("account", account);
ctx.setVariable("captcha",codeKeyValue); ctx.setVariable("captcha", codeKeyValue);
final String content = thymeleaf.process("mail/account_bind_email.html", ctx); final String content = thymeleaf.process("mail/account_bind_email.html", ctx);
royalThreadPoolExecutor.execute(() -> { royalThreadPoolExecutor.execute(() -> {
try { try {
@ -2016,23 +2036,23 @@ public class RetailAppServiceImp implements RetailAppService {
throw new EmailException("Email Sending Failed", e); throw new EmailException("Email Sending Failed", e);
} }
}); });
stringRedisTemplate.boundValueOps(getUpdateAccountEmailKey(codeKey)).set(codeKeyValue+"&"+email.getString("contact_email"), 5, TimeUnit.MINUTES); stringRedisTemplate.boundValueOps(getUpdateAccountEmailKey(codeKey)).set(codeKeyValue + "&" + email.getString("contact_email"), 5, TimeUnit.MINUTES);
} }
@Override @Override
public void updateAccountEmail(JSONObject device, JSONObject params) { public void updateAccountEmail(JSONObject device, JSONObject params) {
String key = stringRedisTemplate.boundValueOps(getUpdateAccountEmailKey(device.getString("account_id"))).get(); String key = stringRedisTemplate.boundValueOps(getUpdateAccountEmailKey(device.getString("account_id"))).get();
if(key == null){ if (key == null) {
throw new BadRequestException("Captcha has expired"); throw new BadRequestException("Captcha has expired");
} }
String captcha = key.split("&")[0]; String captcha = key.split("&")[0];
String email = key.split("&")[1]; String email = key.split("&")[1];
if(!StringUtils.equals(captcha,params.getString("captcha"))){ if (!StringUtils.equals(captcha, params.getString("captcha"))) {
throw new BadRequestException("Verification code is wrong"); throw new BadRequestException("Verification code is wrong");
} }
JSONObject account = new JSONObject(); JSONObject account = new JSONObject();
account.put("account_id",device.getString("account_id")); account.put("account_id", device.getString("account_id"));
account.put("contact_email",email); account.put("contact_email", email);
clientAccountMapper.update(account); clientAccountMapper.update(account);
deleteAccountEmailKey(device.getString("account_id")); deleteAccountEmailKey(device.getString("account_id"));
} }
@ -2041,7 +2061,7 @@ public class RetailAppServiceImp implements RetailAppService {
public void bindAccountPhone(JSONObject device, JSONObject phone) { public void bindAccountPhone(JSONObject device, JSONObject phone) {
String codeKey = device.getString("account_id"); String codeKey = device.getString("account_id");
String codeKeyValueRedis = stringRedisTemplate.boundValueOps(getUpdateAccountPhoneKey(codeKey)).get(); String codeKeyValueRedis = stringRedisTemplate.boundValueOps(getUpdateAccountPhoneKey(codeKey)).get();
if(StringUtils.isNotEmpty(codeKeyValueRedis)){ if (StringUtils.isNotEmpty(codeKeyValueRedis)) {
throw new BadRequestException("Captcha has been sent.Please check your phone or try again in 5 minutes."); throw new BadRequestException("Captcha has been sent.Please check your phone or try again in 5 minutes.");
} }
String codeKeyValue = RandomStringUtils.random(6, false, true); String codeKeyValue = RandomStringUtils.random(6, false, true);
@ -2058,25 +2078,25 @@ public class RetailAppServiceImp implements RetailAppService {
e.printStackTrace(); e.printStackTrace();
throw new ServerErrorException("Phone number is wrong.Please try again."); throw new ServerErrorException("Phone number is wrong.Please try again.");
} }
stringRedisTemplate.boundValueOps(getUpdateAccountPhoneKey(codeKey)).set(codeKeyValue+"&"+nationCode+"&"+phoneNumber, Long.parseLong(expireMin), TimeUnit.MINUTES); stringRedisTemplate.boundValueOps(getUpdateAccountPhoneKey(codeKey)).set(codeKeyValue + "&" + nationCode + "&" + phoneNumber, Long.parseLong(expireMin), TimeUnit.MINUTES);
} }
@Override @Override
public void updateAccountPhone(JSONObject device, JSONObject params) { public void updateAccountPhone(JSONObject device, JSONObject params) {
String key = stringRedisTemplate.boundValueOps(getUpdateAccountPhoneKey(device.getString("account_id"))).get(); String key = stringRedisTemplate.boundValueOps(getUpdateAccountPhoneKey(device.getString("account_id"))).get();
if(key == null){ if (key == null) {
throw new BadRequestException("Captcha has expired"); throw new BadRequestException("Captcha has expired");
} }
String captcha = key.split("&")[0]; String captcha = key.split("&")[0];
String nation_code = key.split("&")[1]; String nation_code = key.split("&")[1];
String contact_phone = key.split("&")[2]; String contact_phone = key.split("&")[2];
if(!StringUtils.equals(captcha,params.getString("captcha"))){ if (!StringUtils.equals(captcha, params.getString("captcha"))) {
throw new BadRequestException("Verification code is wrong"); throw new BadRequestException("Verification code is wrong");
} }
JSONObject account = new JSONObject(); JSONObject account = new JSONObject();
account.put("account_id",device.getString("account_id")); account.put("account_id", device.getString("account_id"));
account.put("contact_phone",contact_phone); account.put("contact_phone", contact_phone);
account.put("nation_code","+" + nation_code); account.put("nation_code", "+" + nation_code);
clientAccountMapper.update(account); clientAccountMapper.update(account);
deleteAccountPhoneKey(device.getString("account_id")); deleteAccountPhoneKey(device.getString("account_id"));
} }
@ -2120,7 +2140,7 @@ public class RetailAppServiceImp implements RetailAppService {
} }
@Override @Override
public JSONObject toggleCBBankChannel(JSONObject device,String noticeId) { public JSONObject toggleCBBankChannel(JSONObject device, String noticeId) {
String clientType = device.getString("client_type"); String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType); deviceSupport.findRegister(clientType);
JSONObject account = clientAccountMapper.findById(device.getString("account_id")); JSONObject account = clientAccountMapper.findById(device.getString("account_id"));
@ -2143,7 +2163,7 @@ public class RetailAppServiceImp implements RetailAppService {
} }
@Override @Override
public JSONObject toggleCBBankCustomerSurcharge(JSONObject device,boolean customerSurcharge) { public JSONObject toggleCBBankCustomerSurcharge(JSONObject device, boolean customerSurcharge) {
String clientType = device.getString("client_type"); String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType); deviceSupport.findRegister(clientType);
JSONObject account = clientAccountMapper.findById(device.getString("account_id")); JSONObject account = clientAccountMapper.findById(device.getString("account_id"));
@ -2158,7 +2178,7 @@ public class RetailAppServiceImp implements RetailAppService {
result.put("status", "Fail"); result.put("status", "Fail");
if (customerSurcharge) { if (customerSurcharge) {
result.put("message", "开启客户支付手续费失败,失败原因:" + e.getMessage()); result.put("message", "开启客户支付手续费失败,失败原因:" + e.getMessage());
}else { } else {
result.put("message", "关闭客户支付手续费失败,失败原因:" + e.getMessage()); result.put("message", "关闭客户支付手续费失败,失败原因:" + e.getMessage());
} }
@ -2168,7 +2188,7 @@ public class RetailAppServiceImp implements RetailAppService {
result.put("status", "Success"); result.put("status", "Success");
if (customerSurcharge) { if (customerSurcharge) {
result.put("message", "开启客户支付手续费成功!"); result.put("message", "开启客户支付手续费成功!");
}else { } else {
result.put("message", "关闭客户支付手续费成功!"); result.put("message", "关闭客户支付手续费成功!");
} }
result.put("customerSurcharge", String.valueOf(customerSurcharge)); result.put("customerSurcharge", String.valueOf(customerSurcharge));
@ -2371,20 +2391,20 @@ public class RetailAppServiceImp implements RetailAppService {
return result; return result;
} }
private void deleteAccountEmailKey(String codeKey){ private void deleteAccountEmailKey(String codeKey) {
stringRedisTemplate.delete(getUpdateAccountEmailKey(codeKey)); stringRedisTemplate.delete(getUpdateAccountEmailKey(codeKey));
} }
private void deleteAccountPhoneKey(String codeKey){ private void deleteAccountPhoneKey(String codeKey) {
stringRedisTemplate.delete(getUpdateAccountPhoneKey(codeKey)); stringRedisTemplate.delete(getUpdateAccountPhoneKey(codeKey));
} }
private String getUpdateAccountEmailKey(String codeKey){ private String getUpdateAccountEmailKey(String codeKey) {
return BIND_ACCOUNT_EMAIL_PREFIX+codeKey; return BIND_ACCOUNT_EMAIL_PREFIX + codeKey;
} }
private String getUpdateAccountPhoneKey(String codeKey){ private String getUpdateAccountPhoneKey(String codeKey) {
return BIND_ACCOUNT_PHONE_PREFIX+codeKey; return BIND_ACCOUNT_PHONE_PREFIX + codeKey;
} }
private JSONObject getBankAccountByClientId(int client_id) { private JSONObject getBankAccountByClientId(int client_id) {

@ -104,6 +104,12 @@ public class RetailAppController {
return retailAppService.getTransactionCommonData(device, appQueryBean); return retailAppService.getTransactionCommonData(device, appQueryBean);
} }
// 查询7天的交易金额
@RequestMapping(value = "/common/week", method = RequestMethod.GET)
public List<JSONObject> getTransactionCommonWeekData(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) {
return retailAppService.getTransactionCommonWeekData(device, appQueryBean);
}
/** /**
* *
* *

@ -19,9 +19,7 @@ import javax.annotation.Resource;
public class AppPermissionSupportImpl implements AppPermissionSupport { public class AppPermissionSupportImpl implements AppPermissionSupport {
@Resource @Resource
private SysAppsMapper sysAppsMapper; private SysAppsMapper sysAppsMapper;
private final String signTemplate = "%s&%s&%s&%s&%s";
private Logger logger = LoggerFactory.getLogger(getClass()); private Logger logger = LoggerFactory.getLogger(getClass());
public static final String[] NODES_IP_ADDRESSS = new String[]{"119.28.3.196","150.109.64.108", "119.28.178.24", "119.28.24.146", "119.28.77.25"};
@Override @Override
public JSONObject validateSign(String appid, long timestamp, String ip, String requestUri, String sign) { public JSONObject validateSign(String appid, long timestamp, String ip, String requestUri, String sign) {
@ -41,19 +39,10 @@ public class AppPermissionSupportImpl implements AppPermissionSupport {
throw new ForbiddenException("Timeout"); throw new ForbiddenException("Timeout");
} }
String auth = app.getString("auth_code"); String auth = app.getString("auth_code");
String str = String.format(signTemplate, appid, auth, timestamp, requestUri, ip); String str = String.join("&", appid, auth, timestamp + "", requestUri);
logger.debug("sso-str before hash:" + str); logger.debug("sso-str before hash:{}", str);
String hash = DigestUtils.sha256Hex(str).toLowerCase(); String hash = DigestUtils.sha256Hex(str).toLowerCase();
if (!StringUtils.equals(hash, sign)) { if (!StringUtils.equals(hash, sign)) {
for (String nodeIp : NODES_IP_ADDRESSS) {
logger.error("[{}]请求的签名有误,使用节点 [{}] 签名", appid, nodeIp);
str = String.format(signTemplate, appid, auth, timestamp, requestUri, nodeIp);
logger.debug("NodeIp check sso-str before hash:" + str);
hash = DigestUtils.sha256Hex(str).toLowerCase();
if (StringUtils.equals(hash, sign)) {
return app;
}
}
throw new ForbiddenException("InvalidSign"); throw new ForbiddenException("InvalidSign");
} }
return app; return app;

@ -58,7 +58,7 @@ public class SSOSupportImpl implements SSOSupport {
public String cacheClient(String appid, JSONObject clientUser) { public String cacheClient(String appid, JSONObject clientUser) {
String code = Long.toString(System.currentTimeMillis(), 36) + RandomStringUtils.random(10, true, true); String code = Long.toString(System.currentTimeMillis(), 36) + RandomStringUtils.random(10, true, true);
String cacheKey = accountCacheKey("client", appid, code); String cacheKey = accountCacheKey("client", appid, code);
logger.debug("========cacheClient,key:"+cacheKey+"========"); logger.debug("========cacheClient,key:{}========", cacheKey);
stringRedisTemplate.boundValueOps(cacheKey).set(clientUser.toJSONString(), 30, TimeUnit.SECONDS); stringRedisTemplate.boundValueOps(cacheKey).set(clientUser.toJSONString(), 30, TimeUnit.SECONDS);
return code; return code;
} }
@ -70,7 +70,7 @@ public class SSOSupportImpl implements SSOSupport {
private JSONObject getCachedAccount(String appid, String code, String type) { private JSONObject getCachedAccount(String appid, String code, String type) {
String cacheKey = accountCacheKey(type, appid, code); String cacheKey = accountCacheKey(type, appid, code);
logger.debug("========getCachedAccount,key:"+cacheKey+"========"); logger.debug("========getCachedAccount,key:{}========", cacheKey);
String jsonstr = stringRedisTemplate.boundValueOps(cacheKey).get(); String jsonstr = stringRedisTemplate.boundValueOps(cacheKey).get();
stringRedisTemplate.delete(cacheKey); stringRedisTemplate.delete(cacheKey);
if (jsonstr != null) { if (jsonstr != null) {
@ -81,7 +81,7 @@ public class SSOSupportImpl implements SSOSupport {
@Override @Override
public JSONObject getCachedClientAccount(String appid, String code) { public JSONObject getCachedClientAccount(String appid, String code) {
logger.debug("========getCachedClientAccount,appid:"+appid+",code:"+code+"========"); logger.debug("========getCachedClientAccount,appid:{},code:{}========", appid, code);
return getCachedAccount(appid, code, "client"); return getCachedAccount(appid, code, "client");
} }

@ -108,6 +108,5 @@ public class ManualServiceimpl implements ManualService {
} }
}); });
clientModifySupport.processClientConfigModify(new SwitchPermissionModify(null, client_moniker, "tax_in_surcharge", false));
} }
} }

@ -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,@Param("isOrg") int isOrg);
@AutoSql(type = SqlType.UPDATE)
void update(JSONObject existBDSalesReport);
}

@ -5376,7 +5376,6 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
rpayApi.modifySurchargeConfig(clientMapper.findClient(client_id)); rpayApi.modifySurchargeConfig(clientMapper.findClient(client_id));
} }
} }
clientModifySupport.processClientConfigModify(new SwitchPermissionModify(null, client.getString("client_moniker"), "tax_in_surcharge", false));
adminAccounts.forEach(o -> { adminAccounts.forEach(o -> {
sendClientPostponeNotify(o, expireDate); sendClientPostponeNotify(o, expireDate);
}); });
@ -5396,7 +5395,6 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
public boolean postponeClientRate(int clientId, String clientMoniker, String nextYearExipryDate) { public boolean postponeClientRate(int clientId, String clientMoniker, String nextYearExipryDate) {
try { try {
clientRateMapper.postponeMerchantRateByClientId(clientId); clientRateMapper.postponeMerchantRateByClientId(clientId);
clientModifySupport.processClientConfigModify(new SwitchPermissionModify(null, clientMoniker, "tax_in_surcharge", false));
List<JSONObject> adminAccounts = clientAccountMapper.listAdminAccounts(clientId); List<JSONObject> adminAccounts = clientAccountMapper.listAdminAccounts(clientId);
adminAccounts.forEach(o -> { adminAccounts.forEach(o -> {
sendClientPostponeNotify(o, nextYearExipryDate); sendClientPostponeNotify(o, nextYearExipryDate);

@ -32,6 +32,7 @@ import au.com.royalpay.payment.tools.connections.mpsupport.exceptions.WechatExce
import au.com.royalpay.payment.tools.device.message.AppMessage; import au.com.royalpay.payment.tools.device.message.AppMessage;
import au.com.royalpay.payment.tools.device.message.AppMsgSender; import au.com.royalpay.payment.tools.device.message.AppMsgSender;
import au.com.royalpay.payment.tools.env.PlatformEnvironment; import au.com.royalpay.payment.tools.env.PlatformEnvironment;
import au.com.royalpay.payment.tools.env.SysConfigManager;
import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.exceptions.BadRequestException;
import au.com.royalpay.payment.tools.exceptions.event.WechatExceptionEvent; import au.com.royalpay.payment.tools.exceptions.event.WechatExceptionEvent;
import au.com.royalpay.payment.tools.locale.LocaleSupport; import au.com.royalpay.payment.tools.locale.LocaleSupport;
@ -134,6 +135,9 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
private MpWechatApiProvider mpWechatApiProvider; private MpWechatApiProvider mpWechatApiProvider;
private ApplicationEventPublisher publisher; private ApplicationEventPublisher publisher;
@Resource
private SysConfigManager sysConfigManager;
@Resource @Resource
public void setAppMsgSenders(AppMsgSender[] senders) { public void setAppMsgSenders(AppMsgSender[] senders) {
@ -818,9 +822,9 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
* bdemailsBccs * bdemailsBccs
* *
* *
* "18852852189@163.com" * sys_configsKEY"rick_interior_send_email"
* *
* Arrays.asList("18852852189@139.com", "1370256381@qq.com")debug * Arrays.asList(sys_configsKEY"rick_interior_send_email")debug
*/ */
if (isSendClient == 1) { if (isSendClient == 1) {
ctx.setVariable("emailsTos", clientEmails); ctx.setVariable("emailsTos", clientEmails);
@ -829,7 +833,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
ctx.setVariable("emailsCcs", null); ctx.setVariable("emailsCcs", null);
if (PlatformEnvironment.getEnv().isDebug()) { if (PlatformEnvironment.getEnv().isDebug()) {
emailsBccs = new ArrayList<>(Arrays.asList( emailsBccs = new ArrayList<>(Arrays.asList(
"18852852189@139.com", "1370256381@qq.com" sysConfigManager.getSysConfig().getString("rick_interior_send_email"),
sysConfigManager.getSysConfig().getString("rick_interior_send_email")
)); ));
} }
emailsBccs.addAll(bdEmails); emailsBccs.addAll(bdEmails);
@ -839,13 +844,14 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
if (orderType == RiskOrderTypeEnum.ROYALPAY_ORDER.getOrderType().intValue()) { if (orderType == RiskOrderTypeEnum.ROYALPAY_ORDER.getOrderType().intValue()) {
if (PlatformEnvironment.getEnv().isDebug()) { if (PlatformEnvironment.getEnv().isDebug()) {
emailsBccs = new ArrayList<>(Arrays.asList( emailsBccs = new ArrayList<>(Arrays.asList(
"18852852189@139.com", "1370256381@qq.com" sysConfigManager.getSysConfig().getString("rick_interior_send_email"),
sysConfigManager.getSysConfig().getString("rick_interior_send_email")
)); ));
} }
emailsBccs.addAll(bdEmails); emailsBccs.addAll(bdEmails);
ctx.setVariable("emailsBccs", emailsBccs); ctx.setVariable("emailsBccs", emailsBccs);
ctx.setVariable("emailsTos", Arrays.asList( ctx.setVariable("emailsTos", Arrays.asList(
"18852852189@163.com" sysConfigManager.getSysConfig().getString("rick_interior_send_email")
)); ));
} }
} }

@ -125,7 +125,7 @@ public class SurchargeAccountServiceImpl implements SurchargeAccountService {
transaction.put("bill_id", detailId); transaction.put("bill_id", detailId);
transaction.put("total_surcharge", BigDecimal.ZERO); transaction.put("total_surcharge", BigDecimal.ZERO);
transaction.put("tax_amount", BigDecimal.ZERO); transaction.put("tax_amount", BigDecimal.ZERO);
transaction.put("amount", detail.getBigDecimal("debit_amount").negate()); transaction.put("amount", detail.getBigDecimal("total_surcharge").negate());
transaction.put("post_balance", surchargeAccount.getBigDecimal("balance").add(transaction.getBigDecimal("amount"))); transaction.put("post_balance", surchargeAccount.getBigDecimal("balance").add(transaction.getBigDecimal("amount")));
transaction.put("operation", manager.getString("manager_id")); transaction.put("operation", manager.getString("manager_id"));
transaction.put("create_time", new Date()); transaction.put("create_time", new Date());

@ -104,7 +104,6 @@ public class ClientContractServiceImpl implements ClientContractService {
contract.put("confirm_time", now); contract.put("confirm_time", now);
contract.put("signatory", account.getString("display_name")); contract.put("signatory", account.getString("display_name"));
clientsContractMapper.update(contract); clientsContractMapper.update(contract);
clientManager.setClientTaxInSurcharge(clientAccountMapper.findById(account_id),client.getString("client_moniker"), false);
} }
@Override @Override

@ -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 1 * * ?")
public void dailyReportAutoGenerateReport() {
synchronizedScheduler.executeProcess("manage_task:dailyDBSaleReportAutoGenerateReport", 120_000, () -> {
Date yesterday = DateUtils.addDays(new Date(), -1);
bdAnalysisService.generateReport(DateFormatUtils.format(yesterday, "yyyy-MM-dd"));
});
}
}

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

@ -716,25 +716,45 @@
<select id="getOrgTransactionAnalysis" resultType="com.alibaba.fastjson.JSONObject"> <select id="getOrgTransactionAnalysis" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[ <![CDATA[
SELECT o.org_id, o.name org_name,sum(if(t.transaction_type='Credit',t.clearing_amount,0)) amount SELECT
FROM pmt_transactions t org.org_id,
INNER JOIN pmt_orders ord on ord.order_id = t.order_id org.name org_name,
RIGHT JOIN sys_clients c on t.client_id = c.client_id and c.is_valid = 1 SUM(if(trans.transaction_type='Credit',trans.clearing_amount,-trans.clearing_amount)) AS amount
RIGHT JOIN sys_org o on o.org_id = c.org_id and o.org_id != 1 and o.type=0 FROM pmt_transactions AS trans
where (t.transaction_type = 'Credit' or t.refund_id is not null) 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="begin!=null">
<if test="end!=null">and t.transaction_time &lt;= #{end}</if> AND trans.transaction_time &gt;= #{begin}
<if test="org_id!=null and org_ids==null">and o.org_id=#{org_id}</if> </if>
<if test="org_ids!=null">and o.org_id in <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> <foreach collection="org_ids" item="org_id" open="(" close=")" separator=",">#{org_id}</foreach>
</if> </if>
GROUP BY o.org_id order by amount desc GROUP BY org.org_id
ORDER BY amount DESC
</select> </select>
<select id="getPartnersAmountByOrg" resultType="com.alibaba.fastjson.JSONObject"> <select id="getPartnersAmountByOrg" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[ <![CDATA[
SELECT c.client_moniker,c.short_name,sum(if(t.transaction_type='Credit',t.clearing_amount,0)) amount SELECT
c.client_moniker,
c.short_name,
SUM(IF(t.transaction_type = 'Credit', t.clearing_amount,-t.clearing_amount)) AS amount
FROM pmt_transactions t FROM pmt_transactions t
INNER JOIN pmt_orders ord on ord.order_id = t.order_id 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 AND c.org_id = #{org_id} RIGHT JOIN sys_clients c on t.client_id = c.client_id and c.is_valid = 1 AND c.org_id = #{org_id}
@ -861,6 +881,41 @@
</if> </if>
</select> </select>
<select id="getWeekClientTransaction" resultType="com.alibaba.fastjson.JSONObject">
SELECT
calendar.datelist AS date,
IFNULL( trade_amount, 0 ) AS trade_amount
FROM
calendar
LEFT JOIN (
SELECT
IFNULL( sum( IF ( l.transaction_type = 'Credit', l.clearing_amount, 0 ) ), 0 ) trade_amount,
DATE_FORMAT( l.transaction_time, '%Y-%m-%d' ) AS queryDate
FROM
pmt_transactions l
WHERE
l.channel != 'Settlement'
AND l.system_generate = 0
<if test="client_ids!=null">
AND l.client_id IN
<foreach collection="client_ids" open="(" close=")" separator="," item="client_id">
#{client_id}
</foreach>
</if>
<if test="client_ids==null and client_id != null">
AND l.client_id=#{client_id}
</if>
<if test="begin!=null">AND l.transaction_time &gt;= #{begin}</if>
<if test="end!=null">AND l.transaction_time &lt; #{end}</if>
GROUP BY
DATE_FORMAT( l.transaction_time, '%Y-%m-%d' )
) AS ticketCount ON calendar.datelist = ticketCount.queryDate
WHERE
calendar.datelist &lt;= #{end} AND calendar.datelist &gt;= #{begin}
ORDER BY
calendar.datelist
</select>
<select id="getAreaMerchantAmountAnalysis" resultType="com.alibaba.fastjson.JSONObject"> <select id="getAreaMerchantAmountAnalysis" resultType="com.alibaba.fastjson.JSONObject">
SELECT c.client_moniker,c.short_name,c.bd_user_name,sum(if(t.transaction_type='Credit',t.clearing_amount,0)) SELECT c.client_moniker,c.short_name,c.bd_user_name,sum(if(t.transaction_type='Credit',t.clearing_amount,0))
@ -963,5 +1018,42 @@
LIMIT 1; LIMIT 1;
</select> </select>
<select id="getOneDayOrgMerchantSaleList" resultType="com.alibaba.fastjson.JSONObject">
SELECT
org.org_id AS org_id,
org.name AS org_name,
org.type AS org_type,
1 AS isOrg,
SUM(IF( trans.transaction_type = 'Credit', trans.clearing_amount, - trans.clearing_amount )) AS clearing_amount,
0 AS pay_amount,
0 AS refund_amount,
0 AS net_amount
FROM
pmt_transactions AS trans
INNER JOIN sys_org AS org ON trans.org_id = org.org_id
AND org.is_valid = 1
AND org.type = 0
AND org.citypartner = 1
AND org.commission = 1
WHERE
trans.channel != 'Settlement'
AND trans.channel != 'System'
AND trans.system_generate = 0
<if test="org_id != null">
AND org.org_id = #{org_id}
</if>
<if test="begin != null">
AND trans.create_time &gt;= #{begin}
</if>
<if test="end != null">
AND trans.create_time &lt; #{end}
</if>
GROUP BY
org.org_id
</select>
</mapper> </mapper>

@ -0,0 +1,85 @@
<?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 isOrg = 0
<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>
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 isOrg = 1 AND 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 org_id
ORDER BY clearing_amount 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} AND isOrg = #{isOrg}
</select>
</mapper>

@ -17,6 +17,7 @@
fsad.total_surcharge, fsad.total_surcharge,
fsad.credit_amount, fsad.credit_amount,
fsad.debit_amount, fsad.debit_amount,
fsad.checkout,
sc.client_moniker, sc.client_moniker,
sc.short_name, sc.short_name,
sc.company_name sc.company_name

@ -100,7 +100,6 @@
<th style="border: 1.0px solid;border-collapse: collapse;">Platform Transaction ID</th> <th style="border: 1.0px solid;border-collapse: collapse;">Platform Transaction ID</th>
<th style="border: 1.0px solid;border-collapse: collapse;">Order Description</th> <th style="border: 1.0px solid;border-collapse: collapse;">Order Description</th>
<th style="border: 1.0px solid;border-collapse: collapse;">Customer ID</th> <th style="border: 1.0px solid;border-collapse: collapse;">Customer ID</th>
<th style="border: 1.0px solid;border-collapse: collapse;">IP</th>
<th style="border: 1.0px solid;border-collapse: collapse;">Total Amount</th> <th style="border: 1.0px solid;border-collapse: collapse;">Total Amount</th>
<th style="border: 1.0px solid;border-collapse: collapse;">Input Amount</th> <th style="border: 1.0px solid;border-collapse: collapse;">Input Amount</th>
<th style="border: 1.0px solid;border-collapse: collapse;">Pay Amount</th> <th style="border: 1.0px solid;border-collapse: collapse;">Pay Amount</th>
@ -119,7 +118,6 @@
<td th:text="${order.system_transaction_id}" style="border: 1.0px solid;border-collapse: collapse;"></td> <td th:text="${order.system_transaction_id}" style="border: 1.0px solid;border-collapse: collapse;"></td>
<td th:text="${order.order_description}" style="border: 1.0px solid;border-collapse: collapse;"></td> <td th:text="${order.order_description}" style="border: 1.0px solid;border-collapse: collapse;"></td>
<td th:text="${order.customer_id}" style="border: 1.0px solid;border-collapse: collapse;"></td> <td th:text="${order.customer_id}" style="border: 1.0px solid;border-collapse: collapse;"></td>
<td th:text="${order.customer_ip}" style="border: 1.0px solid;border-collapse: collapse;"></td>
<td th:text="${order.total_amount}" style="border: 1.0px solid;border-collapse: collapse;"></td> <td th:text="${order.total_amount}" style="border: 1.0px solid;border-collapse: collapse;"></td>
<td th:text="${order.display_amount}" style="border: 1.0px solid;border-collapse: collapse;"></td> <td th:text="${order.display_amount}" style="border: 1.0px solid;border-collapse: collapse;"></td>
<td th:text="${order.customer_payment_amount}" style="border: 1.0px solid;border-collapse: collapse;"></td> <td th:text="${order.customer_payment_amount}" style="border: 1.0px solid;border-collapse: collapse;"></td>
@ -132,6 +130,7 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
<p th:if="${description != null}"><span th:text="${description}"></span></p>
<p>请查收关于被抽查的订单交易的相关信息,并在<span style="background: #FCE824"><span th:text="${reply_date}"></span>下午600 (悉尼时间)前</span>将所需材料直接回复该邮件,未能按时提交完整证明材料,支付渠道将被关停,请您务必配合调查。感谢。<br> <p>请查收关于被抽查的订单交易的相关信息,并在<span style="background: #FCE824"><span th:text="${reply_date}"></span>下午600 (悉尼时间)前</span>将所需材料直接回复该邮件,未能按时提交完整证明材料,支付渠道将被关停,请您务必配合调查。感谢。<br>
Please find sampled transactions in attachment, and reply required materials to this email <span style="background: #FCE824">before 6:00 pm <span th:text="${reply_date_english}"></span> (AEST).</span> If you can not provide qualified materials on time, the payment channels would be suspended or restricted with amount limit. Please be sure to assist the investigation. Thanks.</p> Please find sampled transactions in attachment, and reply required materials to this email <span style="background: #FCE824">before 6:00 pm <span th:text="${reply_date_english}"></span> (AEST).</span> If you can not provide qualified materials on time, the payment channels would be suspended or restricted with amount limit. Please be sure to assist the investigation. Thanks.</p>
<!--<p>请点击此链接上传所需材料。<a th:href="${uploadUrl}"><span th:text="${uploadUrl}"></span></a><br>--> <!--<p>请点击此链接上传所需材料。<a th:href="${uploadUrl}"><span th:text="${uploadUrl}"></span></a><br>-->

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

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

@ -68,19 +68,6 @@
<a role="button" class="btn btn-default btn-sm" <a role="button" class="btn btn-default btn-sm"
ng-click="thisYear()">This Year</a> ng-click="thisYear()">This Year</a>
</div> </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()"> <button class="btn btn-success" type="button" ng-click="loadSale()">
<i class="fa fa-search"></i> <i class="fa fa-search"></i>
</button> </button>

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

@ -83,7 +83,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
var removeClientPayDesc = function (items, key) { var removeClientPayDesc = function (items, key) {
for (var i = 0; i < items.length; i++) { for (var i = 0; i < items.length; i++) {
var item = items[i]; var item = items[i];
if (item.indexOf(key)>=0) { if (item.indexOf(key) >= 0) {
items.splice(items.indexOf(item), 1); items.splice(items.indexOf(item), 1);
i = i - 1; i = i - 1;
} }
@ -229,6 +229,18 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
}); });
}; };
$scope.exportPartnersExcel = function () {
var params = angular.copy($scope.params);
var param_str = keys(params).map(function (key) {
var value = params[key];
if (angular.isDate(value)) {
value = $filter('date')(value, 'yyyy-MM-ddTHH:mm:ssZ')
}
return key + '=' + encodeURIComponent(value)
}).join('&');
window.open('/sys/partners/exporting_excel?'+param_str)
};
/*$scope.loadLocations = function () { /*$scope.loadLocations = function () {
var params = angular.copy($scope.params); var params = angular.copy($scope.params);
$http.get('/sys/partners/merchant/list_locations', {params: params}).then(function (resp) { $http.get('/sys/partners/merchant/list_locations', {params: params}).then(function (resp) {
@ -415,7 +427,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
} }
} }
$scope.toggleClientPayType = function (type) { $scope.toggleClientPayType = function (type) {
if ($scope.partner.client_pay_type==null || $scope.partner.client_pay_type==undefined){ if ($scope.partner.client_pay_type == null || $scope.partner.client_pay_type == undefined) {
$scope.partner.client_pay_type = []; $scope.partner.client_pay_type = [];
} }
var $idx = $scope.partner.client_pay_type.indexOf(type); var $idx = $scope.partner.client_pay_type.indexOf(type);
@ -428,13 +440,13 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
} }
}; };
$scope.toggleClientPayDesc = function (type) { $scope.toggleClientPayDesc = function (type) {
if ($scope.partner.client_pay_desc==null || $scope.partner.client_pay_desc==undefined){ if ($scope.partner.client_pay_desc == null || $scope.partner.client_pay_desc == undefined) {
$scope.partner.client_pay_desc = []; $scope.partner.client_pay_desc = [];
} }
var $idx = $scope.partner.client_pay_desc.indexOf(type); var $idx = $scope.partner.client_pay_desc.indexOf(type);
if ($idx >= 0) { if ($idx >= 0) {
if (type == '203') { if (type == '203') {
removeClientPayDesc($scope.partner.client_pay_desc,'2030') removeClientPayDesc($scope.partner.client_pay_desc, '2030')
} }
$scope.partner.client_pay_desc.splice($idx, 1); $scope.partner.client_pay_desc.splice($idx, 1);
} else { } else {
@ -548,7 +560,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
$scope.merchantIsValid = false; $scope.merchantIsValid = false;
return; return;
} }
$http.get('/sys/partners/init/check_code_isvalid',{params:{clientMoniker:code}}).then(function (response) { $http.get('/sys/partners/init/check_code_isvalid', {params: {clientMoniker: code}}).then(function (response) {
$scope.merchantIsValid = response.data; $scope.merchantIsValid = response.data;
$scope.merchantCodeChecked = true; $scope.merchantCodeChecked = true;
}); });
@ -608,7 +620,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
alert("Logo is necessary!"); alert("Logo is necessary!");
return; return;
} }
if ($scope.partner.client_pay_type.indexOf('2')>=0) { if ($scope.partner.client_pay_type.indexOf('2') >= 0) {
if (!$scope.partner.company_photo) { if (!$scope.partner.company_photo) {
alert('Shop Photo1 is necessary'); alert('Shop Photo1 is necessary');
return; return;
@ -628,11 +640,11 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
}) })
} }
if ($scope.partner.client_pay_type.length==0) { if ($scope.partner.client_pay_type.length == 0) {
alert('请选择商户支付场景') alert('请选择商户支付场景')
return; return;
} }
if ($scope.partner.client_pay_desc.length==0) { if ($scope.partner.client_pay_desc.length == 0) {
alert('请选择商户支付方式') alert('请选择商户支付方式')
return; return;
} }
@ -647,7 +659,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
return; return;
} }
} }
if ( $scope.partner.client_pay_type.indexOf('2') >= 0) { if ($scope.partner.client_pay_type.indexOf('2') >= 0) {
if ($scope.partner.client_pay_desc.join(',').indexOf('20') < 0) { if ($scope.partner.client_pay_desc.join(',').indexOf('20') < 0) {
alert("请检查线下支付场景是否已选择支付方式"); alert("请检查线下支付场景是否已选择支付方式");
return; return;
@ -1260,7 +1272,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
var $idx = $scope.partner.client_pay_desc.indexOf(type); var $idx = $scope.partner.client_pay_desc.indexOf(type);
if ($idx >= 0) { if ($idx >= 0) {
if (type == '203') { if (type == '203') {
removeClientPayDesc($scope.partner.client_pay_desc,'2030') removeClientPayDesc($scope.partner.client_pay_desc, '2030')
} }
$scope.partner.client_pay_desc.splice($idx, 1); $scope.partner.client_pay_desc.splice($idx, 1);
} else { } else {
@ -1392,11 +1404,11 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
if (!origin_referrer_id && $scope.partner.referrer_id) { if (!origin_referrer_id && $scope.partner.referrer_id) {
content = 'Update partner info successfully,But You Had add new Referrer,Please Change the BD Commission Proportion!'; content = 'Update partner info successfully,But You Had add new Referrer,Please Change the BD Commission Proportion!';
} }
if ($scope.partner.client_pay_type.length==0) { if ($scope.partner.client_pay_type.length == 0) {
alert('请选择商户支付场景') alert('请选择商户支付场景')
return; return;
} }
if ($scope.partner.client_pay_desc.length==0) { if ($scope.partner.client_pay_desc.length == 0) {
alert('请选择商户支付方式') alert('请选择商户支付方式')
return; return;
} }
@ -1406,7 +1418,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
return; return;
} }
} }
if ( $scope.partner.client_pay_type.indexOf('2') >= 0) { if ($scope.partner.client_pay_type.indexOf('2') >= 0) {
if ($scope.partner.client_pay_desc.join(',').indexOf('20') < 0) { if ($scope.partner.client_pay_desc.join(',').indexOf('20') < 0) {
alert("请检查线下支付场景是否已选择支付方式"); alert("请检查线下支付场景是否已选择支付方式");
return; return;
@ -1768,7 +1780,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
commonDialog.confirm({ commonDialog.confirm({
title: 'Warning', title: 'Warning',
content: '是否使用该商户的现有信息进件?', content: '是否使用该商户的现有信息进件?',
json:$scope.alipayOnline_gms_json json: $scope.alipayOnline_gms_json
}).then(function () { }).then(function () {
$http.post('/sys/partners/' + $scope.partner.client_moniker + '/register/alipayOnline_gms').then(function () { $http.post('/sys/partners/' + $scope.partner.client_moniker + '/register/alipayOnline_gms').then(function () {
commonDialog.alert({title: 'Success', content: '提示AlipayOnline进件成功', type: 'success'}); commonDialog.alert({title: 'Success', content: '提示AlipayOnline进件成功', type: 'success'});
@ -2260,8 +2272,8 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
app.controller('partnerSubCtrl', ['$scope', '$http', '$uibModal', function ($scope, $http, $uibModal) { app.controller('partnerSubCtrl', ['$scope', '$http', '$uibModal', function ($scope, $http, $uibModal) {
$scope.toShow = false; $scope.toShow = false;
$scope.init = { $scope.init = {
child_each_refund : false, child_each_refund: false,
sub_manage : false sub_manage: false
} }
$scope.newSubClient = function () { $scope.newSubClient = function () {
@ -2865,7 +2877,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
var $idx = $scope.partner.client_pay_desc.indexOf(type); var $idx = $scope.partner.client_pay_desc.indexOf(type);
if ($idx >= 0) { if ($idx >= 0) {
if (type == '203') { if (type == '203') {
removeClientPayDesc($scope.partner.client_pay_desc,'2030') removeClientPayDesc($scope.partner.client_pay_desc, '2030')
} }
$scope.partner.client_pay_desc.splice($idx, 1); $scope.partner.client_pay_desc.splice($idx, 1);
} else { } else {
@ -2961,7 +2973,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
$scope.merchantIsValid = false; $scope.merchantIsValid = false;
return; return;
} }
$http.get('/sys/partners/init/check_code_isvalid',{params:{clientMoniker:code}}).then(function (response) { $http.get('/sys/partners/init/check_code_isvalid', {params: {clientMoniker: code}}).then(function (response) {
$scope.merchantIsValid = response.data; $scope.merchantIsValid = response.data;
$scope.merchantCodeChecked = true; $scope.merchantCodeChecked = true;
}); });
@ -3022,7 +3034,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
alert("Logo is necessary!"); alert("Logo is necessary!");
return; return;
} }
if ($scope.partner.client_pay_type.indexOf('2')>=0) { if ($scope.partner.client_pay_type.indexOf('2') >= 0) {
if (!$scope.partner.company_photo) { if (!$scope.partner.company_photo) {
alert('Shop Photo1 is necessary'); alert('Shop Photo1 is necessary');
return; return;
@ -3036,11 +3048,11 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
// alert("Please Locate Merchant Location!"); // alert("Please Locate Merchant Location!");
// return; // return;
// } // }
if ($scope.partner.client_pay_type.length==0) { if ($scope.partner.client_pay_type.length == 0) {
alert('请选择商户支付场景') alert('请选择商户支付场景')
return; return;
} }
if ($scope.partner.client_pay_desc.length==0) { if ($scope.partner.client_pay_desc.length == 0) {
alert('请选择商户支付方式') alert('请选择商户支付方式')
return; return;
} }
@ -3050,7 +3062,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
return; return;
} }
} }
if ( $scope.partner.client_pay_type.indexOf('2') >= 0) { if ($scope.partner.client_pay_type.indexOf('2') >= 0) {
if ($scope.partner.client_pay_desc.join(',').indexOf('20') < 0) { if ($scope.partner.client_pay_desc.join(',').indexOf('20') < 0) {
alert("请检查线下支付场景是否已选择支付方式"); alert("请检查线下支付场景是否已选择支付方式");
return; return;

@ -386,6 +386,9 @@
ng-click="loadPartners(1)"><i ng-click="loadPartners(1)"><i
class="fa fa-search"></i> Search class="fa fa-search"></i> Search
</button> </button>
<button class="btn btn-primary" type="button" ng-if="'export_clients_excel'|withFunc" ng-click="exportPartnersExcel()">
<i class="fa fa-save"></i> Export
</button>
<!-- 商户分布以及商户进件位置转移 --> <!-- 商户分布以及商户进件位置转移 -->
<!--<button ng-if="mapFrame" class="btn btn-primary" type="button" <!--<button ng-if="mapFrame" class="btn btn-primary" type="button"
ng-click="loadLocations()"><i ng-click="loadLocations()"><i

@ -587,6 +587,8 @@ input.value:focus {
height: 18px; height: 18px;
border: 1px solid #FFFFFF; border: 1px solid #FFFFFF;
border-radius: 0; border-radius: 0;
resize: none;
outline: none;
border-bottom-color: #BCBCBC; border-bottom-color: #BCBCBC;
-webkit-appearance: none; -webkit-appearance: none;
} }

@ -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