From 70fab9b9607f18df92fc2c7c0efced0dcd55d5fc Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期一, 02 三月 2026 09:46:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/CourseController.java |  103 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 86 insertions(+), 17 deletions(-)

diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/CourseController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/CourseController.java
index f6dd62d..a343407 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/CourseController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/CourseController.java
@@ -3,16 +3,18 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.R;
+import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.OrderNos;
 import com.ruoyi.framework.web.service.TokenService;
-import com.ruoyi.system.model.TCourse;
-import com.ruoyi.system.model.TCourseOrder;
-import com.ruoyi.system.model.TInsuranceOrder;
-import com.ruoyi.system.model.TOtherConfig;
+import com.ruoyi.system.model.*;
 import com.ruoyi.system.query.CourseOrderListQuery;
 import com.ruoyi.system.query.GetCourseListQuery;
 import com.ruoyi.system.service.*;
+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.utils.WxRefundUtil;
 import com.ruoyi.system.wxPay.utils.WxV3Pay;
@@ -94,8 +96,8 @@
         Page<TCourseOrder> page = new Page<>(query.getPageNum(), query.getPageSize());
         Page<TCourseOrder> courseOrderPage = courseOrderService.page(page, Wrappers.<TCourseOrder>lambdaQuery()
                 .eq(TCourseOrder::getAppUserId, userId)
-                .ne(TCourseOrder::getPayStatus, 4)
                 .eq(Objects.nonNull(query.getPayStatus()),TCourseOrder::getPayStatus, query.getPayStatus())
+                .ne(TCourseOrder::getPayStatus, 4)
                 .orderByDesc(TCourseOrder::getCreateTime));
         List<TCourseOrder> records = courseOrderPage.getRecords();
         if(!records.isEmpty()){
@@ -131,14 +133,10 @@
     @ApiOperation(value = "课程模块--报名")
     public R<Map<String, Object>> saveOrder(@RequestBody TCourseOrder courseOrder) {
         String userId = tokenService.getLoginUserApplet().getUserId();
-//        TAppUser appUser = appUserService.getById(userId);
+        TAppUser appUser = appUserService.getById(userId);
         TCourse course = courseService.getById(courseOrder.getCourseId());
         LocalDate endTime = course.getEndTime();
 
-        long count1 = insuranceOrderService.count(new LambdaQueryWrapper<TInsuranceOrder>().eq(TInsuranceOrder::getAppUserId, userId).eq(TInsuranceOrder::getStatus, 2));
-        if(count1<=0){
-            return R.fail("请先缴纳保险费");
-        }
 
         if(endTime.isBefore(LocalDate.now())){
             return R.fail("课程已截至报名");
@@ -148,9 +146,18 @@
             return R.fail("报名人数已满");
         }
 
+        long userCount = courseOrderService.count(Wrappers.lambdaQuery(TCourseOrder.class)
+                .eq(TCourseOrder::getIdCard, courseOrder.getIdCard())
+                .eq(TCourseOrder::getCourseId, course.getId())
+                .in(TCourseOrder::getPayStatus, 1, 2, 5, 6));
+
+        if(userCount>0){
+            return R.fail("该课程已提交相同的报名意向!");
+        }
+
         courseOrder.setAppUserId(userId);
         courseOrder.setPayMoney(course.getCourseCost());
-        courseOrder.setPayStatus(0);
+        courseOrder.setPayStatus(1);
         courseOrder.setOrderNumber(OrderNos.getDid());
         boolean save = courseOrderService.save(courseOrder);
 //        if (save) {
@@ -171,17 +178,76 @@
 //        }
         return R.ok();
     }
+    @PostMapping("/saveOrderAndPay")
+    @ApiOperation(value = "课程模块--报名并支付")
+    public R<Map<String, Object>> saveOrderAndPay(@RequestBody TCourseOrder courseOrder) {
+        String userId = tokenService.getLoginUserApplet().getUserId();
+        TAppUser appUser = appUserService.getById(userId);
+        TCourse course = courseService.getById(courseOrder.getCourseId());
+        LocalDate endTime = course.getEndTime();
+
+        TOtherConfig config = otherConfigService.getById(1);
+        if(config.getIsOpenInsurance()==1){
+            long count1 = insuranceOrderService.count(new LambdaQueryWrapper<TInsuranceOrder>().eq(TInsuranceOrder::getType,course.getCourseType()).eq(TInsuranceOrder::getAppUserId, userId).eq(TInsuranceOrder::getStatus, 2));
+            if(count1<=0){
+                return R.fail("请先缴纳保险费");
+            }
+
+        }
+
+        if(course.getIsOpenCourse()==0){
+            return R.fail("课程未开启缴费");
+        }
+
+        if(endTime.isBefore(LocalDate.now())){
+            return R.fail("课程已截至报名");
+        }
+        long count = courseOrderService.count(Wrappers.lambdaQuery(TCourseOrder.class).eq(TCourseOrder::getCourseId, course.getId()).in(TCourseOrder::getPayStatus, Arrays.asList(1, 2, 5)));
+        if(count>=course.getPeopleLimit()){
+            return R.fail("报名人数已满");
+        }
+
+        courseOrder.setAppUserId(userId);
+        courseOrder.setPayMoney(course.getCourseCost());
+        courseOrder.setPayStatus(1);
+        courseOrder.setOrderNumber(OrderNos.getDid());
+        boolean save = courseOrderService.save(courseOrder);
+        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();
-        long count1 = insuranceOrderService.count(new LambdaQueryWrapper<TInsuranceOrder>().eq(TInsuranceOrder::getAppUserId, userId).eq(TInsuranceOrder::getStatus, 2));
-        if(count1<=0){
-            return R.fail("请先缴纳保险费");
-        }
-//        TAppUser appUser = appUserService.getById(userId);
         TCourseOrder courseOrder1 = courseOrderService.getById(courseOrder.getId());
+        TCourse course = courseService.getById(courseOrder1.getCourseId());
+
+        TOtherConfig config = otherConfigService.getById(1);
+        if(config.getIsOpenInsurance()==1){
+            long count1 = insuranceOrderService.count(new LambdaQueryWrapper<TInsuranceOrder>().eq(TInsuranceOrder::getType,course.getCourseType()).eq(TInsuranceOrder::getAppUserId, userId).eq(TInsuranceOrder::getStatus, 2));
+            if(count1<=0){
+                return R.fail("请先缴纳保险费");
+            }
+
+        }
+        TAppUser appUser = appUserService.getById(userId);
+
 //        if(!userId.equals(courseOrder1.getAppUserId())){
 //            return R.fail("无权限操作");
 //        }
@@ -194,7 +260,7 @@
         courseOrder1.setIdCard(courseOrder.getIdCard());
 
         courseOrderService.updateById(courseOrder1);
-        Map<String, Object> result = wxV3Pay.jsApi(courseOrder1.getOrderNumber(), courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).longValue(), "oz71-1_OevadwmESB_IFAW7PucWY","购买课程","");
+        Map<String, Object> result = wxV3Pay.jsApi(courseOrder1.getOrderNumber(), courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).longValue(), appUser.getOpenId(),"购买课程","");
         return R.ok(result);
     }
 
@@ -230,6 +296,9 @@
         }else {
             String outRefundNo = OrderNos.getDid();
             courseOrder1.setRefundNumber(outRefundNo);
+            courseOrder1.setBankCardNumber(courseOrder.getBankCardNumber());
+            courseOrder1.setCardholderName(courseOrder.getCardholderName());
+            courseOrder1.setBankName(courseOrder.getBankName());
             courseOrderService.updateById(courseOrder1);
 //            WxPaymentRefundModel refundModel = new WxPaymentRefundModel();
 ////            refundModel.setSub_mchid(weixinPayProperties.getMchId());

--
Gitblit v1.7.1