|
|
|
@ -8,33 +8,50 @@ import au.com.royalpay.payment.channels.wechat.runtime.beans.SettlementLog;
|
|
|
|
|
import au.com.royalpay.payment.manage.analysis.core.PlatformClearService;
|
|
|
|
|
import au.com.royalpay.payment.manage.analysis.mappers.EstimateAnalysisMapper;
|
|
|
|
|
import au.com.royalpay.payment.manage.mappers.log.PlatformSettlementMapper;
|
|
|
|
|
import au.com.royalpay.payment.tools.connections.attachment.core.AttachmentClient;
|
|
|
|
|
import au.com.royalpay.payment.tools.utils.PageListUtils;
|
|
|
|
|
import au.com.royalpay.payment.tools.utils.TimeZoneUtils;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.github.miemiedev.mybatis.paginator.domain.Order;
|
|
|
|
|
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
|
|
|
|
|
import com.github.miemiedev.mybatis.paginator.domain.PageList;
|
|
|
|
|
|
|
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
|
|
|
|
import org.apache.commons.lang3.time.DateUtils;
|
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFCell;
|
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
|
|
import org.apache.poi.ss.usermodel.Cell;
|
|
|
|
|
import org.apache.poi.ss.usermodel.Row;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.text.ParseException;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
|
|
|
|
import cn.yixblog.platform.http.HttpRequestGenerator;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
|
|
|
|
|
private Logger logger = LoggerFactory.getLogger(getClass());
|
|
|
|
|
public static final SimpleDateFormat sdfClear = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
public static final SimpleDateFormat sdfNormal = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
public static final SimpleDateFormat sdfNormal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private MpPaymentApi mpPaymentApi;
|
|
|
|
@ -44,10 +61,13 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
private PlatformSettlementMapper platformSettlementMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private EstimateAnalysisMapper estimateAnalysisMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private AttachmentClient attachmentClient;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public JSONObject getPlatformSettleLog(String channel, int page, int limit) {
|
|
|
|
|
PageList<JSONObject> list = platformSettlementMapper.findSettleLogsAllMerchant(channel, new PageBounds(page, limit, Order.formString("settle_date.desc")));
|
|
|
|
|
PageList<JSONObject> list = platformSettlementMapper.findSettleLogsAllMerchant(channel,
|
|
|
|
|
new PageBounds(page, limit, Order.formString("settle_date.desc")));
|
|
|
|
|
return PageListUtils.buildPageListResult(list);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -62,9 +82,10 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
|
|
|
|
|
sysLogs.put("surcharge", creditLogs.getBigDecimal("charge_amount").subtract(debitLogs.getBigDecimal("charge_amount")));
|
|
|
|
|
|
|
|
|
|
sysLogs.put("sys_settle_amount", sysLogs.getBigDecimal("sys_pay_fee").subtract(sysLogs.getBigDecimal("sys_refund_fee")).subtract(sysLogs.getBigDecimal("surcharge")));
|
|
|
|
|
sysLogs.put("start_date","2018-04-05");
|
|
|
|
|
sysLogs.put("end_date",sdfClear.format(new Date()));
|
|
|
|
|
sysLogs.put("sys_settle_amount",
|
|
|
|
|
sysLogs.getBigDecimal("sys_pay_fee").subtract(sysLogs.getBigDecimal("sys_refund_fee")).subtract(sysLogs.getBigDecimal("surcharge")));
|
|
|
|
|
sysLogs.put("start_date", "2018-04-05");
|
|
|
|
|
sysLogs.put("end_date", sdfClear.format(new Date()));
|
|
|
|
|
return sysLogs;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -87,10 +108,10 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
if (StringUtils.equals("Wechat", channel)) {
|
|
|
|
|
try {
|
|
|
|
|
Map<String, Date> settleDate = new HashMap<>();
|
|
|
|
|
settleDate.put("from",sdfClear.parse(start_date));
|
|
|
|
|
settleDate.put("to",sdfClear.parse(end_date));
|
|
|
|
|
settleDate.put("from", sdfClear.parse(start_date));
|
|
|
|
|
settleDate.put("to", sdfClear.parse(end_date));
|
|
|
|
|
doVerifyWechatSettleLog(settleDate);
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
logger.error("PlatformClearAnalysisServiceImpl.verifySettleLogByDate ==> 校验" + end_date + "微信到账失败:", e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -98,9 +119,9 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
// @Transactional
|
|
|
|
|
// @Transactional
|
|
|
|
|
public void generateSettleLogs() {
|
|
|
|
|
// deleteSettleLogs();
|
|
|
|
|
// deleteSettleLogs();
|
|
|
|
|
generateWechatSettleLogs();
|
|
|
|
|
generateAlipaySettleLogs();
|
|
|
|
|
generateAlipayOnlineSettleLogs();
|
|
|
|
@ -193,8 +214,7 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void doVerifyWechatSettleLog(Map<String, Date> settleDate){
|
|
|
|
|
public void doVerifyWechatSettleLog(Map<String, Date> settleDate) {
|
|
|
|
|
List<SettlementLog> tencentSettle = new ArrayList<>();
|
|
|
|
|
for (WeChatPayConfig.Merchant mch : WechatPayEnvironment.getEnv().getWechatMerchantConfigs()) {
|
|
|
|
|
try {
|
|
|
|
@ -209,15 +229,15 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
params.put("end_date", settle.getEnd());
|
|
|
|
|
params.put("channel", "Wechat");
|
|
|
|
|
params.put("last_update_date", new Date());
|
|
|
|
|
JSONObject sysClearData = getSystemClearingAmount(null,settle,"Wechat");
|
|
|
|
|
if(sysClearData!=null && sysClearData.size()>0){
|
|
|
|
|
params.put("sys_pay_fee",sysClearData.getBigDecimal("sys_pay_fee"));
|
|
|
|
|
params.put("sys_refund_fee",sysClearData.getBigDecimal("sys_refund_fee"));
|
|
|
|
|
params.put("sys_net_fee",sysClearData.getBigDecimal("sys_net_fee"));
|
|
|
|
|
params.put("sys_surcharge",sysClearData.getBigDecimal("sys_surcharge"));
|
|
|
|
|
params.put("sys_settlement_fee",sysClearData.getBigDecimal("sys_settle_fee"));
|
|
|
|
|
}
|
|
|
|
|
params.put("merchants",mch.getMerchantId());
|
|
|
|
|
JSONObject sysClearData = getSystemClearingAmount(null, settle, "Wechat");
|
|
|
|
|
if (sysClearData != null && sysClearData.size() > 0) {
|
|
|
|
|
params.put("sys_pay_fee", sysClearData.getBigDecimal("sys_pay_fee"));
|
|
|
|
|
params.put("sys_refund_fee", sysClearData.getBigDecimal("sys_refund_fee"));
|
|
|
|
|
params.put("sys_net_fee", sysClearData.getBigDecimal("sys_net_fee"));
|
|
|
|
|
params.put("sys_surcharge", sysClearData.getBigDecimal("sys_surcharge"));
|
|
|
|
|
params.put("sys_settlement_fee", sysClearData.getBigDecimal("sys_settle_fee"));
|
|
|
|
|
}
|
|
|
|
|
params.put("merchants", mch.getMerchantId());
|
|
|
|
|
params.put("pay_fee", settle.getPayFee());
|
|
|
|
|
params.put("refund_fee", settle.getRefundFee());
|
|
|
|
|
params.put("net_fee", settle.getPayNetFee());
|
|
|
|
@ -225,7 +245,8 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
params.put("surcharge", settle.getPoundageFee());
|
|
|
|
|
params.put("unsettle_fee", settle.getUnsettlementFee());
|
|
|
|
|
|
|
|
|
|
JSONObject check = platformSettlementMapper.findByDateMerchant(sdfClear.format(settle.getSettlementDate()), "Wechat", mch.getMerchantId());
|
|
|
|
|
JSONObject check = platformSettlementMapper.findByDateMerchant(sdfClear.format(settle.getSettlementDate()), "Wechat",
|
|
|
|
|
mch.getMerchantId());
|
|
|
|
|
if (check != null) {
|
|
|
|
|
params.put("log_id", check.getString("log_id"));
|
|
|
|
|
platformSettlementMapper.update(params);
|
|
|
|
@ -242,7 +263,6 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public JSONObject getAliSettle(JSONObject aliSettleLog) {
|
|
|
|
|
JSONObject alipaySettleLog = new JSONObject();
|
|
|
|
|
|
|
|
|
@ -287,8 +307,8 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
}
|
|
|
|
|
alipaySettleLog.put("debit", debit);
|
|
|
|
|
alipaySettleLog.put("net_fee", credit.subtract(debit));
|
|
|
|
|
alipaySettleLog.put("surcharge",creditFee.subtract(debitFee));
|
|
|
|
|
alipaySettleLog.put("settlement_fee",creditSettle.subtract(debitSettle));
|
|
|
|
|
alipaySettleLog.put("surcharge", creditFee.subtract(debitFee));
|
|
|
|
|
alipaySettleLog.put("settlement_fee", creditSettle.subtract(debitSettle));
|
|
|
|
|
logger.info("阿里清算日志:" + alipaySettleLog.toJSONString());
|
|
|
|
|
return alipaySettleLog;
|
|
|
|
|
}
|
|
|
|
@ -317,11 +337,11 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//2017-11-01后微信手续费0.5
|
|
|
|
|
// 2017-11-01后微信手续费0.5
|
|
|
|
|
BigDecimal wechat_rate;
|
|
|
|
|
if(end_date.compareTo("2017-11-01 03:00:00")<=0){
|
|
|
|
|
if (end_date.compareTo("2017-11-01 03:00:00") <= 0) {
|
|
|
|
|
wechat_rate = new BigDecimal("0.006");
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
wechat_rate = new BigDecimal("0.005");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -344,9 +364,126 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
|
|
|
|
|
return sysLogs;
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
//do nothing
|
|
|
|
|
// do nothing
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doVerifyHFSettleLog(JSONObject param) {
|
|
|
|
|
|
|
|
|
|
String end = param.getString("end");
|
|
|
|
|
String start = param.getString("start");
|
|
|
|
|
JSONObject hfSettle = handleHFSettleFile(param.getString("fileId"));
|
|
|
|
|
if (hfSettle == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
JSONObject record = new JSONObject();
|
|
|
|
|
record.put("settle_date", end);
|
|
|
|
|
record.put("start_date", start);
|
|
|
|
|
record.put("end_date", end);
|
|
|
|
|
record.put("channel", "hf");
|
|
|
|
|
record.put("last_update_date", new Date());
|
|
|
|
|
JSONObject syscleardata = getHFSystemClearingAmount(start, end);
|
|
|
|
|
if (syscleardata != null && syscleardata.size() > 0) {
|
|
|
|
|
record.put("sys_pay_fee", syscleardata.getBigDecimal("sys_pay_fee"));
|
|
|
|
|
record.put("sys_refund_fee", syscleardata.getBigDecimal("sys_refund_fee"));
|
|
|
|
|
record.put("sys_net_fee", syscleardata.getBigDecimal("sys_net_fee"));
|
|
|
|
|
record.put("sys_surcharge", syscleardata.getBigDecimal("sys_surcharge"));
|
|
|
|
|
record.put("sys_settlement_fee", syscleardata.getBigDecimal("sys_settle_fee"));
|
|
|
|
|
}
|
|
|
|
|
record.put("pay_fee", BigDecimal.ZERO);
|
|
|
|
|
record.put("refund_fee", BigDecimal.ZERO);
|
|
|
|
|
record.put("net_fee", hfSettle.getBigDecimal("orderAmount"));
|
|
|
|
|
record.put("settlement_fee", hfSettle.getBigDecimal("clearingAmount"));
|
|
|
|
|
record.put("surcharge", hfSettle.getBigDecimal("surcharge"));
|
|
|
|
|
record.put("unsettle_fee", BigDecimal.ZERO);
|
|
|
|
|
|
|
|
|
|
List<JSONObject> check = null;
|
|
|
|
|
try {
|
|
|
|
|
check = platformSettlementMapper.findBySettleDate(DateUtils.parseDate(end, "yyyy-MM-dd"), "hf");
|
|
|
|
|
} catch (ParseException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
if (CollectionUtils.isNotEmpty(check)) {
|
|
|
|
|
record.put("log_id", check.get(0).getString("log_id"));
|
|
|
|
|
platformSettlementMapper.update(record);
|
|
|
|
|
} else {
|
|
|
|
|
platformSettlementMapper.save(record);
|
|
|
|
|
}
|
|
|
|
|
logger.info("汇付清算记录查询完成");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private JSONObject handleHFSettleFile(String fileId) {
|
|
|
|
|
try {
|
|
|
|
|
HttpRequestGenerator gen = new HttpRequestGenerator(attachmentClient.getFileUrl(fileId), RequestMethod.GET);
|
|
|
|
|
HSSFWorkbook workbook = new HSSFWorkbook(gen.execute().getResponseContentStream());
|
|
|
|
|
HSSFSheet sheet = workbook.getSheetAt(0);
|
|
|
|
|
Iterator<Row> rowIterator = sheet.rowIterator();
|
|
|
|
|
Row row = null;
|
|
|
|
|
Cell cell = null;
|
|
|
|
|
// 跳过第一行
|
|
|
|
|
rowIterator.next();
|
|
|
|
|
JSONObject result = new JSONObject();
|
|
|
|
|
BigDecimal orderAmount = BigDecimal.ZERO;
|
|
|
|
|
BigDecimal surcharge = BigDecimal.ZERO;
|
|
|
|
|
BigDecimal clearingAmount = BigDecimal.ZERO;
|
|
|
|
|
while (rowIterator.hasNext()) {
|
|
|
|
|
row = rowIterator.next();
|
|
|
|
|
|
|
|
|
|
cell = row.getCell(0);
|
|
|
|
|
if (cell != null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
cell = row.getCell(15);
|
|
|
|
|
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
|
|
if (cell != null) {
|
|
|
|
|
String orderAmountStr = cell.getStringCellValue().trim();
|
|
|
|
|
if (StringUtils.isNotEmpty(orderAmountStr)) {
|
|
|
|
|
result.put("orderAmount", new BigDecimal(orderAmountStr));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
cell = row.getCell(16);
|
|
|
|
|
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
|
|
if (cell != null) {
|
|
|
|
|
String surchargeStr = cell.getStringCellValue().trim();
|
|
|
|
|
if (StringUtils.isNotEmpty(surchargeStr)) {
|
|
|
|
|
result.put("surcharge", new BigDecimal(surchargeStr));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
cell = row.getCell(17);
|
|
|
|
|
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
|
|
if (cell != null) {
|
|
|
|
|
String clearingAmounStr = cell.getStringCellValue().trim();
|
|
|
|
|
if (StringUtils.isNotEmpty(clearingAmounStr)) {
|
|
|
|
|
result.put("clearingAmount", new BigDecimal(clearingAmounStr));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
logger.debug("处理汇付清算文件出错", e);
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private JSONObject getHFSystemClearingAmount(String start, String end) {
|
|
|
|
|
JSONObject result = new JSONObject();
|
|
|
|
|
try {
|
|
|
|
|
JSONObject creditLogs = platformSettlementMapper.calculateSysSettleLog(start, end, "hf", "Credit", new BigDecimal(0.008));
|
|
|
|
|
result.put("sys_pay_fee", creditLogs.getBigDecimal("aud_amount"));
|
|
|
|
|
JSONObject debitLogs = platformSettlementMapper.calculateSysSettleLog(start, end, "hf", "Debit", new BigDecimal(0.008));
|
|
|
|
|
result.put("sys_surcharge", platformSettlementMapper.calculateRmbCharge(start, end, "hf", new BigDecimal(0.008)));
|
|
|
|
|
result.put("sys_refund_fee", debitLogs.getBigDecimal("aud_amount"));
|
|
|
|
|
result.put("sys_net_fee", creditLogs.getBigDecimal("aud_amount").subtract(debitLogs.getBigDecimal("aud_amount")));
|
|
|
|
|
result.put("sys_settle_fee", result.getBigDecimal("sys_net_fee").subtract(result.getBigDecimal("sys_surcharge")));
|
|
|
|
|
return result;
|
|
|
|
|
} catch (Exception ignore) {
|
|
|
|
|
ignore.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|