From 69741be97cd4e3ba866a33c1b34145e14c744952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Wed, 8 Jan 2025 09:41:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E7=8E=B0=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sqx/OneTimeTaskListener.java | 107 ++++++++++++++++++ .../com/sqx/modules/app/dao/UserMoneyDao.java | 3 + .../sqx/modules/job/task/TempCashOutTask.java | 17 +++ .../sqx/modules/sys/dao/SysUserMoneyDao.java | 4 + 4 files changed, 131 insertions(+) create mode 100644 src/main/java/com/sqx/OneTimeTaskListener.java diff --git a/src/main/java/com/sqx/OneTimeTaskListener.java b/src/main/java/com/sqx/OneTimeTaskListener.java new file mode 100644 index 00000000..0a3edc6f --- /dev/null +++ b/src/main/java/com/sqx/OneTimeTaskListener.java @@ -0,0 +1,107 @@ +package com.sqx; + +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.entity.UserMoney; +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.dao.SysUserMoneyDao; +import com.sqx.modules.sys.entity.SysUserMoney; +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 final SysUserMoneyDao sysUserMoneyDao; + 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, SysUserMoneyDao sysUserMoneyDao) { + 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; + this.sysUserMoneyDao = sysUserMoneyDao; + } + + @Override + public void onApplicationEvent(ApplicationReadyEvent event) { + logger.info("应用启动完成后执行一次性方法"); + + List cashOutList = cashOutDao.selectList(new LambdaQueryWrapper() + .eq(CashOut::getState, 2) + .isNull(CashOut::getOutAt) + .eq(CashOut::getRefund, "订单不存在") + .between(CashOut::getCreateAt, "2025-01-07 19:00:00", "2025-01-08 09:26: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("成功订单: {}, {}", cashOut.getId(), cashOut.getUserName()); + if (cashOut.getUserType() != null && cashOut.getUserType().equals(2)) { + SysUserMoney sysUserMoney = sysUserMoneyDao.selectOne(new LambdaQueryWrapper().eq(SysUserMoney::getUserId, cashOut.getUserId())); + if (sysUserMoney != null) { + sysUserMoneyDao.decrMoney(cashOut.getMoney(), cashOut.getUserId()); + } + }else { + UserMoney userMoney = userMoneyDao.selectOne(new LambdaQueryWrapper().eq(UserMoney::getUserId, cashOut.getUserId())); + if (userMoney != null) { + userMoneyDao.decrMoney(cashOut.getMoney(), cashOut.getUserId()); + } + } + cashOut.setState(1); + cashOut.setRefund("二次询问成功"); + cashOut.setOutAt(DateUtil.now()); + cashOutDao.update(cashOut, new LambdaQueryWrapper().eq(CashOut::getUserId, cashOut.getUserId()).eq(CashOut::getId, cashOut.getId())); + } + }catch (Exception e) { + logger.error("", e); + } + } + } +} + diff --git a/src/main/java/com/sqx/modules/app/dao/UserMoneyDao.java b/src/main/java/com/sqx/modules/app/dao/UserMoneyDao.java index fadf72a0..1dd13ea7 100644 --- a/src/main/java/com/sqx/modules/app/dao/UserMoneyDao.java +++ b/src/main/java/com/sqx/modules/app/dao/UserMoneyDao.java @@ -23,4 +23,7 @@ public interface UserMoneyDao extends BaseMapper { @Update("update user_money set amount=amount+#{money} where user_id=#{userId}") Boolean incrMoney(@Param("money") String money, @Param("userId") Long userId); + + @Update("update user_money set amount=amount-#{money} where user_id=#{userId}") + Boolean decrMoney(@Param("money") String money, @Param("userId") Long userId); } diff --git a/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java b/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java index d90d2096..30d2976c 100644 --- a/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java +++ b/src/main/java/com/sqx/modules/job/task/TempCashOutTask.java @@ -4,7 +4,9 @@ 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.UserMoneyDao; +import com.sqx.modules.app.dao.UserMoneyDetailsDao; import com.sqx.modules.app.entity.UserMoney; +import com.sqx.modules.app.entity.UserMoneyDetails; import com.sqx.modules.pay.dao.CashOutDao; import com.sqx.modules.pay.entity.CashOut; import com.sqx.modules.pay.wuyou.BaseResp; @@ -19,6 +21,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.List; @Component @@ -35,6 +38,8 @@ public class TempCashOutTask{ private UserMoneyDao userMoneyDao; @Autowired private SysUserMoneyDao sysUserMoneyDao; + @Autowired + private UserMoneyDetailsDao userMoneyDetailsDao; @Scheduled(cron = "0 0/8 * * * ? ") public void run() { @@ -73,6 +78,18 @@ public class TempCashOutTask{ cashOut.setState(2); cashOut.setRefund(baseResp.getMsg()); cashOutDao.update(cashOut, new LambdaQueryWrapper().eq(CashOut::getUserId, cashOut.getUserId()).eq(CashOut::getId, cashOut.getId())); + + UserMoneyDetails details = new UserMoneyDetails(); + details.setUserId(cashOut.getUserId()); + details.setTitle("提现失败存入余额" + cashOut.getMoney() + "元"); + details.setClassify(4); + details.setType(1); + details.setState(2); + details.setMoney(new BigDecimal(cashOut.getMoney())); + details.setContent("提现失败存入余额"); + details.setMoneyType(1); + details.setCreateTime(DateUtil.date().toString()); + userMoneyDetailsDao.insert(details); } }catch (Exception e) { logger.error("体现定时任务查询出错", e); diff --git a/src/main/java/com/sqx/modules/sys/dao/SysUserMoneyDao.java b/src/main/java/com/sqx/modules/sys/dao/SysUserMoneyDao.java index 3806f222..6e260ee5 100644 --- a/src/main/java/com/sqx/modules/sys/dao/SysUserMoneyDao.java +++ b/src/main/java/com/sqx/modules/sys/dao/SysUserMoneyDao.java @@ -14,5 +14,9 @@ public interface SysUserMoneyDao extends BaseMapper { @Update("update sys_user_money set money=money+#{money} where user_id=#{userId}") Boolean incrMoney(@Param("money") String money, @Param("userId") Long userId); + + + @Update("update sys_user_money set money=money-#{money} where user_id=#{userId}") + Boolean decrMoney(@Param("money") String money, @Param("userId") Long userId); }