diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/WalletAccountController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/WalletAccountController.java index c8cbaee..621e509 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/WalletAccountController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/WalletAccountController.java @@ -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 getWalleCode(String wuid) { return walletAccountService.getWalleCode(wuid); } + @Operation(summary = "获取附加信息") + @PostMapping("/getPayAttach") + @ApiOperationSupport(order = 8) + public Result getPayAttach(String wuid) { + return walletAccountService.getPayAttach(wuid); + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WalletAccountService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WalletAccountService.java index 80b1cac..5ce363b 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WalletAccountService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/WalletAccountService.java @@ -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 isOpenAccount(String wuid); - public Result getWalleCode(String wuid); + public Result getWalleCode(String wuid); + + public Result getPayAttach(String wuid); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java index 8577e56..b7079e1 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java @@ -82,6 +82,10 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { private RedisUtil redisUtil; @Resource private BatteryStationDao batteryStationDao; + @Resource + private GZHTemplateMessageService gzhTemplateMessageService; + + @Override public Result addPre(OrderSwapBatteryPre osbp) { // 1. 检查车辆 @@ -107,19 +111,15 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { if (!b3){ return new Result().error("该换电站未运营!"); } - /* //判断预约时间是否在换电站开放时间范围内 - //示例 20210430 - String swapDay = osbp.getSwapDay(); - //预约时间段 6:00-20:00 - String swapDuration = osbp.getSwapDuration(); - boolean b4 = batteryStationDao.exists(new QueryWrapper() - .eq("code", osbp.getStationCode()) - - - ); - if (!b4){ - return new Result().error("该换电站开放时间范围!"); - }*/ + //校验预约人是否有未支付的订单 + Long ordercount = orderSwapBatteryDao.selectCount(new QueryWrapper() + .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().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().success(fee); }else { return new Result().error("此订单不是按照电量计算"); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WalletAccountServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WalletAccountServiceImpl.java index 43db7f1..df19cc7 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WalletAccountServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/WalletAccountServiceImpl.java @@ -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 add(WalletAccount wa) { @@ -193,7 +198,7 @@ public class WalletAccountServiceImpl implements WalletAccountService { } @Override - public Result getWalleCode(String wuid) { + public Result getWalleCode(String wuid) { LambdaQueryWrapper 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().success("成功",(StringUtils.hasText(walletAccount.getAccName()) ? walletAccount.getAccName() : "")+"_"+walletAccount.getCode()); } + @Override + public Result getPayAttach(String wuid) { + try { + if (!StringUtils.hasText(wuid)) { + return new Result().error("WUID不能为空"); + } + + // 查询 WechatUser + WechatUser wechatUser = queryWechatUserByWuid(wuid); + if (wechatUser == null) { + log.warn("未找到对应的WechatUser, WUID: {}", wuid); + return new Result().error("未找到对应的WechatUser"); + } + + + // 查询 WalletAccount + WalletAccount walletAccount = queryWalletAccountByCode(wechatUser.getWuid()); + if (walletAccount == null) { + log.warn("未找到对应的WalletAccount, Code: {}", walletAccount.getCode()); + return new Result().error("未找到对应的WalletAccount"); + } + + // 构建并返回结果 + WechatPayAttach wechatPayAttach = buildWechatPayAttach( walletAccount,wechatUser); + return new Result().success(wechatPayAttach); + + } catch (Exception e) { + log.error("获取支付附加信息失败, WUID: {}, 错误信息: {}", wuid, e.getMessage(), e); + return new Result().error("系统异常,请稍后再试"); + } + } + + // 查询 WechatUser 的封装方法 + private WechatUser queryWechatUserByWuid(String wuid) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(WechatUser::getWuid, wuid); + return wechatUserDao.selectOne(queryWrapper); + } + + // 查询 TradeDetail 的封装方法 + private TradeDetail queryTradeDetailByTraderCode(String traderCode) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TradeDetail::getTraderCode, traderCode); + return tradeDetailDao.selectOne(queryWrapper); + } + + // 查询 WalletAccount 的封装方法 + private WalletAccount queryWalletAccountByCode(String wuid) { + LambdaQueryWrapper 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; + } + + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderSwapBatteryTask.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderSwapBatteryTask.java index dccce1b..c5505fa 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderSwapBatteryTask.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderSwapBatteryTask.java @@ -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===>>> 开始查找预约单更新预约状态.."); diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java index ff4adc8..f41628d 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java @@ -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 getPayAttach(@NotBlank @RequestParam String wuid) { + return cloudService.getPayAttach(wuid); + } } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java index efdcdce..eb2757f 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/rpc/CloudService.java @@ -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 getStartSwap(@RequestParam String wuid, String orderId); + @PostMapping(value = "/cloud/wallet/getWalleCode", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result getWalleCode(@RequestParam String wuid); + + @PostMapping(value = "/cloud/wallet/getPayAttach", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result getPayAttach(@NotBlank String wuid); } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/utils/wechatpay/WechatPayComponent.java b/wechat-server/src/main/java/com/evotech/hd/wechat/utils/wechatpay/WechatPayComponent.java index 4a3caf0..2d89938 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/utils/wechatpay/WechatPayComponent.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/utils/wechatpay/WechatPayComponent.java @@ -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 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);