mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 19:15:35 +08:00
update
This commit is contained in:
@@ -4,9 +4,11 @@ import com.jsowell.pile.domain.SettleOrderReport;
|
||||
import com.jsowell.pile.dto.MerchantOrderReportDTO;
|
||||
import com.jsowell.pile.vo.web.SettleOrderReportVO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface SettleOrderReportMapper {
|
||||
/**
|
||||
* delete by primary key
|
||||
|
||||
@@ -100,4 +100,11 @@ public interface ISettleOrderReportService {
|
||||
|
||||
List<SettleOrderReport> queryOrderReport(List<String> stationIdList, String startTime, String endTime);
|
||||
|
||||
/**
|
||||
* 计算站点订单报表
|
||||
*
|
||||
* @param stationId 站点id
|
||||
* @param tradeDate 交易日期
|
||||
*/
|
||||
void generateDailyOrderReports(String stationId, String tradeDate);
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
package com.jsowell.pile.service;
|
||||
|
||||
import java.util.List;
|
||||
import com.jsowell.pile.domain.SettleOrderReport;
|
||||
public interface SettleOrderReportService{
|
||||
|
||||
|
||||
int deleteByPrimaryKey(Integer id);
|
||||
|
||||
int insert(SettleOrderReport record);
|
||||
|
||||
int insertOrUpdate(SettleOrderReport record);
|
||||
|
||||
int insertOrUpdateSelective(SettleOrderReport record);
|
||||
|
||||
int insertSelective(SettleOrderReport record);
|
||||
|
||||
SettleOrderReport selectByPrimaryKey(Integer id);
|
||||
|
||||
int updateByPrimaryKeySelective(SettleOrderReport record);
|
||||
|
||||
int updateByPrimaryKey(SettleOrderReport record);
|
||||
|
||||
int updateBatch(List<SettleOrderReport> list);
|
||||
|
||||
int batchInsert(List<SettleOrderReport> list);
|
||||
|
||||
}
|
||||
@@ -2,33 +2,43 @@ package com.jsowell.pile.service.impl;
|
||||
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.jsowell.adapay.dto.QueryPaymentConfirmDTO;
|
||||
import com.jsowell.adapay.response.QueryPaymentConfirmDetailResponse;
|
||||
import com.jsowell.adapay.service.AdapayService;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.page.PageResponse;
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.PageUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.common.util.id.IdUtils;
|
||||
import com.jsowell.pile.domain.SettleOrderReport;
|
||||
import com.jsowell.pile.dto.MerchantOrderReportDTO;
|
||||
import com.jsowell.pile.dto.QueryOrderDTO;
|
||||
import com.jsowell.pile.dto.SettleOrderReportDTO;
|
||||
import com.jsowell.pile.mapper.AdapayCallbackRecordMapper;
|
||||
import com.jsowell.pile.mapper.OrderBasicInfoMapper;
|
||||
import com.jsowell.pile.mapper.SettleOrderReportMapper;
|
||||
import com.jsowell.pile.service.ClearingWithdrawInfoService;
|
||||
import com.jsowell.pile.service.IPileMerchantInfoService;
|
||||
import com.jsowell.pile.service.IPileStationInfoService;
|
||||
import com.jsowell.pile.service.ISettleOrderReportService;
|
||||
import com.jsowell.pile.vo.web.ClearingBillVO;
|
||||
import com.jsowell.pile.vo.web.MerchantOrderReportVO;
|
||||
import com.jsowell.pile.vo.web.OrderSettleDetailVO;
|
||||
import com.jsowell.pile.vo.web.SettleOrderReportVO;
|
||||
import com.jsowell.pile.vo.base.SplitSettleAmountVO;
|
||||
import com.jsowell.pile.vo.web.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 结算订单报Service业务层处理
|
||||
@@ -36,11 +46,18 @@ import java.util.List;
|
||||
* @author jsowell
|
||||
* @date 2023-06-05
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class SettleOrderReportServiceImpl implements ISettleOrderReportService {
|
||||
@Autowired
|
||||
private SettleOrderReportMapper settleOrderReportMapper;
|
||||
|
||||
@Autowired
|
||||
private OrderBasicInfoMapper orderBasicInfoMapper;
|
||||
|
||||
@Autowired
|
||||
private IPileStationInfoService pileStationInfoService;
|
||||
|
||||
@Autowired
|
||||
private AdapayCallbackRecordMapper adapayCallbackRecordMapper;
|
||||
|
||||
@@ -323,5 +340,145 @@ public class SettleOrderReportServiceImpl implements ISettleOrderReportService {
|
||||
return settleOrderReportMapper.queryOrderReport(stationIdList, startTime, endTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算站点订单报表
|
||||
*
|
||||
* @param stationId 站点id
|
||||
* @param tradeDate 交易日期
|
||||
*/
|
||||
@Override
|
||||
public void generateDailyOrderReports(String stationId, String tradeDate) {
|
||||
// logger.info("线程名===={}", Thread.currentThread().getName());
|
||||
if (StringUtils.isBlank(stationId)) {
|
||||
return;
|
||||
}
|
||||
if (StringUtils.isBlank(tradeDate)) {
|
||||
// 日期为空默认昨天
|
||||
tradeDate = LocalDate.now().plusDays(-1).toString();
|
||||
}
|
||||
PileStationVO stationInfo = pileStationInfoService.getStationInfo(stationId);
|
||||
// 查询站点前一天结算完成的订单
|
||||
QueryOrderDTO dto = new QueryOrderDTO();
|
||||
dto.setStationId(stationId);
|
||||
LocalDate parse = LocalDate.parse(tradeDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||
String startTime = DateUtils.formatDateTime(LocalDateTime.of(parse, LocalTime.MIN));
|
||||
String endTime = DateUtils.formatDateTime(LocalDateTime.of(parse, LocalTime.MAX));
|
||||
dto.setStartSettleTime(startTime);
|
||||
dto.setEndSettleTime(endTime);
|
||||
// 查询结算完成的订单
|
||||
List<OrderListVO> orderListVOS = orderBasicInfoMapper.selectOrderBasicInfoList(dto);
|
||||
// if (CollectionUtils.isEmpty(orderListVOS)) {
|
||||
// logger.info("站点:{}, 在{}-{}没有查询到订单数据", stationInfo.getStationName(), startTime, endTime);
|
||||
// return;
|
||||
// }
|
||||
List<String> collect = orderListVOS.stream().map(OrderListVO::getOrderCode).collect(Collectors.toList());
|
||||
log.info("站点:{}, 在{}-{}查询到订单数据{}条,订单编号:{}", stationInfo.getStationName(), startTime, endTime, orderListVOS.size(), collect);
|
||||
// 统计出日报信息
|
||||
BigDecimal useElectricity = BigDecimal.ZERO;
|
||||
int chargeNum = 0;
|
||||
long chargeTime = 0L;
|
||||
BigDecimal totalElectricityAmount = BigDecimal.ZERO;
|
||||
BigDecimal totalServiceAmount = BigDecimal.ZERO;
|
||||
BigDecimal totalOrderAmount = BigDecimal.ZERO;
|
||||
BigDecimal totalVirtualAmount = BigDecimal.ZERO;
|
||||
BigDecimal totalSettleAmount = BigDecimal.ZERO;
|
||||
List<String> orderCodeList = Lists.newArrayList();
|
||||
for (OrderListVO vo : orderListVOS) {
|
||||
// 统计结算金额大于0的
|
||||
BigDecimal settleAmount = StringUtils.isBlank(vo.getSettleAmount())
|
||||
? BigDecimal.ZERO
|
||||
: new BigDecimal(vo.getSettleAmount());
|
||||
if (settleAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
// 只统计用电量大于0的
|
||||
continue;
|
||||
}
|
||||
|
||||
// 订单消费金额
|
||||
String orderAmount = vo.getOrderAmount();
|
||||
|
||||
// 用电度数
|
||||
BigDecimal chargingDegree = StringUtils.isBlank(vo.getChargingDegree())
|
||||
? BigDecimal.ZERO
|
||||
: new BigDecimal(vo.getChargingDegree());
|
||||
|
||||
// 充电度数累计
|
||||
useElectricity = useElectricity.add(chargingDegree);
|
||||
|
||||
// 充电次数
|
||||
chargeNum += 1;
|
||||
orderCodeList.add(vo.getOrderCode());
|
||||
|
||||
// 充电时间累计
|
||||
if (StringUtils.isNotBlank(vo.getChargeStartTime()) && StringUtils.isNotBlank(vo.getChargeEndTime())) {
|
||||
long l = DateUtils.intervalTime(vo.getChargeStartTime(), vo.getChargeEndTime());
|
||||
chargeTime += l;
|
||||
}
|
||||
|
||||
// 电费金额
|
||||
BigDecimal e = vo.getTotalElectricityAmount() != null ? vo.getTotalElectricityAmount() : BigDecimal.ZERO;
|
||||
totalElectricityAmount = totalElectricityAmount.add(e);
|
||||
|
||||
// 服务费金额
|
||||
BigDecimal serviceAmount = vo.getTotalServiceAmount() != null ? vo.getTotalServiceAmount() : BigDecimal.ZERO;
|
||||
totalServiceAmount = totalServiceAmount.add(serviceAmount);
|
||||
|
||||
// 订单金额
|
||||
totalOrderAmount = totalOrderAmount.add(new BigDecimal(orderAmount));
|
||||
|
||||
// 虚拟金额
|
||||
String virtualAmount = StringUtils.isNotBlank(vo.getVirtualAmount()) ? vo.getVirtualAmount() : Constants.ZERO;
|
||||
totalVirtualAmount = totalVirtualAmount.add(new BigDecimal(virtualAmount));
|
||||
|
||||
// 结算金额
|
||||
totalSettleAmount = totalSettleAmount.add(settleAmount);
|
||||
}
|
||||
|
||||
// 计算报表
|
||||
SettleOrderReport settleOrderReport = new SettleOrderReport();
|
||||
String settleCode = "SETTLE_" + IdUtils.getOrderCode();
|
||||
settleOrderReport.setSettleCode(settleCode);
|
||||
settleOrderReport.setMerchantId(stationInfo.getMerchantId());
|
||||
settleOrderReport.setStationId(stationId);
|
||||
settleOrderReport.setUseElectricity(useElectricity);
|
||||
settleOrderReport.setChargeNum(chargeNum + "");
|
||||
settleOrderReport.setChargeTime(chargeTime + "");
|
||||
settleOrderReport.setElectricityAmount(totalElectricityAmount);
|
||||
settleOrderReport.setServiceAmount(totalServiceAmount);
|
||||
settleOrderReport.setTotalAmount(totalOrderAmount);
|
||||
settleOrderReport.setVirtualAmount(totalVirtualAmount);
|
||||
settleOrderReport.setTradeDate(tradeDate);
|
||||
settleOrderReport.setOrderCodes(Joiner.on(",").join(orderCodeList));
|
||||
// 计算手续费 = 结算金额 * 0.55%
|
||||
SplitSettleAmountVO splitSettleAmountVO = splitSettleAmount(totalSettleAmount);
|
||||
settleOrderReport.setTradeFee(splitSettleAmountVO.getFeeAmount());
|
||||
settleOrderReport.setTradeAmount(splitSettleAmountVO.getTradeAmount());
|
||||
// 根据站点id和交易日期查询
|
||||
SettleOrderReport selectResult = this.selectByStationIdAndDate(stationId, tradeDate);
|
||||
if (selectResult != null) {
|
||||
settleOrderReport.setId(selectResult.getId());
|
||||
}
|
||||
// 订单日报 新增或更新
|
||||
this.insertOrUpdate(settleOrderReport);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过结算金额,计算客户到账金额和手续费
|
||||
*
|
||||
* @param settleAmount 需要拆分的结算金额
|
||||
* @return
|
||||
*/
|
||||
private SplitSettleAmountVO splitSettleAmount(BigDecimal settleAmount) {
|
||||
SplitSettleAmountVO resultVO = new SplitSettleAmountVO();
|
||||
if (settleAmount == null) {
|
||||
return resultVO;
|
||||
}
|
||||
// 计算手续费 = 结算金额 * 0.55%
|
||||
BigDecimal fee = settleAmount.multiply(new BigDecimal(Constants.FEE_RATES));
|
||||
resultVO.setSettleAmount(settleAmount);
|
||||
resultVO.setFeeAmount(fee);
|
||||
resultVO.setTradeAmount(settleAmount.subtract(fee));
|
||||
return resultVO;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user