fix导出商户交易流水详情

master
yangkai 6 years ago
parent c40e0d8bb1
commit 516a5014dc

@ -672,64 +672,99 @@ public class TradeLogServiceImpl implements TradeLogService {
} }
@Override @Override
public void exportExcel(TradeLogQuery query, JSONObject partner, HttpServletResponse response) throws Exception { public void exportExcel(TradeLogQuery query, JSONObject partner, HttpServletResponse resp) throws Exception {
logger.debug("excel The method======= exportExcel() start......................."); logger.debug("excel The method======= exportExcel() start.......................");
JSONObject transFlow = listPartnerTransFlow(query, partner); JSONObject transFlow = listPartnerTransFlow(query, partner);
// JSONObject analysis = transFlow.getJSONObject("analysis"); // JSONObject analysis = transFlow.getJSONObject("analysis");
if (transFlow.getJSONArray("data").size() > 0) { if (transFlow.getJSONArray("data").size() > 0) {
OutputStream ous = null;
try { try {
List<JSONObject> dataList = (List<JSONObject>) transFlow.get("data"); List<JSONObject> dataList = (List<JSONObject>) transFlow.get("data");
String transType; String transType;
JSONObject device; JSONObject device;
int status; int status;
for (JSONObject data : dataList) { resp.setContentType("application/octet-stream;");
transType = data.getString("trans_type"); resp.addHeader("Content-Disposition",
if (!"refund".equals(transType)) "attachment; filename=" + "Merchant_Settlement_Info_" + query.getDatefrom() + "_" + query.getDateto() + ".xlsx");
continue; ous = resp.getOutputStream();
status = data.getIntValue("status"); Workbook wb = new XSSFWorkbook();
if (status == 6) Font font = wb.createFont();
transType = "Partly " + transType; font.setBoldweight(Font.BOLDWEIGHT_BOLD);
else if (status == 7) { font.setFontHeightInPoints((short) 10);
transType = "Fully " + transType; CellStyle analysisStyle = wb.createCellStyle();
analysisStyle.setFont(font);
String[] clientIds = query.getClient_ids();
List<String> clientIdList = new ArrayList<>();
clientIdList.add("ALL");
if (clientIds.length >= 2) {
clientIdList.addAll(Arrays.asList(clientIds));
}
Sheet sheet = null;
JSONObject client = null;
for (int i = 0;i < clientIdList.size();i++) {
if (i == 0) {
sheet = wb.createSheet("ALL");
} else {
client = clientManager.getClientInfo(Integer.parseInt(clientIdList.get(i)));
sheet = wb.createSheet(client == null ? clientIdList.get(i) : client.getString("client_moniker"));
}
int rowNum = 0;
Row row = sheet.createRow(rowNum);
String[] title = {"Transaction Time", "Client Order ID", "System Order ID", "Client Moniker", "Short Name", "Order ID", "Channel", "Input Amount", "Transaction Amount", "Transaction Currency", "Clearing Amount", "Exchange Rate",
"Transaction Type", "Clearing Status", "Gateway", "Remark", "Dev No"};
for (int j = 0; j < title.length; j++) {
row.createCell(j, Cell.CELL_TYPE_STRING).setCellValue(title[j]);
}
String platformCurrency = PlatformEnvironment.getEnv().getForeignCurrency();
for (JSONObject data : dataList) {
if (!clientIdList.get(i).equals(data.getString("client_id")) && i != 0) {
continue;
}
if (i == 0) {
transType = data.getString("trans_type");
if (!"refund".equals(transType)) {
status = data.getIntValue("status");
if (status == 6)
transType = "Partly " + transType;
else if (status == 7) {
transType = "Fully " + transType;
}
}
data.put("trans_type", transType);
device = clientDeviceMapper.find(data.getString("order_dev_id"));
if (device != null)
data.put("dev_id", device.getString("client_dev_id"));
scaleDecimalVal(data, "display_amount", platformCurrency);
scaleDecimalVal(data, "transaction_amount", platformCurrency);
scaleDecimalVal(data, "clearing_amount", platformCurrency);
}
row = sheet.createRow(++rowNum);
row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(data.getString("transaction_time"));
row.createCell(1, Cell.CELL_TYPE_STRING).setCellValue(data.getString("client_order_id"));
row.createCell(2, Cell.CELL_TYPE_STRING).setCellValue(data.getString("system_transaction_id"));
row.createCell(3, Cell.CELL_TYPE_STRING).setCellValue(data.getString("client_moniker"));
row.createCell(4, Cell.CELL_TYPE_STRING).setCellValue(data.getString("short_name"));
row.createCell(5, Cell.CELL_TYPE_STRING).setCellValue(data.getString("order_id"));
row.createCell(6, Cell.CELL_TYPE_STRING).setCellValue(data.getString("channel"));
row.createCell(7, Cell.CELL_TYPE_STRING).setCellValue(data.getString("display_amount"));
row.createCell(8, Cell.CELL_TYPE_STRING).setCellValue(data.getString("transaction_amount"));
row.createCell(9, Cell.CELL_TYPE_STRING).setCellValue(data.getString("currency"));
row.createCell(10, Cell.CELL_TYPE_STRING).setCellValue(data.getString("clearing_amount"));
row.createCell(11, Cell.CELL_TYPE_STRING).setCellValue(data.getString("trans_type").equals("clearing")?"-":data.getBigDecimal("exchange_rate").toString());
row.createCell(12, Cell.CELL_TYPE_STRING).setCellValue(data.getString("trans_type"));
row.createCell(13, Cell.CELL_TYPE_STRING).setCellValue(data.getString("clear_status"));
row.createCell(14, Cell.CELL_TYPE_STRING).setCellValue(data.getString("gateway"));
row.createCell(15, Cell.CELL_TYPE_STRING).setCellValue(data.getString("order_detail"));
row.createCell(16, Cell.CELL_TYPE_STRING).setCellValue(data.getString("dev_id"));
} }
data.put("trans_type", transType);
device = clientDeviceMapper.find(data.getString("order_dev_id"));
if (device != null)
data.put("dev_id", device.getString("client_dev_id"));
} }
JSONObject parmerters = new JSONObject(); wb.write(ous);
parmerters.put("dateFrom", StringUtils.isNotBlank(query.getDatefrom()) ? query.getDatefrom() : ""); ous.flush();
parmerters.put("dateTo", StringUtils.isNotBlank(query.getDateto()) ? query.getDateto() : DateFormatUtils.format(new Date(), "yyyyMMdd")); } catch (IOException e) {
parmerters.put("partnerCode", partner.getString("client_moniker"));
// parmerters.put("actual_fee", analysis.containsKey("actual_fee") ?
// analysis.getBigDecimal("actual_fee") : 0);
JRDataSource jrDataSource = new JRBeanCollectionDataSource(dataList);
response.setContentType("application/vnd.ms-excel");
String fileName = StringUtils.isEmpty(parmerters.getString("dateFrom")) ? parmerters.getString("dateTo")
: (parmerters.getString("dateFrom") + "~" + parmerters.getString("dateTo"));
// String fileName = new String(URLEncoder.encode(defaultname,"utf8"));
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
OutputStream outputStream = response.getOutputStream();
JasperPrint jasperPrint = JasperFillManager.fillReport(trans_excel.getInputStream(), parmerters, jrDataSource);
// JRXlsExporter exporter = new JRXlsExporter();
JRXlsxExporter exporter = new JRXlsxExporter();
ExporterInput exporterInput = new SimpleExporterInput(jasperPrint);
exporter.setExporterInput(exporterInput);
OutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput(outputStream);
exporter.setExporterOutput(exporterOutput);
// 设置导出时参数
SimpleXlsxReportConfiguration xlsReportConfiguration = new SimpleXlsxReportConfiguration();
xlsReportConfiguration.setOnePagePerSheet(false);
xlsReportConfiguration.setRemoveEmptySpaceBetweenRows(true);
xlsReportConfiguration.setDetectCellType(true);
xlsReportConfiguration.setWhitePageBackground(false);
exporter.setConfiguration(xlsReportConfiguration);
exporter.exportReport();
outputStream.close();
} catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
IOUtils.closeQuietly(ous);
} }
} }
} }

@ -58,6 +58,8 @@
<select id="listTransFlow" resultType="com.alibaba.fastjson.JSONObject"> <select id="listTransFlow" resultType="com.alibaba.fastjson.JSONObject">
SELECT t.*, SELECT t.*,
o.status, o.status,
c.client_moniker,
c.short_name,
o.dev_id order_dev_id, o.dev_id order_dev_id,
ifnull(o.client_order_id,'--') client_order_id, ifnull(o.client_order_id,'--') client_order_id,
if(t.channel='Settlement','clearing', if(t.channel='Settlement','clearing',
@ -109,6 +111,7 @@
FROM pmt_transactions t FROM pmt_transactions t
LEFT JOIN pmt_orders o ON o.order_id=t.order_id LEFT JOIN pmt_orders o ON o.order_id=t.order_id
left join sys_customer_relation_alipay ra on ra.alipay_uid = o.customer_id left join sys_customer_relation_alipay ra on ra.alipay_uid = o.customer_id
LEFT JOIN sys_clients c on c.client_id = t.client_id
<where> <where>
<if test="client_ids!=null"> <if test="client_ids!=null">
AND t.client_id IN AND t.client_id IN

Loading…
Cancel
Save