mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-23 12:35:07 +08:00
Merge branch 'dev' of http://192.168.2.2:8099/jsowell/jsowell-charger-web into dev
This commit is contained in:
@@ -265,4 +265,9 @@ public interface IOrderBasicInfoService {
|
||||
* @param dto
|
||||
*/
|
||||
void refundForBalanceWithAdapay(WeChatRefundDTO dto);
|
||||
|
||||
/**
|
||||
* 生成订单日报
|
||||
*/
|
||||
void generateDailyOrderReports(String stationId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.jsowell.pile.service;
|
||||
|
||||
import com.jsowell.pile.domain.SettleOrderReport;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 结算订单报Service接口
|
||||
*
|
||||
* @author jsowell
|
||||
* @date 2023-06-05
|
||||
*/
|
||||
public interface ISettleOrderReportService {
|
||||
/**
|
||||
* 查询结算订单报
|
||||
*
|
||||
* @param id 结算订单报主键
|
||||
* @return 结算订单报
|
||||
*/
|
||||
public SettleOrderReport selectSettleOrderReportById(Long id);
|
||||
|
||||
/**
|
||||
* 查询结算订单报列表
|
||||
*
|
||||
* @param settleOrderReport 结算订单报
|
||||
* @return 结算订单报集合
|
||||
*/
|
||||
public List<SettleOrderReport> selectSettleOrderReportList(SettleOrderReport settleOrderReport);
|
||||
|
||||
/**
|
||||
* 新增结算订单报
|
||||
*
|
||||
* @param settleOrderReport 结算订单报
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertSettleOrderReport(SettleOrderReport settleOrderReport);
|
||||
|
||||
/**
|
||||
* 修改结算订单报
|
||||
*
|
||||
* @param settleOrderReport 结算订单报
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateSettleOrderReport(SettleOrderReport settleOrderReport);
|
||||
|
||||
/**
|
||||
* 批量删除结算订单报
|
||||
*
|
||||
* @param ids 需要删除的结算订单报主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteSettleOrderReportByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 删除结算订单报信息
|
||||
*
|
||||
* @param id 结算订单报主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteSettleOrderReportById(Long id);
|
||||
}
|
||||
@@ -56,7 +56,9 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -137,6 +139,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
@Autowired
|
||||
private IMemberTransactionRecordService memberTransactionRecordService;
|
||||
|
||||
@Autowired
|
||||
private ISettleOrderReportService settleOrderReportService;
|
||||
|
||||
/**
|
||||
* 条件查询订单基本信息
|
||||
*
|
||||
@@ -1835,4 +1840,68 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
// 也许需要多笔支付订单才够退款
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateDailyOrderReports(String stationId) {
|
||||
// 查询站点前一天完成的订单
|
||||
QueryOrderDTO dto = new QueryOrderDTO();
|
||||
dto.setStationId(stationId);
|
||||
LocalDate yesterday = LocalDate.now().plusDays(-1);
|
||||
dto.setStartTime(DateUtils.formatDateTime(LocalDateTime.of(yesterday, LocalTime.MIN)));
|
||||
dto.setEndTime(DateUtils.formatDateTime(LocalDateTime.of(yesterday, LocalTime.MAX)));
|
||||
List<OrderListVO> orderListVOS = orderBasicInfoMapper.selectOrderBasicInfoList(dto);
|
||||
if (CollectionUtils.isEmpty(orderListVOS)) {
|
||||
return;
|
||||
}
|
||||
// 统计出日报信息
|
||||
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;
|
||||
for (OrderListVO vo : orderListVOS) {
|
||||
BigDecimal chargingDegree = new BigDecimal(vo.getChargingDegree());
|
||||
if (chargingDegree.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
// 只统计用电量大于0的
|
||||
continue;
|
||||
}
|
||||
// 充电度数
|
||||
useElectricity = useElectricity.add(chargingDegree);
|
||||
// 充电次数
|
||||
chargeNum += chargeNum;
|
||||
// 充电时间
|
||||
long l = DateUtils.intervalTime(vo.getChargeStartTime(), vo.getChargeEndTime());
|
||||
chargeTime += l;
|
||||
// 电费金额
|
||||
totalElectricityAmount = totalElectricityAmount.add(vo.getTotalElectricityAmount());
|
||||
// 服务费金额
|
||||
totalServiceAmount = totalServiceAmount.add(vo.getTotalServiceAmount());
|
||||
// 订单金额
|
||||
totalOrderAmount = totalOrderAmount.add(new BigDecimal(vo.getOrderAmount()));
|
||||
// 虚拟金额
|
||||
totalVirtualAmount = totalVirtualAmount.add(new BigDecimal(vo.getVirtualAmount()));
|
||||
// 结算金额
|
||||
totalSettleAmount = totalSettleAmount.add(new BigDecimal(vo.getSettleAmount()));
|
||||
}
|
||||
// 保存到数据库
|
||||
SettleOrderReport settleOrderReport = new SettleOrderReport();
|
||||
settleOrderReport.setMerchantId("");
|
||||
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(yesterday.toString());
|
||||
// 计算手续费 = 结算金额 * 0.55%
|
||||
BigDecimal tradeFee = totalSettleAmount.multiply(new BigDecimal("0.0055"));
|
||||
settleOrderReport.setTradeFee(tradeFee);
|
||||
settleOrderReport.setTradeAmount(totalSettleAmount.subtract(tradeFee));
|
||||
settleOrderReportService.insertSettleOrderReport(settleOrderReport);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.jsowell.pile.service.impl;
|
||||
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.pile.domain.SettleOrderReport;
|
||||
import com.jsowell.pile.mapper.SettleOrderReportMapper;
|
||||
import com.jsowell.pile.service.ISettleOrderReportService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 结算订单报Service业务层处理
|
||||
*
|
||||
* @author jsowell
|
||||
* @date 2023-06-05
|
||||
*/
|
||||
@Service
|
||||
public class SettleOrderReportServiceImpl implements ISettleOrderReportService {
|
||||
@Autowired
|
||||
private SettleOrderReportMapper settleOrderReportMapper;
|
||||
|
||||
/**
|
||||
* 查询结算订单报
|
||||
*
|
||||
* @param id 结算订单报主键
|
||||
* @return 结算订单报
|
||||
*/
|
||||
@Override
|
||||
public SettleOrderReport selectSettleOrderReportById(Long id) {
|
||||
return settleOrderReportMapper.selectSettleOrderReportById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询结算订单报列表
|
||||
*
|
||||
* @param settleOrderReport 结算订单报
|
||||
* @return 结算订单报
|
||||
*/
|
||||
@Override
|
||||
public List<SettleOrderReport> selectSettleOrderReportList(SettleOrderReport settleOrderReport) {
|
||||
return settleOrderReportMapper.selectSettleOrderReportList(settleOrderReport);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增结算订单报
|
||||
*
|
||||
* @param settleOrderReport 结算订单报
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertSettleOrderReport(SettleOrderReport settleOrderReport) {
|
||||
settleOrderReport.setCreateTime(DateUtils.getNowDate());
|
||||
return settleOrderReportMapper.insertSettleOrderReport(settleOrderReport);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改结算订单报
|
||||
*
|
||||
* @param settleOrderReport 结算订单报
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateSettleOrderReport(SettleOrderReport settleOrderReport) {
|
||||
return settleOrderReportMapper.updateSettleOrderReport(settleOrderReport);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除结算订单报
|
||||
*
|
||||
* @param ids 需要删除的结算订单报主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteSettleOrderReportByIds(Long[] ids) {
|
||||
return settleOrderReportMapper.deleteSettleOrderReportByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除结算订单报信息
|
||||
*
|
||||
* @param id 结算订单报主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteSettleOrderReportById(Long id) {
|
||||
return settleOrderReportMapper.deleteSettleOrderReportById(id);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.jsowell.common.enums.MemberWalletEnum;
|
||||
import com.jsowell.common.enums.weixin.WeiXinPayTradeStatus;
|
||||
import com.jsowell.common.enums.ykc.ActionTypeEnum;
|
||||
import com.jsowell.common.enums.ykc.PayModeEnum;
|
||||
import com.jsowell.common.enums.ykc.PaymentInstitutionsEnum;
|
||||
@@ -144,6 +145,32 @@ public class WechatPayServiceImpl implements WechatPayService {
|
||||
return amLong.toString();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String s = "{\n" +
|
||||
" \"mchid\": \"1632405339\",\n" +
|
||||
" \"appid\": \"wxbb3e0d474569481d\",\n" +
|
||||
" \"out_trade_no\": \"823422832569454592\",\n" +
|
||||
" \"transaction_id\": \"4200001841202305301676160680\",\n" +
|
||||
" \"trade_type\": \"JSAPI\",\n" +
|
||||
" \"trade_state\": \"SUCCESS\",\n" +
|
||||
" \"trade_state_desc\": \"支付成功\",\n" +
|
||||
" \"bank_type\": \"OTHERS\",\n" +
|
||||
" \"attach\": \"{\\\"memberId\\\":\\\"82507801\\\",\\\"orderCode\\\":\\\"C27473779928\\\",\\\"type\\\":\\\"order\\\"}\",\n" +
|
||||
" \"success_time\": \"2023-05-30T15:15:20+08:00\",\n" +
|
||||
" \"payer\": {\n" +
|
||||
" \"openid\": \"o4REX5FPLsLOxM2x9ig2MHuuHPqU\"\n" +
|
||||
" },\n" +
|
||||
" \"amount\": {\n" +
|
||||
" \"total\": 5000,\n" +
|
||||
" \"payer_total\": 5000,\n" +
|
||||
" \"currency\": \"CNY\",\n" +
|
||||
" \"payer_currency\": \"CNY\"\n" +
|
||||
" }\n" +
|
||||
"}";
|
||||
WechatPayNotifyResource wechatPayNotifyResource = JSON.parseObject(s, WechatPayNotifyResource.class);
|
||||
System.out.println(wechatPayNotifyResource);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付回调
|
||||
* @param request
|
||||
@@ -186,7 +213,7 @@ public class WechatPayServiceImpl implements WechatPayService {
|
||||
//6:获取微信支付返回的信息
|
||||
WechatPayNotifyResource wechatPayNotifyResource = JSON.parseObject(decryptToString, WechatPayNotifyResource.class);
|
||||
//7: 支付状态的判断 如果是success就代表支付成功
|
||||
if (StringUtils.equals(wechatPayNotifyResource.getTrade_state(), "SUCCESS")) {
|
||||
if (StringUtils.equals(wechatPayNotifyResource.getTrade_state(), WeiXinPayTradeStatus.SUCCESS.getValue())) {
|
||||
// 8:获取支付的交易单号,流水号,和附属参数
|
||||
String out_trade_no = wechatPayNotifyResource.getOut_trade_no();
|
||||
// 微信支付单号
|
||||
|
||||
Reference in New Issue
Block a user