Merge branch 'tradebill'

This commit is contained in:
ZZ 2021-12-28 11:31:13 +08:00
commit 7bcfd208f4
8 changed files with 229 additions and 84 deletions

View File

@ -2,6 +2,9 @@ package com.xhpc.tradebill.mapper;
import com.xhpc.tradebill.domain.XhpcHistoryOrderDomain;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface XhpcHistoryOrderMapper {
@ -11,4 +14,6 @@ public interface XhpcHistoryOrderMapper {
XhpcHistoryOrderDomain findOneByInternetSerialNumber(String internetSerialNumber);
List<XhpcHistoryOrderDomain> findListByInternetSerialNumbers(@Param("orderNumbers") List<String> internetSerialNumbers);
}

View File

@ -2,10 +2,16 @@ package com.xhpc.tradebill.mapper;
import com.xhpc.tradebill.domain.XhpcRechargeOrderDomain;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@Mapper
public interface XhpcRechargeOrderMapper {
XhpcRechargeOrderDomain findOneByOrderNumber(String orderNumber);
List<Map<String, Object>> findListByOrderNumbers(@Param("orderNumbers") List<String> orderNumbers);
}

View File

@ -2,10 +2,16 @@ package com.xhpc.tradebill.mapper;
import com.xhpc.tradebill.domain.XhpcRefundOrderDomain;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@Mapper
public interface XhpcRefundOrderMapper {
XhpcRefundOrderDomain findByOrderNumber(String orderNumber);
List<Map<String, Object>> findListByOrderNumbers(@Param("orderNumbers") List<String> orderNumbers);
}

View File

@ -165,6 +165,7 @@ public class InternetBillServiceImpl implements InternetBillService {
String suffix = dataFile.getName().substring(dataFile.getName().lastIndexOf(".") + 1);
List<HDTradebillVo> hdTradebillVoList = new ArrayList<>();
List<String> serialNumberList = new ArrayList<>();
switch (suffix.toUpperCase()){
case "XLS":
case "XLSX":
@ -202,10 +203,13 @@ public class InternetBillServiceImpl implements InternetBillService {
BigDecimal payAmount = vo.getOrderTotalAmount()!=null ? BigDecimal.valueOf(vo.getOrderTotalAmount()): BigDecimal.ZERO;
domain.setInternetPayAmount(payAmount);
getHistoryOrderInfo(domain);
serialNumberList.add(domain.getInternetSerialNumber());
// getHistoryOrderInfo(domain);
checkRecordDomainList.add(domain);
}
checkRecordDomainList.sort(Comparator.comparing(XhpcTradebillInternetCheckRecordDomain::getStatus));
getHistoryOrderList(checkRecordDomainList, serialNumberList);
return checkRecordDomainList;
}
@ -222,6 +226,7 @@ public class InternetBillServiceImpl implements InternetBillService {
List<XhpcTradebillInternetCheckRecordDomain> checkRecordDomainList = new ArrayList<>();
List<XJTradeBillVo> xjTradeBillVoList = new ArrayList<>();
List<String> serialNumberList = new ArrayList<>();
switch (suffix.toUpperCase()){
case "XLS":
case "XLSX":
@ -264,11 +269,12 @@ public class InternetBillServiceImpl implements InternetBillService {
BigDecimal payAmount = vo.getOrderTotalAmount()!=null ? BigDecimal.valueOf(vo.getOrderTotalAmount()): BigDecimal.ZERO;
domain.setInternetPayAmount(payAmount);
getHistoryOrderInfo(domain);
serialNumberList.add(domain.getInternetSerialNumber());
// getHistoryOrderInfo(domain);
//
checkRecordDomainList.add(domain);
}
checkRecordDomainList.sort(Comparator.comparing(XhpcTradebillInternetCheckRecordDomain::getStatus));
getHistoryOrderList(checkRecordDomainList, serialNumberList);
return checkRecordDomainList;
}
@ -284,6 +290,7 @@ public class InternetBillServiceImpl implements InternetBillService {
List<XhpcTradebillInternetCheckRecordDomain> checkRecordDomainList = new ArrayList<>();
List<XDTTradebillVo> xdtTradebillVoList = new ArrayList<>();
List<String> serialNumberList = new ArrayList<>();
switch (suffix.toUpperCase()){
case "XLS":
case "XLSX":
@ -321,10 +328,12 @@ public class InternetBillServiceImpl implements InternetBillService {
BigDecimal payAmount = vo.getPayAmount()!=null ? BigDecimal.valueOf(vo.getPayAmount()): BigDecimal.ZERO;
domain.setInternetPayAmount(payAmount);
getHistoryOrderInfo(domain);
serialNumberList.add(domain.getInternetSerialNumber());
// getHistoryOrderInfo(domain);
checkRecordDomainList.add(domain);
}
checkRecordDomainList.sort(Comparator.comparing(XhpcTradebillInternetCheckRecordDomain::getStatus));
getHistoryOrderList(checkRecordDomainList, serialNumberList);
return checkRecordDomainList;
}
@ -340,6 +349,7 @@ public class InternetBillServiceImpl implements InternetBillService {
List<XhpcTradebillInternetCheckRecordDomain> checkRecordDomainList = new ArrayList<>();
List<KDTradebillVo> kdTradebillVoList = new ArrayList<>();
List<String> serialNumberList = new ArrayList<>();
switch (suffix.toUpperCase()){
case "XLS":
case "XLSX":
@ -358,11 +368,11 @@ public class InternetBillServiceImpl implements InternetBillService {
XhpcTradebillInternetCheckRecordDomain domain = new XhpcTradebillInternetCheckRecordDomain();
domain.setSource("快电");
domain.setInternetName("快电");
serialNumberList.add(domain.getInternetSerialNumber());
getHistoryOrderInfo(domain);
checkRecordDomainList.add(domain);
}
checkRecordDomainList.sort(Comparator.comparing(XhpcTradebillInternetCheckRecordDomain::getStatus));
getHistoryOrderList(checkRecordDomainList, serialNumberList);
return checkRecordDomainList;
}
@ -450,6 +460,41 @@ public class InternetBillServiceImpl implements InternetBillService {
}
private List<XhpcTradebillInternetCheckRecordDomain> getHistoryOrderList(List<XhpcTradebillInternetCheckRecordDomain> domainList, List<String> serialNumberList){
List<XhpcHistoryOrderDomain> orderDomainList = historyOrderMapper.findListByInternetSerialNumbers(serialNumberList);
Map<String, XhpcHistoryOrderDomain> orderDomainMap = new HashMap<>();
for(XhpcHistoryOrderDomain orderDomain: orderDomainList){
orderDomainMap.put(orderDomain.getInternetSerialNumber(), orderDomain);
}
for(XhpcTradebillInternetCheckRecordDomain domain: domainList){
XhpcHistoryOrderDomain orderDomain = orderDomainMap.get(domain.getInternetSerialNumber());
if(orderDomain != null){
domain.setHistoryOrderNo(orderDomain.getHistoryOrderId());
domain.setPlatformInternetSerialNumber(orderDomain.getInternetSerialNumber());
domain.setPlatformSerialNumber(orderDomain.getSerialNumber());
domain.setPlatformChargeStation(orderDomain.getChargingStationName());
domain.setPlatformStartSoc(orderDomain.getStartSoc());
domain.setPlatformEndSoc(orderDomain.getEndSoc());
BigDecimal chargingDegree = orderDomain.getChargingDegree() != null?
BigDecimal.valueOf(orderDomain.getChargingDegree()): BigDecimal.ZERO;
domain.setPlatformChargingDegree(chargingDegree);
domain.setPlatformChargingTime(orderDomain.getChargingTime());
domain.setPlatformStartTime(orderDomain.getStartTime());
domain.setPlatformEndTime(orderDomain.getEndTime());
domain.setPlatformOrderAmount(orderDomain.getTotalPrice());
domain.setPlatformPowerAmount(orderDomain.getPowerPriceTotal());
domain.setPlatformServerAmount(orderDomain.getServicePriceTotal());
domain.setPlatformDiscountAmount(orderDomain.getPromotionDiscount());
domain.setPlatformPayAmount(orderDomain.getActPrice());
}
checkoutOrderResult(domain);
}
domainList.sort(Comparator.comparing(XhpcTradebillInternetCheckRecordDomain::getStatus));
return domainList;
}
private void checkoutOrderResult(XhpcTradebillInternetCheckRecordDomain domain){
int checkoutStatus = 0;
// 流量方的订单金额大于本平台的历史订单的订单金额就可以判断成功

View File

@ -66,21 +66,24 @@ public class PaymentBillServiceImpl implements PaymentBillService {
@Override
public XhpcTradebillPaymentCheckRecordDomain getInfoByPk(int pk){
public XhpcTradebillPaymentCheckRecordDomain getInfoByPk(int pk) {
return paymentCheckRecordMapper.selectByPrimaryKey(pk);
}
@Override
public boolean updateInfoByDomain(XhpcTradebillPaymentCheckRecordDomain domain){
public boolean updateInfoByDomain(XhpcTradebillPaymentCheckRecordDomain domain) {
domain.setUpdateBy(SecurityUtils.getUserId());
return paymentCheckRecordMapper.updateStatusByPk(domain);
}
@Override
public Integer insertPaymentCheckList(int uploadId, List<XhpcTradebillPaymentCheckRecordDomain> paymentCheckList){
public Integer insertPaymentCheckList(int uploadId, List<XhpcTradebillPaymentCheckRecordDomain> paymentCheckList) {
Long userId = SecurityUtils.getUserId();
for(XhpcTradebillPaymentCheckRecordDomain domain: paymentCheckList){
for (XhpcTradebillPaymentCheckRecordDomain domain : paymentCheckList) {
domain.setUploadId(uploadId);
domain.setCreateBy(userId);
domain.setUpdateBy(userId);
@ -89,23 +92,28 @@ public class PaymentBillServiceImpl implements PaymentBillService {
}
@Override
public Map<String, Object> getStatusTotal(Map<String, Object> params){
List<Map<String, Object>> resultList = paymentCheckRecordMapper.selectTotalGroupbyStatus(params);
int successCount = 0;
int failCount = 0;
int uncheckCount = 0;
int checkCount = 0;
for(Map<String, Object> res : resultList){
switch (res.get("status").toString()){
case "0":
uncheckCount = Integer.parseInt(res.get("total").toString()); break;
case "1":
failCount = Integer.parseInt(res.get("total").toString()); break;
case "2":
successCount = Integer.parseInt(res.get("total").toString()); break;
default: break;
}
}
public Map<String, Object> getStatusTotal(Map<String, Object> params) {
List<Map<String, Object>> resultList = paymentCheckRecordMapper.selectTotalGroupbyStatus(params);
int successCount = 0;
int failCount = 0;
int uncheckCount = 0;
int checkCount = 0;
for (Map<String, Object> res : resultList) {
switch (res.get("status").toString()) {
case "0":
uncheckCount = Integer.parseInt(res.get("total").toString());
break;
case "1":
failCount = Integer.parseInt(res.get("total").toString());
break;
case "2":
successCount = Integer.parseInt(res.get("total").toString());
break;
default:
break;
}
}
checkCount = successCount + failCount;
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("successCount", successCount);
@ -116,7 +124,8 @@ public class PaymentBillServiceImpl implements PaymentBillService {
}
@Override
public List<XhpcTradebillPaymentCheckRecordDomain> getPaymentCheckList(Map<String, Object> params){
public List<XhpcTradebillPaymentCheckRecordDomain> getPaymentCheckList(Map<String, Object> params) {
return paymentCheckRecordMapper.selectListByParams(params);
}
@ -127,7 +136,8 @@ public class PaymentBillServiceImpl implements PaymentBillService {
* @param fileUrl 数据文件存放地址
* @return 对账完成的数据列表
*/
public List<XhpcTradebillPaymentCheckRecordDomain> getAliPayDataList(String fileUrl) throws Exception{
public List<XhpcTradebillPaymentCheckRecordDomain> getAliPayDataList(String fileUrl) throws Exception {
File dataFile = DownloadUtil.downloadFile(fileUrl);
return getAliPayDataList(dataFile);
}
@ -152,6 +162,10 @@ public class PaymentBillServiceImpl implements PaymentBillService {
CsvReader csvReader = CsvUtil.getReader();
CsvData data = csvReader.read(dataFile, CharsetUtil.CHARSET_GBK);
List<CsvRow> rows = data.getRows();
List<String> serialNumberList = new ArrayList<>();
int orderType = 0;
for (CsvRow row : rows) {
// 列数是22则是正文内容
if (row.getRawList().size() != 22) {
@ -169,40 +183,35 @@ public class PaymentBillServiceImpl implements PaymentBillService {
domain.setPaymentPayTime(DateUtil.parse(row.get(1)));
BigDecimal paymentAmount = BigDecimal.ZERO;
String serialNumber = "";
if (row.get(5).equals("在线支付")) {
// 充值订单
domain.setPaymentPayNumber(row.get(4).trim().replaceAll("`", "").replaceAll("'", ""));
domain.setOrderType(1);
serialNumber = row.get(4).trim().replaceAll("`", "").replaceAll("'", "");
orderType = 1;
domain.setPaymentPayNumber(serialNumber);
domain.setOrderType(orderType);
System.out.println(row);
paymentAmount = row.get(6) != null && !"".equals(row.get(6).trim())? new BigDecimal(row.get(6)): BigDecimal.ZERO;
paymentAmount = row.get(6) != null && !"".equals(row.get(6).trim()) ? new BigDecimal(row.get(6)) : BigDecimal.ZERO;
domain.setPaymentAmount(paymentAmount);
XhpcRechargeOrderDomain rechargeOrderDomain = rechargeOrderMapper.findOneByOrderNumber(row.get(4));
if (rechargeOrderDomain != null) {
domain.setPlatformOrderNumber(rechargeOrderDomain.getRechargeOrderNumber());
domain.setPlatformUserId(rechargeOrderDomain.getUserId().toString());
domain.setPlatformPayNumber(rechargeOrderDomain.getRechargeOrderId().toString());
domain.setPlatformAmount(rechargeOrderDomain.getAmount());
domain.setPlatformPayTime(rechargeOrderDomain.getUpdateTime());
}
serialNumberList.add(serialNumber);
} else if (row.get(5).equals("转账")) {
// 退款订单
domain.setPaymentPayNumber(row.get(16).trim().replaceAll("`", "").replaceAll("'", "").replaceAll("单笔转账--", ""));
domain.setOrderType(2);
serialNumber = row.get(16).trim().replaceAll("`", "").replaceAll("'", "").replaceAll("单笔转账--", "");
domain.setPaymentPayNumber(serialNumber);
orderType = 2;
domain.setOrderType(orderType);
paymentAmount = row.get(7) != null && !"".equals(row.get(7).trim())? new BigDecimal(row.get(7)): BigDecimal.ZERO;
paymentAmount = row.get(7) != null && !"".equals(row.get(7).trim()) ? new BigDecimal(row.get(7)) : BigDecimal.ZERO;
domain.setPaymentAmount(paymentAmount);
XhpcRefundOrderDomain refundOrderDomain = refundOrderMapper.findByOrderNumber(row.get(4));
if (refundOrderDomain != null) {
domain.setPlatformOrderNumber(refundOrderDomain.getRefundOrderNumber());
domain.setPlatformUserId(refundOrderDomain.getUserId().toString());
domain.setPlatformPayNumber(refundOrderDomain.getRefundOrderId().toString());
domain.setPlatformAmount(refundOrderDomain.getAmount());
domain.setPlatformPayTime(refundOrderDomain.getUpdateTime());
}
}
paymentCheckRecordDomainList.add(computeTradebillData(domain));
serialNumberList.add(serialNumber);
}
paymentCheckRecordDomainList.add(domain);
}
getPlatOrderData(paymentCheckRecordDomainList, orderType, serialNumberList);
break;
case "ZIP":
ZipFile zip = new ZipFile(dataFile);
@ -243,12 +252,12 @@ public class PaymentBillServiceImpl implements PaymentBillService {
* @return 对账完成的数据列表
*/
public List<XhpcTradebillPaymentCheckRecordDomain> getWechatDataList(String fileUrl) throws Exception {
File dataFile = DownloadUtil.downloadFile(fileUrl);
return getWechatDataList(dataFile);
}
/**
* 微信订单对账
*
@ -265,6 +274,9 @@ public class PaymentBillServiceImpl implements PaymentBillService {
CsvReader csvReader = CsvUtil.getReader();
CsvData data = csvReader.read(dataFile);
List<CsvRow> rows = data.getRows();
List<String> serialNumberList = new ArrayList<>();
int orderType = 0;
for (CsvRow row : rows) {
// 列数是6则是充值订单
// 列数是13则是退款订单
@ -275,36 +287,34 @@ public class PaymentBillServiceImpl implements PaymentBillService {
domain.setPaymentChannel(1);
domain.setCreateBy(userId);
domain.setUpdateBy(userId);
String serialNumber = "";
if (row.getRawList().size() == 6) {
if (row.get(0).getBytes(StandardCharsets.UTF_8).length != row.get(0).length()) {
continue;
}
domain.setOrderType(1);
domain.setPaymentPayNumber(StringFormat(row.get(2)));
orderType = 1;
serialNumber = StringFormat(row.get(2));
domain.setOrderType(orderType);
domain.setPaymentPayNumber(serialNumber);
BigDecimal paymentAmount = row.get(5)!=null &&!"".equals(row.get(5).trim())? new BigDecimal(StringFormat(row.get(5))) : BigDecimal.ZERO;
BigDecimal paymentAmount = row.get(5) != null && !"".equals(row.get(5).trim()) ? new BigDecimal(StringFormat(row.get(5))) : BigDecimal.ZERO;
domain.setPaymentAmount(paymentAmount);
domain.setPaymentPayTime(DateUtil.parse(row.get(0)));
XhpcRechargeOrderDomain rechargeOrderDomain = rechargeOrderMapper.findOneByOrderNumber(StringFormat(row.get(2)));
if(rechargeOrderDomain != null){
domain.setPlatformOrderNumber(rechargeOrderDomain.getRechargeOrderNumber());
domain.setPlatformUserId(rechargeOrderDomain.getUserId().toString());
domain.setPlatformPayNumber(rechargeOrderDomain.getRechargeOrderId().toString());
domain.setPlatformAmount(rechargeOrderDomain.getAmount());
domain.setPlatformPayTime(rechargeOrderDomain.getUpdateTime());
}
serialNumberList.add(serialNumber);
} else if (row.getRawList().size() == 13) {
// 微信退款订单
if (row.get(0).getBytes(StandardCharsets.UTF_8).length != row.get(0).length()) {
continue;
}
domain.setOrderType(2);
domain.setPaymentPayNumber(StringFormat(row.get(2)));
orderType = 2;
serialNumber = StringFormat(row.get(2));
domain.setOrderType(orderType);
domain.setPaymentPayNumber(serialNumber);
BigDecimal paymentAmount = row.get(10) != null && ! "".equals(row.get(10).trim()) ?
BigDecimal paymentAmount = row.get(10) != null && !"".equals(row.get(10).trim()) ?
new BigDecimal(StringFormat(row.get(10)))
: BigDecimal.ZERO;
@ -312,27 +322,22 @@ public class PaymentBillServiceImpl implements PaymentBillService {
domain.setPaymentUserId(StringFormat(row.get(4)));
domain.setPaymentPayTime(DateUtil.parse(row.get(6)));
XhpcRefundOrderDomain refundOrderDomain = refundOrderMapper.findByOrderNumber(StringFormat(row.get(2)));
if (refundOrderDomain!=null){
domain.setPlatformOrderNumber(refundOrderDomain.getRefundOrderNumber());
domain.setPlatformUserId(refundOrderDomain.getUserId().toString());
domain.setPlatformPayNumber(refundOrderDomain.getRefundOrderId().toString());
domain.setPlatformAmount(refundOrderDomain.getAmount());
domain.setPlatformPayTime(refundOrderDomain.getUpdateTime());
}
serialNumberList.add(serialNumber);
}
paymentCheckRecordDomainList.add(computeTradebillData(domain));
}
getPlatOrderData(paymentCheckRecordDomainList, orderType, serialNumberList);
} else {
throw new Exception("暂不支持的文件格式");
}
paymentCheckRecordDomainList.sort(Comparator.comparing(XhpcTradebillPaymentCheckRecordDomain::getStatus));
return paymentCheckRecordDomainList;
}
private String StringFormat(String dataStr){
private String StringFormat(String dataStr) {
return dataStr.replaceAll("'", "").replaceAll("`", "");
}
@ -410,7 +415,8 @@ public class PaymentBillServiceImpl implements PaymentBillService {
@Override
public void export(HttpServletResponse response, Map<String, Object> params) throws Exception{
public void export(HttpServletResponse response, Map<String, Object> params) throws Exception {
List<Map<String, Object>> list = paymentCheckRecordMapper.selectByParams(params);
ExcelWriter writer = ExcelUtil.getWriter(true);
@ -440,4 +446,36 @@ public class PaymentBillServiceImpl implements PaymentBillService {
writer.close();
IoUtil.close(out);
}
private List<XhpcTradebillPaymentCheckRecordDomain> getPlatOrderData(List<XhpcTradebillPaymentCheckRecordDomain> domainList, int orderType, List<String> serialNumberList){
List<Map<String, Object>> orderMapList = null;
if (orderType == 1) {
orderMapList = rechargeOrderMapper.findListByOrderNumbers(serialNumberList);
} else if (orderType == 2) {
orderMapList = refundOrderMapper.findListByOrderNumbers(serialNumberList);
}
Map<String, Map<String, Object>> orderList = new HashMap<>();
for (Map<String, Object> orderMap : orderMapList) {
orderList.put(orderMap.get("orderNumber").toString().trim(), orderMap);
}
for (XhpcTradebillPaymentCheckRecordDomain domain : domainList) {
Map<String, Object> orderMap = orderList.get(domain.getPaymentPayNumber());
if (orderMap != null) {
domain.setPlatformOrderNumber(orderMap.get("orderNumber").toString().trim());
domain.setPlatformUserId(orderMap.get("userId").toString());
domain.setPlatformPayNumber(orderMap.get("id").toString());
domain.setPlatformAmount(new BigDecimal(orderMap.get("amount").toString()));
domain.setPlatformPayTime(DateUtil.parse(orderMap.get("updateTime").toString(), "yyyy-MM-dd'T'HH:mm"));
}
computeTradebillData(domain);
}
return domainList;
}
}

View File

@ -23,4 +23,19 @@
left join xhpc_charge_order c on o.charge_order_id=c.charge_order_id
where o.internet_serial_number=#{internetSerialNumber}
</select>
<select id="findListByInternetSerialNumbers" resultType="com.xhpc.tradebill.domain.XhpcHistoryOrderDomain">
select
o.*,
s.name as 'charging_station_name',
c.charging_degree as 'charging_degree',
c.charging_time as 'charging_time'
from xhpc_history_order o
left join xhpc_charging_station s on o.charging_station_id=s.charging_station_id
left join xhpc_charge_order c on o.charge_order_id=c.charge_order_id
where o.internet_serial_number in
<foreach collection="orderNumbers" item="orderNumber" open="(" close=")" separator=",">
#{orderNumber}
</foreach>
</select>
</mapper>

View File

@ -27,4 +27,20 @@
from xhpc_recharge_order
where recharge_order_number=#{orderNumber}
</select>
<select id="findListByOrderNumbers" resultType="map">
select
recharge_order_id as 'id',
recharge_order_number as 'orderNumber',
user_id as 'userId',
amount as 'amount',
create_time as 'createTime',
update_time as 'updateTime'
from xhpc_recharge_order
where recharge_order_number in
<foreach collection="orderNumbers" item="orderNumber" separator="," open="(" close=")">
#{orderNumber}
</foreach>
</select>
</mapper>

View File

@ -25,4 +25,18 @@
select * from xhpc_refund_order where refund_order_number=#{orderNumber}
</select>
<select id="findListByOrderNumbers" resultType="map">
select
refund_order_id as 'id',
refund_order_number as 'orderNumber',
user_id as 'userId',
amount as 'amount',
create_time as 'createTime',
update_time as 'updateTime'
from xhpc_refund_order
where refund_order_number in
<foreach collection="orderNumbers" item="orderNumber" separator="," open="(" close=")">
#{orderNumber}
</foreach>
</select>
</mapper>