liujie
2025-12-12 9a063585a64af45e83c3dde35a01ff45f194fd76
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/CourseController.java
@@ -3,7 +3,6 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.ImmutableMap;
import com.ruoyi.common.core.domain.BasePage;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.OrderNos;
@@ -11,18 +10,16 @@
import com.ruoyi.system.model.TAppUser;
import com.ruoyi.system.model.TCourse;
import com.ruoyi.system.model.TCourseOrder;
import com.ruoyi.system.model.TEmploymentInfo;
import com.ruoyi.system.query.CourseOrderListQuery;
import com.ruoyi.system.query.GetCourseListQuery;
import com.ruoyi.system.service.TAppUserService;
import com.ruoyi.system.service.TCourseOrderService;
import com.ruoyi.system.service.TCourseService;
import com.ruoyi.system.service.TEmploymentInfoService;
import com.ruoyi.system.task.base.QuartzManager;
import com.ruoyi.system.task.base.TimeJobType;
import com.ruoyi.system.task.jobs.OrderJob;
import com.ruoyi.system.wxPay.model.WeixinPayProperties;
import com.ruoyi.system.wxPay.model.WxPaymentRefundModel;
import com.ruoyi.system.wxPay.utils.WxRefundUtil;
import com.ruoyi.system.wxPay.utils.WxV3Pay;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -86,9 +83,8 @@
        String userId = tokenService.getLoginUserApplet().getUserId();
        Page<TCourseOrder> page = new Page<>(query.getPageNum(), query.getPageSize());
        Page<TCourseOrder> courseOrderPage = courseOrderService.page(page, Wrappers.<TCourseOrder>lambdaQuery()
                        .and(e->e.ne(TCourseOrder::getPayStatus, 1)
                                .ge(TCourseOrder::getCreateTime, LocalDateTime.now().minusMinutes(15)))
                .eq(TCourseOrder::getAppUserId, userId)
                .ne(TCourseOrder::getPayStatus, 4)
                .eq(Objects.nonNull(query.getPayStatus()),TCourseOrder::getPayStatus, query.getPayStatus())
                .orderByDesc(TCourseOrder::getCreateTime));
        List<TCourseOrder> records = courseOrderPage.getRecords();
@@ -134,42 +130,47 @@
        courseOrder.setAppUserId(userId);
        courseOrder.setPayMoney(course.getCourseCost());
        courseOrder.setPayStatus(1);
        courseOrder.setPayStatus(0);
        courseOrder.setOrderNumber(OrderNos.getDid());
        boolean save = courseOrderService.save(courseOrder);
        if (save) {
            Map<String, Object> result = wxV3Pay.jsApi(courseOrder.getOrderNumber(), course.getCourseCost().multiply(BigDecimal.valueOf(100)).longValue(), appUser.getOpenId(),"购买课程","");
            return R.ok(result);
        }
        Map<String, ? extends Object> maps =
                new ImmutableMap.Builder<String, String>().
                        put("id", courseOrder.getId())
                        .build();
        QuartzManager.addJob(
                OrderJob.class,
                (OrderJob.name+courseOrder.getId()).toUpperCase(),
                TimeJobType.CANCEL_ORDER,
                DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(15)),
                maps
        );
        return R.fail("报名失败");
