feat(微信支付): 添加获取支付附加信息功能并优化订单处理- 在 CloudServeController 和 CloudService 中添加获取支付附加信息的接口
- 在 WalletAccountController 和 WalletAccountService 中实现获取支付附加信息的方法 - 优化 OrderSwapBatteryServiceImpl 中的订单处理逻辑,增加未支付订单的校验 - 更新 WechatPayComponent 中的支付处理逻辑,集成新的支付附加信息
This commit is contained in:
parent
88ceb8a9e7
commit
011dbf48c6
@ -2,6 +2,7 @@ package com.evotech.hd.cloud.controller.order;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatPayAttach;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.springdoc.core.annotations.ParameterObject;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@ -94,5 +95,11 @@ public class WalletAccountController {
|
||||
public Result<String> getWalleCode(String wuid) {
|
||||
return walletAccountService.getWalleCode(wuid);
|
||||
}
|
||||
@Operation(summary = "获取附加信息")
|
||||
@PostMapping("/getPayAttach")
|
||||
@ApiOperationSupport(order = 8)
|
||||
public Result<WechatPayAttach> getPayAttach(String wuid) {
|
||||
return walletAccountService.getPayAttach(wuid);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.cloud.WalletAccount;
|
||||
import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail;
|
||||
import com.evotech.hd.common.core.entity.cloud.request.PageListWalletRequest;
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatPayAttach;
|
||||
|
||||
public interface WalletAccountService {
|
||||
|
||||
@ -25,5 +26,7 @@ public interface WalletAccountService {
|
||||
|
||||
public Result<Boolean> isOpenAccount(String wuid);
|
||||
|
||||
public Result<String> getWalleCode(String wuid);
|
||||
public Result<String> getWalleCode(String wuid);
|
||||
|
||||
public Result<WechatPayAttach> getPayAttach(String wuid);
|
||||
}
|
||||
|
||||
@ -82,6 +82,10 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
||||
private RedisUtil redisUtil;
|
||||
@Resource
|
||||
private BatteryStationDao batteryStationDao;
|
||||
@Resource
|
||||
private GZHTemplateMessageService gzhTemplateMessageService;
|
||||
|
||||
|
||||
@Override
|
||||
public Result<Integer> addPre(OrderSwapBatteryPre osbp) {
|
||||
// 1. 检查车辆
|
||||
@ -107,19 +111,15 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
||||
if (!b3){
|
||||
return new Result<Integer>().error("该换电站未运营!");
|
||||
}
|
||||
/* //判断预约时间是否在换电站开放时间范围内
|
||||
//示例 20210430
|
||||
String swapDay = osbp.getSwapDay();
|
||||
//预约时间段 6:00-20:00
|
||||
String swapDuration = osbp.getSwapDuration();
|
||||
boolean b4 = batteryStationDao.exists(new QueryWrapper<BatteryStation>()
|
||||
.eq("code", osbp.getStationCode())
|
||||
|
||||
|
||||
);
|
||||
if (!b4){
|
||||
return new Result<Integer>().error("该换电站开放时间范围!");
|
||||
}*/
|
||||
//校验预约人是否有未支付的订单
|
||||
Long ordercount = orderSwapBatteryDao.selectCount(new QueryWrapper<OrderSwapBattery>()
|
||||
.eq("order_pre_uid", osbp.getUcode())
|
||||
.eq("status", 6)
|
||||
.eq("order_pre_uname", osbp.getUname())
|
||||
.eq("station_code", osbp.getStationCode()));
|
||||
if (ordercount > 3){
|
||||
return new Result<Integer>().error("您有未支付的订单,请先支付!");
|
||||
}
|
||||
// 是否需要验证人和车绑定关系
|
||||
|
||||
// 是否需要验证公司和车的绑定关系
|
||||
@ -306,6 +306,8 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
|
||||
order.setAmount(fee.intValue());
|
||||
order.setStatus(6);
|
||||
orderSwapBatteryDao.updateById(order);
|
||||
log.info("订单费用计算完成:{}", JSONUtil.parseObj(order));
|
||||
gzhTemplateMessageService.orderMessageSend2(order.getPkId(),2);
|
||||
return new Result<String>().success(fee);
|
||||
}else {
|
||||
return new Result<String>().error("此订单不是按照电量计算");
|
||||
|
||||
@ -7,8 +7,11 @@ import java.util.Map;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.evotech.hd.cloud.dao.CompanyDao;
|
||||
import com.evotech.hd.cloud.dao.TradeDetailDao;
|
||||
import com.evotech.hd.common.core.dao.wechat.WechatUserDao;
|
||||
import com.evotech.hd.common.core.entity.cloud.Company;
|
||||
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatPayAttach;
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatUser;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
@ -45,6 +48,8 @@ public class WalletAccountServiceImpl implements WalletAccountService {
|
||||
private WechatUserDao wechatUserDao;
|
||||
@Resource
|
||||
private CompanyDao companyDao;
|
||||
@Resource
|
||||
private TradeDetailDao tradeDetailDao;
|
||||
|
||||
@Override
|
||||
public Result<Integer> add(WalletAccount wa) {
|
||||
@ -193,7 +198,7 @@ public class WalletAccountServiceImpl implements WalletAccountService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> getWalleCode(String wuid) {
|
||||
public Result<String> getWalleCode(String wuid) {
|
||||
LambdaQueryWrapper<WalletAccount> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(WalletAccount::getOwnerId, wuid);
|
||||
WalletAccount walletAccount = walletAccountDao.selectOne(queryWrapper);
|
||||
@ -211,4 +216,67 @@ public class WalletAccountServiceImpl implements WalletAccountService {
|
||||
return new Result<String>().success("成功",(StringUtils.hasText(walletAccount.getAccName()) ? walletAccount.getAccName() : "")+"_"+walletAccount.getCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<WechatPayAttach> getPayAttach(String wuid) {
|
||||
try {
|
||||
if (!StringUtils.hasText(wuid)) {
|
||||
return new Result<WechatPayAttach>().error("WUID不能为空");
|
||||
}
|
||||
|
||||
// 查询 WechatUser
|
||||
WechatUser wechatUser = queryWechatUserByWuid(wuid);
|
||||
if (wechatUser == null) {
|
||||
log.warn("未找到对应的WechatUser, WUID: {}", wuid);
|
||||
return new Result<WechatPayAttach>().error("未找到对应的WechatUser");
|
||||
}
|
||||
|
||||
|
||||
// 查询 WalletAccount
|
||||
WalletAccount walletAccount = queryWalletAccountByCode(wechatUser.getWuid());
|
||||
if (walletAccount == null) {
|
||||
log.warn("未找到对应的WalletAccount, Code: {}", walletAccount.getCode());
|
||||
return new Result<WechatPayAttach>().error("未找到对应的WalletAccount");
|
||||
}
|
||||
|
||||
// 构建并返回结果
|
||||
WechatPayAttach wechatPayAttach = buildWechatPayAttach( walletAccount,wechatUser);
|
||||
return new Result<WechatPayAttach>().success(wechatPayAttach);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("获取支付附加信息失败, WUID: {}, 错误信息: {}", wuid, e.getMessage(), e);
|
||||
return new Result<WechatPayAttach>().error("系统异常,请稍后再试");
|
||||
}
|
||||
}
|
||||
|
||||
// 查询 WechatUser 的封装方法
|
||||
private WechatUser queryWechatUserByWuid(String wuid) {
|
||||
LambdaQueryWrapper<WechatUser> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(WechatUser::getWuid, wuid);
|
||||
return wechatUserDao.selectOne(queryWrapper);
|
||||
}
|
||||
|
||||
// 查询 TradeDetail 的封装方法
|
||||
private TradeDetail queryTradeDetailByTraderCode(String traderCode) {
|
||||
LambdaQueryWrapper<TradeDetail> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(TradeDetail::getTraderCode, traderCode);
|
||||
return tradeDetailDao.selectOne(queryWrapper);
|
||||
}
|
||||
|
||||
// 查询 WalletAccount 的封装方法
|
||||
private WalletAccount queryWalletAccountByCode(String wuid) {
|
||||
LambdaQueryWrapper<WalletAccount> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(WalletAccount::getOwnerId, wuid);
|
||||
return walletAccountDao.selectOne(queryWrapper);
|
||||
}
|
||||
|
||||
// 构建 WechatPayAttach 的封装方法
|
||||
private WechatPayAttach buildWechatPayAttach( WalletAccount walletAccount,WechatUser user) {
|
||||
WechatPayAttach wechatPayAttach = new WechatPayAttach();
|
||||
wechatPayAttach.setTrader(user.getName());
|
||||
wechatPayAttach.setTraderCode(walletAccount.getOwnerId());
|
||||
wechatPayAttach.setWalletCode(walletAccount.getCode());
|
||||
return wechatPayAttach;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@ public class OrderSwapBatteryTask {
|
||||
@Resource
|
||||
private OrderSwapBatteryPreDao orderSwapBatteryPreDao;
|
||||
|
||||
// @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次
|
||||
@Scheduled(cron = "0 0 * * * ?") // 每小时执行一次
|
||||
public void orderSwapBatteryExpired() {
|
||||
log.info("\r\n===>>> 开始查找预约单更新预约状态..");
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@ package com.evotech.hd.wechat.controller;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatPayAttach;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
@ -54,4 +55,10 @@ public class CloudServeController {
|
||||
return cloudService.listWechatUserCar(wuid);
|
||||
}
|
||||
|
||||
@Operation(summary = "获取附加信息")
|
||||
@GetMapping("/wechatuser/getPayAttach")
|
||||
@ApiOperationSupport(order = 12)
|
||||
public Result<WechatPayAttach> getPayAttach(@NotBlank @RequestParam String wuid) {
|
||||
return cloudService.getPayAttach(wuid);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,6 +5,8 @@ import java.util.Map;
|
||||
|
||||
|
||||
import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse;
|
||||
import com.evotech.hd.common.core.entity.wechat.WechatPayAttach;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.cloud.openfeign.SpringQueryMap;
|
||||
import org.springframework.http.MediaType;
|
||||
@ -92,7 +94,11 @@ public interface CloudService {
|
||||
@PostMapping(value = "/cloud/order/swap/getStartSwap",
|
||||
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public Result<BatterySwapResponse> getStartSwap(@RequestParam String wuid, String orderId);
|
||||
|
||||
@PostMapping(value = "/cloud/wallet/getWalleCode",
|
||||
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public Result<String> getWalleCode(@RequestParam String wuid);
|
||||
|
||||
@PostMapping(value = "/cloud/wallet/getPayAttach", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public Result<WechatPayAttach> getPayAttach(@NotBlank String wuid);
|
||||
}
|
||||
|
||||
@ -2,7 +2,9 @@ package com.evotech.hd.wechat.utils.wechatpay;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.evotech.hd.common.core.entity.Result;
|
||||
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
|
||||
import com.evotech.hd.common.core.entity.cloud.WalletAccount;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -39,6 +41,7 @@ public class WechatPayComponent {
|
||||
@Resource
|
||||
private CloudService cloudService;
|
||||
|
||||
|
||||
/**
|
||||
* 校验并创建钱包账户
|
||||
* @param wuid 用户ID
|
||||
@ -111,11 +114,25 @@ public class WechatPayComponent {
|
||||
}
|
||||
// 附加信息处理
|
||||
WechatPayAttach payAttach = JSONUtil.toBean(transaction.getAttach(), WechatPayAttach.class);
|
||||
tradeDetail.setTradeType(payAttach.getType());
|
||||
if (wuser != null) {
|
||||
Result<WechatPayAttach> payAttach1 = cloudService.getPayAttach(wuser.getWuid());
|
||||
if (payAttach1 != null && payAttach1.getObj() != null) {
|
||||
payAttach.setTrader(payAttach1.getObj().getTrader());
|
||||
payAttach.setTraderCode(payAttach1.getObj().getTraderCode());
|
||||
payAttach.setWalletCode(payAttach1.getObj().getWalletCode());
|
||||
}
|
||||
}
|
||||
|
||||
tradeDetail.setTradeType(payAttach.getType());
|
||||
//交易人
|
||||
tradeDetail.setTrader(payAttach.getTrader());
|
||||
//交易人编码
|
||||
tradeDetail.setTraderCode(payAttach.getTraderCode());
|
||||
//变动金额的钱包账户
|
||||
tradeDetail.setWallet(payAttach.getWalletCode());
|
||||
|
||||
tradeDetail.setDescription(payAttach.getDescription());
|
||||
|
||||
if (payAttach.getType() == TradeTypeEnums.PAYORDER.getCode() && Transaction.TradeTypeEnum.JSAPI.equals(transaction.getTradeType())) {
|
||||
tradeDetail.setOrderNo(payAttach.getOrderNo());
|
||||
tradeDetail.setOrderCount(payAttach.getOrderNo().split(",").length);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user