master
kira 6 years ago
parent 74e059180d
commit 74835ee47d

@ -2,8 +2,6 @@ package au.com.royalpay.payment.manage.analysis.core;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.springframework.web.multipart.MultipartFile;
import java.text.ParseException; import java.text.ParseException;
public interface PlatformClearService { public interface PlatformClearService {
@ -16,5 +14,5 @@ public interface PlatformClearService {
void generateSettleLogs(); void generateSettleLogs();
void doVerifyHFSettleLog(MultipartFile file, String start, String end); void doVerifyHFSettleLog(JSONObject param);
} }

@ -8,6 +8,7 @@ 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.core.PlatformClearService;
import au.com.royalpay.payment.manage.analysis.mappers.EstimateAnalysisMapper; import au.com.royalpay.payment.manage.analysis.mappers.EstimateAnalysisMapper;
import au.com.royalpay.payment.manage.mappers.log.PlatformSettlementMapper; 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.PageListUtils;
import au.com.royalpay.payment.tools.utils.TimeZoneUtils; import au.com.royalpay.payment.tools.utils.TimeZoneUtils;
@ -20,17 +21,17 @@ import com.github.miemiedev.mybatis.paginator.domain.PageList;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils; 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.Cell;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.bind.annotation.RequestMethod;
import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -43,6 +44,8 @@ import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import cn.yixblog.platform.http.HttpRequestGenerator;
@Service @Service
public class PlatformClearAnalysisServiceImpl implements PlatformClearService { public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
@ -58,6 +61,8 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
private PlatformSettlementMapper platformSettlementMapper; private PlatformSettlementMapper platformSettlementMapper;
@Resource @Resource
private EstimateAnalysisMapper estimateAnalysisMapper; private EstimateAnalysisMapper estimateAnalysisMapper;
@Resource
private AttachmentClient attachmentClient;
@Override @Override
public JSONObject getPlatformSettleLog(String channel, int page, int limit) { public JSONObject getPlatformSettleLog(String channel, int page, int limit) {
@ -366,8 +371,11 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
} }
@Override @Override
public void doVerifyHFSettleLog(MultipartFile file, String start, String end) { public void doVerifyHFSettleLog(JSONObject param) {
JSONObject hfSettle = handleHFSettleFile(file);
String end = param.getString("end");
String start = param.getString("start");
JSONObject hfSettle = handleHFSettleFile(param.getString("fileId"));
if (hfSettle == null) { if (hfSettle == null) {
return; return;
} }
@ -394,7 +402,7 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
List<JSONObject> check = null; List<JSONObject> check = null;
try { try {
check = platformSettlementMapper.findBySettleDate(DateUtils.parseDate(end, "YYYY-MM-dd"), "hf"); check = platformSettlementMapper.findBySettleDate(DateUtils.parseDate(end, "yyyy-MM-dd"), "hf");
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -408,10 +416,11 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
} }
private JSONObject handleHFSettleFile(MultipartFile file) { private JSONObject handleHFSettleFile(String fileId) {
try { try {
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); HttpRequestGenerator gen = new HttpRequestGenerator(attachmentClient.getFileUrl(fileId), RequestMethod.GET);
XSSFSheet sheet = workbook.getSheetAt(0); HSSFWorkbook workbook = new HSSFWorkbook(gen.execute().getResponseContentStream());
HSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.rowIterator(); Iterator<Row> rowIterator = sheet.rowIterator();
Row row = null; Row row = null;
Cell cell = null; Cell cell = null;
@ -423,46 +432,38 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
BigDecimal clearingAmount = BigDecimal.ZERO; BigDecimal clearingAmount = BigDecimal.ZERO;
while (rowIterator.hasNext()) { while (rowIterator.hasNext()) {
row = rowIterator.next(); row = rowIterator.next();
cell = row.getCell(14);
cell = row.getCell(0);
if (cell != null) {
continue;
}
cell = row.getCell(15);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
if (cell != null) { if (cell != null) {
String orderAmountStr = cell.getStringCellValue().trim(); String orderAmountStr = cell.getStringCellValue().trim();
if (StringUtils.isNotEmpty(orderAmountStr)) { if (StringUtils.isNotEmpty(orderAmountStr)) {
BigDecimal cellVar = new BigDecimal(orderAmountStr); result.put("orderAmount", new BigDecimal(orderAmountStr));
if (orderAmount.compareTo(cellVar) == 0) {
result.put("orderAmount", orderAmount);
} else {
orderAmount = orderAmount.add(cellVar);
}
} }
} }
cell = row.getCell(15); cell = row.getCell(16);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
if (cell != null) { if (cell != null) {
String surchargeStr = cell.getStringCellValue().trim(); String surchargeStr = cell.getStringCellValue().trim();
if (StringUtils.isNotEmpty(surchargeStr)) { if (StringUtils.isNotEmpty(surchargeStr)) {
BigDecimal cellVar = new BigDecimal(surchargeStr); result.put("surcharge", new BigDecimal(surchargeStr));
if (surcharge.compareTo(cellVar) == 0) {
result.put("orderAmount", surcharge);
} else {
surcharge = surcharge.add(cellVar);
}
} }
} }
cell = row.getCell(16); cell = row.getCell(17);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
if (cell != null) { if (cell != null) {
String clearingAmounStr = cell.getStringCellValue().trim(); String clearingAmounStr = cell.getStringCellValue().trim();
if (StringUtils.isNotEmpty(clearingAmounStr)) { if (StringUtils.isNotEmpty(clearingAmounStr)) {
BigDecimal cellVar = new BigDecimal(clearingAmounStr); result.put("clearingAmount", new BigDecimal(clearingAmounStr));
if (clearingAmount.compareTo(cellVar) == 0) {
result.put("clearingAmount", clearingAmount);
} else {
clearingAmount = clearingAmount.add(cellVar);
}
} }
} }
return result;
} }
return result; return result;
} catch (IOException e) { } catch (Exception e) {
logger.debug("处理汇付清算文件出错", e); logger.debug("处理汇付清算文件出错", e);
} }
return null; return null;
@ -474,13 +475,15 @@ public class PlatformClearAnalysisServiceImpl implements PlatformClearService {
JSONObject creditLogs = platformSettlementMapper.calculateSysSettleLog(start, end, "hf", "Credit", new BigDecimal(0.008)); JSONObject creditLogs = platformSettlementMapper.calculateSysSettleLog(start, end, "hf", "Credit", new BigDecimal(0.008));
result.put("sys_pay_fee", creditLogs.getBigDecimal("aud_amount")); result.put("sys_pay_fee", creditLogs.getBigDecimal("aud_amount"));
JSONObject debitLogs = platformSettlementMapper.calculateSysSettleLog(start, end, "hf", "Debit", new BigDecimal(0.008)); 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_refund_fee", debitLogs.getBigDecimal("aud_amount"));
result.put("sys_net_fee", creditLogs.getBigDecimal("aud_amount").subtract(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"))); result.put("sys_settle_fee", result.getBigDecimal("sys_net_fee").subtract(result.getBigDecimal("sys_surcharge")));
result.put("sys_surcharge", platformSettlementMapper.calculateRmbCharge(start, end, "hf", new BigDecimal(0.008)));
return result; return result;
} catch (Exception ignore) { } catch (Exception ignore) {
ignore.printStackTrace();
} }
return null; return null;
} }
} }

@ -7,11 +7,11 @@ import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.text.ParseException; import java.text.ParseException;
@ -45,7 +45,7 @@ public class PlatformClearAController {
} }
@ManagerMapping(value = "/generate/hf/settle", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.DEVELOPER}) @ManagerMapping(value = "/generate/hf/settle", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR, ManagerRole.DEVELOPER})
public void generatehfSettleLogs(@RequestParam("file") MultipartFile settleFile,@RequestParam String start,@RequestParam String end) { public void generatehfSettleLogs(@RequestBody JSONObject param) {
platformClearService.doVerifyHFSettleLog(settleFile,start,end); platformClearService.doVerifyHFSettleLog(param);
} }
} }