//        if (save) {
//            Map<String, ? extends Object> maps =
//                    new ImmutableMap.Builder<String, String>().
//                            put("id", courseOrder.getId())
//                            .build();
//            QuartzManager.addJob(
//                    OrderJob.class,
//                    (OrderJob.name+courseOrder.getId()).toUpperCase(),
//                    TimeJobType.CANCEL_ORDER,
//                    DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(15)),
//                    maps
//            );
//            Map<String, Object> result = wxV3Pay.jsApi(courseOrder.getOrderNumber(), course.getCourseCost().multiply(BigDecimal.valueOf(100)).longValue(), appUser.getOpenId(),"购买课程","");
//            return R.ok(result);
////            return R.ok();
//        }
        return R.ok();
    }
    @PostMapping("/payOrder")
    @ApiOperation(value = "课程模块--支付订单")
    public R<Map<String, Object>> payOrder(@RequestBody TCourseOrder courseOrder) {
        String userId = tokenService.getLoginUserApplet().getUserId();
        TAppUser appUser = appUserService.getById(userId);
//        String userId = tokenService.getLoginUserApplet().getUserId();
//        TAppUser appUser = appUserService.getById(userId);
        TCourseOrder courseOrder1 = courseOrderService.getById(courseOrder.getId());
        if(!userId.equals(courseOrder1.getAppUserId())){
            return R.fail("无权限操作");
//        if(!userId.equals(courseOrder1.getAppUserId())){
//            return R.fail("无权限操作");
//        }
        if(courseOrder1.getPayStatus()!=1){
            return R.fail("订单目前无法支付");
        }
        courseOrder1.setOrderNumber(OrderNos.getDid());
        courseOrder1.setRealName(courseOrder.getRealName());
        courseOrder1.setUserPhone(courseOrder.getUserPhone());
        courseOrder1.setIdCard(courseOrder.getIdCard());
        courseOrderService.updateById(courseOrder1);
        Map<String, Object> result = wxV3Pay.jsApi(courseOrder1.getOrderNumber(), courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).longValue(), appUser.getOpenId(),"购买课程","");
        Map<String, Object> result = wxV3Pay.jsApi(courseOrder1.getOrderNumber(), courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).longValue(), "oz71-1_OevadwmESB_IFAW7PucWY","购买课程","");
        return R.ok(result);
    }
@@ -181,7 +182,7 @@
        TCourseOrder courseOrder1 = courseOrderService.getById(courseOrder.getId());
        courseOrder1.setRefundReason(courseOrder.getRefundReason());
        courseOrder1.setRefundReasonPictures(courseOrder.getRefundReasonPictures());
        courseOrder1.setPayStatus(6);
        courseOrder1.setRequestRefundTime(LocalDateTime.now());
        courseOrder1.setRefundMoney(courseOrder1.getPayMoney());
@@ -191,6 +192,7 @@
        if(courseOrder1.getPayStatus()!=2){
            return R.fail("状态不允许退款");
        }
        courseOrder1.setPayStatus(6);
        LocalDateTime payTime = courseOrder1.getPayTime();
        if(payTime==null){
            return R.fail("状态不允许退款");
@@ -202,19 +204,29 @@
            courseOrder1.setRefundStatus(1);
            courseOrderService.updateById(courseOrder1);
        }else {
            WxPaymentRefundModel refundModel = new WxPaymentRefundModel();
            refundModel.setSub_mchid(weixinPayProperties.getMchId());
            refundModel.setSp_appid(weixinPayProperties.getAppId());
            refundModel.setTransaction_id(courseOrder1.getTransactionId());
            refundModel.setOut_trade_no(courseOrder1.getOrderNumber());
            refundModel.setOut_refund_no(OrderNos.getDid());
            refundModel.setReason(courseOrder1.getRefundReason());
            refundModel.setNotify_url("");
            refundModel.setFunds_account("AVAILABLE");
            refundModel.setAmount(new WxPaymentRefundModel.RefundAmount(courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).intValue(), "CNY", courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).intValue()));
            Map<String, Object> refund = wxV3Pay.refund(refundModel);
            String outRefundNo = OrderNos.getDid();
            courseOrder1.setRefundNumber(outRefundNo);
            courseOrderService.updateById(courseOrder1);
//            WxPaymentRefundModel refundModel = new WxPaymentRefundModel();
////            refundModel.setSub_mchid(weixinPayProperties.getMchId());
////            refundModel.setSp_appid(weixinPayProperties.getAppId());
////            refundModel.setTransaction_id(courseOrder1.getTransactionId());
//            refundModel.setOut_trade_no(courseOrder1.getOrderNumber());
//            refundModel.setOut_refund_no(OrderNos.getDid());
//            refundModel.setReason(courseOrder1.getRefundReason());
//            refundModel.setGoods_detail(new ArrayList<>());
//            refundModel.setAmount(new WxPaymentRefundModel.RefundAmount(courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).intValue(), "CNY", courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).intValue()));
//            Map<String, Object> refund = wxV3Pay.refund(refundModel);
//            System.out.println(refund);
            String result = wxRefundUtil.refund(courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).intValue(), courseOrder1.getOrderNumber(),outRefundNo);
            if(result!=null){
                return R.fail(result);
            }
        }
        return R.ok();
    }
    @Autowired
    private WxRefundUtil wxRefundUtil;
}