diff --git a/src/main/java/com/sqx/once/OneTimeTaskListener.java b/src/main/java/com/sqx/once/OneTimeTaskListener.java new file mode 100644 index 00000000..e1d29176 --- /dev/null +++ b/src/main/java/com/sqx/once/OneTimeTaskListener.java @@ -0,0 +1,125 @@ +package com.sqx.once; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.sqx.modules.app.dao.UserDao; +import com.sqx.modules.app.dao.UserMoneyDao; +import com.sqx.modules.app.dao.UserMoneyDetailsDao; +import com.sqx.modules.app.service.InviteAchievementService; +import com.sqx.modules.app.service.UserService; +import com.sqx.modules.job.task.TempOrdersTask; +import com.sqx.modules.orders.entity.Orders; +import com.sqx.modules.orders.service.OrdersService; +import com.sqx.modules.pay.dao.CashOutDao; +import com.sqx.modules.pay.dao.PayDetailsDao; +import com.sqx.modules.pay.entity.CashOut; +import com.sqx.modules.pay.entity.PayDetails; +import com.sqx.modules.pay.service.PayDetailsService; +import com.sqx.modules.pay.wuyou.BaseResp; +import com.sqx.modules.pay.wuyou.WuyouPay; +import com.sqx.modules.sys.service.SysUserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +import java.util.List; + + +@Component +public class OneTimeTaskListener implements ApplicationListener { + + final ApplicationContext applicationContext; + final UserService userService; + final TempOrdersTask tempOrdersTask; + final InviteAchievementService inviteAchievementService; + final PayDetailsService payDetailsService; + final PayDetailsDao payDetailsDao; + final UserMoneyDetailsDao userMoneyDetailsDao; + final UserMoneyDao userMoneyDao; + + private final OrdersService ordersService; + private final WuyouPay wuyouPay; + private Logger logger = LoggerFactory.getLogger(getClass()); + private final CashOutDao cashOutDao; + + public OneTimeTaskListener(ApplicationContext applicationContext, UserService userService, TempOrdersTask tempOrdersTask, InviteAchievementService inviteAchievementService, PayDetailsService payDetailsService, PayDetailsDao payDetailsDao, UserMoneyDetailsDao userMoneyDetailsDao, UserMoneyDao userMoneyDao, OrdersService ordersService, WuyouPay wuyouPay, CashOutDao cashOutDao) { + this.applicationContext = applicationContext; + this.userService = userService; + this.tempOrdersTask = tempOrdersTask; + this.inviteAchievementService = inviteAchievementService; + this.payDetailsService = payDetailsService; + this.payDetailsDao = payDetailsDao; + this.userMoneyDetailsDao = userMoneyDetailsDao; + this.userMoneyDao = userMoneyDao; + this.ordersService = ordersService; + this.wuyouPay = wuyouPay; + this.cashOutDao = cashOutDao; + } + + @Override + public void onApplicationEvent(ApplicationReadyEvent event) { + System.out.println("应用启动完成后执行一次性方法"); + // 这里可以放置你的业务逻辑 + + List payDetailsList = payDetailsDao.selectList(new LambdaQueryWrapper() + .eq(PayDetails::getState, 0) + .between(PayDetails::getCreateTime, "2025-01-06 15:45:00", "2025-01-06 15:55:00")); + for (PayDetails details : payDetailsList) { + logger.info("开始处理: {}", details.getId()); + try { + BaseResp baseResp = wuyouPay.queryOrder(details.getThirdOrderNo(), details.getUserId(), details.getMoney().toString(), "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1 Edg/131.0.0.0"); + logger.info("baseResp:{} ", JSONUtil.toJsonStr(baseResp)); + if (baseResp.getCode() == null || baseResp.getCode() != 200) { + logger.info("code错误跳过"); + continue; + } + Orders orders = ordersService.getOne(new LambdaQueryWrapper() + .eq(Orders::getOrdersNo, details.getOrderId())); + if ("SUCCESS".equals(baseResp.getPayStatus()) || "SUCCESS".equals(baseResp.getPayStatus2())) { + logger.info("payDetails:{} ", JSONUtil.toJsonStr(details)); + logger.info("order:{} ", JSONUtil.toJsonStr(orders)); + tempOrdersTask.updateOrderStatus(details, orders); + } else { + logger.info("订单未支付,修改状态: {}", details.getTradeNo()); + if (orders != null) { + orders.setStatus(3); + ordersService.update(orders, new LambdaQueryWrapper() + .eq(Orders::getOrdersId, orders.getOrdersId()).eq(Orders::getUserId, orders.getUserId())); + } + details.setState(2); + payDetailsDao.update(details, new LambdaQueryWrapper() + .eq(PayDetails::getId, details.getId()).eq(PayDetails::getUserId, details.getUserId())); + } + }catch (Exception e) { + logger.error("", e); + } + } + + List cashOutList = cashOutDao.selectList(new LambdaQueryWrapper() + .eq(CashOut::getState, 0) + .isNull(CashOut::getOutAt) + .between(CashOut::getCreateAt, "2025-01-06 15:45:00", "2025-01-06 15:55:00")); + for (CashOut cashOut : cashOutList) { + logger.info("处理体现订单: {}", cashOut.getId()); + try { + BaseResp baseResp = wuyouPay.queryExtractOrder(cashOut.getOrderNumber(), cashOut.getUserId(), cashOut.getUserType() != 2, cashOut.getMoney()); + logger.info("baseResp:{} ", JSONUtil.toJsonStr(baseResp)); + if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))){ + logger.info("success:{} ", cashOut.getOrderNumber()); + cashOut.setState(1); + cashOut.setOutAt(DateUtil.now()); + cashOut.setRefund(null); + cashOut.setOutAt(DateUtil.now()); + cashOutDao.updateById(cashOut); + } + }catch (Exception e) { + logger.error("", e); + } + } + } +}