@ -16,7 +16,7 @@ define(['angular', 'decimal', 'uiRouter', 'angularEcharts', '../../analysis/repo
}); });
}]); }]);
app.controller('platformSettleLogCtrl', ['$scope', '$http', '$state','Upload','commonDialog', function ($scope, $http, $state,Upload, commonDialog) { app.controller('platformSettleLogCtrl', ['$scope', '$http', '$state','$filter','Upload','commonDialog', function ($scope, $http, $state,$filter,Upload, commonDialog) {
$scope.wechatPagination = {}; $scope.wechatPagination = {};
$scope.loadWechatLogs = function (page) { $scope.loadWechatLogs = function (page) {
@ -106,21 +106,38 @@ define(['angular', 'decimal', 'uiRouter', 'angularEcharts', '../../analysis/repo
$scope.loadhfLogs(1); $scope.loadhfLogs(1);
$scope.uploadhfSettleFile = function (file) { $scope.uploadhfSettleFile = function (file) {
$scope.hfParam.file=file; if (file != null) {
if(!$scope.hfParam.start){ Upload.upload({
url: '/attachment/secret_files',
data: {file: file}
}).then(function (resp) {
$scope.hfParam.fileId = resp.data.fileid;
commonDialog.alert({title: 'Upload Success', content:'', type: 'success'})
}, function (resp) {
}, function (evt) {
})
}
};
$scope.dohfSettle = function () {
var param = angular.copy($scope.hfParam);
if(!param.start){
alert("请先选择开始时间"); alert("请先选择开始时间");
} }
if(!$scope.hfParam.end){ if(!param.end){
alert("请先选择结束时间"); alert("请先选择结束时间");
} }
var param = angular.copy($scope.hfParam); if(!param.fileId){
if (file != null) { alert("请先上传汇付清算文件");
Upload.upload({ }
url: '/platform/analysis/generate/hf/settle', param.start = $filter('date')(param.start, "yyyy-MM-dd");
data: param param.end = $filter('date')(param.end, "yyyy-MM-dd");
$http.put('/platform/analysis/generate/hf/settle',param).then(function (resp) {
}); });
} }
};
}]); }]);
app.controller('platformRevenueRootCtrl', ['$scope', '$http', '$filter', 'chartParser', function ($scope, $http, $filter, chartParser) { app.controller('platformRevenueRootCtrl', ['$scope', '$http', '$filter', 'chartParser', function ($scope, $http, $filter, chartParser) {

@ -280,15 +280,15 @@
<div style="display: inline-block"> <div style="display: inline-block">
<input class="form-control" <input class="form-control"
ng-model="hfParam.start" ng-model="hfParam.start"
uib-datepicker-popup size="10" placeholder="From" uib-datepicker-popup size="10" placeholder="start"
is-open="start.open" is-open="start.open"
ng-click="start.open=true" ng-click="start.open=true"
datepicker-options="{maxDate:hfParam.start||today}"> datepicker-options="{maxDate:hfParam.end}">
</div> </div>
<div style="display: inline-block"> <div style="display: inline-block">
<input class="form-control" <input class="form-control"
ng-model="hfParam.end" ng-model="hfParam.end"
uib-datepicker-popup size="10" placeholder="From" uib-datepicker-popup size="10" placeholder="end"
is-open="end.open" is-open="end.open"
ng-click="end.open=true" ng-click="end.open=true"
datepicker-options="{maxDate:hfParam.end||today}"> datepicker-options="{maxDate:hfParam.end||today}">
@ -296,7 +296,12 @@
<button class="btn btn-primary" type="button" <button class="btn btn-primary" type="button"
ngf-select="uploadhfSettleFile($file)"> ngf-select="uploadhfSettleFile($file)">
<i class="fa fa-upload"></i> Upload Courier Photo <i class="fa fa-upload"></i> Upload Settle File
</button>
<button class="btn btn-primary" type="button"
ng-click="dohfSettle()">
<i class="fa fa-upload"></i> Do Settlement
</button> </button>

Loading…
Cancel
Save