| ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/CourseController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-system/src/main/java/com/ruoyi/system/mapper/TInsuranceOrderMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-system/src/main/java/com/ruoyi/system/model/TInsuranceOrder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-system/src/main/java/com/ruoyi/system/service/TInsuranceOrderService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TInsuranceOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-system/src/main/resources/mapper/system/TInsuranceMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/CourseController.java
@@ -1,23 +1,20 @@ package com.ruoyi.web.controller.api; 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.TAppUser; import com.ruoyi.system.model.TCourse; import com.ruoyi.system.model.TCourseOrder; import com.ruoyi.system.model.TInsuranceOrder; 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.task.base.QuartzManager; import com.ruoyi.system.task.base.TimeJobType; import com.ruoyi.system.task.jobs.OrderJob; import com.ruoyi.system.service.TInsuranceOrderService; import com.ruoyi.system.wxPay.model.WeixinPayProperties; import com.ruoyi.system.wxPay.utils.WxRefundUtil; import com.ruoyi.system.wxPay.utils.WxV3Pay; @@ -28,6 +25,7 @@ import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; @@ -47,14 +45,16 @@ private final WxV3Pay wxV3Pay; private final WeixinPayProperties weixinPayProperties; private final TAppUserService appUserService; private final TInsuranceOrderService insuranceOrderService; public CourseController(TCourseService courseService, TCourseOrderService courseOrderService, TokenService tokenService, WxV3Pay wxV3Pay, WeixinPayProperties weixinPayProperties, TAppUserService appUserService) { public CourseController(TCourseService courseService, TCourseOrderService courseOrderService, TokenService tokenService, WxV3Pay wxV3Pay, WeixinPayProperties weixinPayProperties, TAppUserService appUserService, TInsuranceOrderService insuranceOrderService) { this.courseService = courseService; this.courseOrderService = courseOrderService; this.tokenService = tokenService; this.wxV3Pay = wxV3Pay; this.weixinPayProperties = weixinPayProperties; this.appUserService = appUserService; this.insuranceOrderService = insuranceOrderService; } @PostMapping("/getCourseList") @@ -121,8 +121,18 @@ @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("课程已截至报名"); } 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("报名人数已满"); @@ -155,7 +165,11 @@ @PostMapping("/payOrder") @ApiOperation(value = "课程模块--支付订单") public R<Map<String, Object>> payOrder(@RequestBody TCourseOrder courseOrder) { // String userId = tokenService.getLoginUserApplet().getUserId(); 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()); // if(!userId.equals(courseOrder1.getAppUserId())){ ruoyi-system/src/main/java/com/ruoyi/system/mapper/TInsuranceOrderMapper.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.model.TInsuranceOrder; /** * <p> * 用户保险费 Mapper 接口 * </p> * * @author administrator * @since 2025-12-29 */ public interface TInsuranceOrderMapper extends BaseMapper<TInsuranceOrder> { } ruoyi-system/src/main/java/com/ruoyi/system/model/TInsuranceOrder.java
New file @@ -0,0 +1,129 @@ package com.ruoyi.system.model; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.ruoyi.common.core.domain.BaseModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; /** * <p> * 用户保险费 * </p> * * @author administrator * @since 2025-12-29 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_insurance_order") public class TInsuranceOrder extends BaseModel { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.ASSIGN_ID) private String id; @TableField("app_user_id") private String appUserId; private String name; private String phone; @TableField("id_card") private String idCard; /** * 支付凭证 */ private String img; /** * 1线上2线下 */ @TableField("pay_type") private Integer payType; /** * 支付编号 */ @TableField("pay_no") private String payNo; /** * 支付金额 */ @TableField("pay_money") private BigDecimal payMoney; /** * 支付时间 */ @TableField("pay_time") private Date payTime; /** * 支付流水号 */ @TableField("transaction_id") private String transactionId; /** * 0未付款 1已退 2已支付 */ @TableField("status") private Integer status; /** * 退款时间 */ @TableField("refund_time") private Date refundTime; /** * 申请退款时间 */ @TableField("request_refund_time") private Date requestRefundTime; /** * 退款金额 */ @TableField("refund_money") private Double refundMoney; /** * 退款原因 */ @TableField("refund_reason") private String refundReason; /** * 申请退款原因图片 */ @TableField("refund_reason_pictures") private String refundReasonPictures; /** * 退款单号 */ @TableField("refund_number") private String refundNumber; /** * 退款流水号 */ @TableField("refund_transaction_id") private String refundTransactionId; /** * 退款审核状态 1=待审核 2=通过 3=驳回 */ @TableField("refund_status") private Integer refundStatus; /** * 退款凭证 */ @TableField("refund_voucher") private String refundVoucher; /** * 驳回原因 */ @TableField("reject_reason") private String rejectReason; } ruoyi-system/src/main/java/com/ruoyi/system/service/TInsuranceOrderService.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.model.TInsuranceOrder; /** * <p> * 用户保险费 服务类 * </p> * * @author administrator * @since 2025-12-29 */ public interface TInsuranceOrderService extends IService<TInsuranceOrder> { } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TInsuranceOrderServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.mapper.TInsuranceOrderMapper; import com.ruoyi.system.model.TInsuranceOrder; import com.ruoyi.system.service.TInsuranceOrderService; import org.springframework.stereotype.Service; /** * <p> * 用户保险费 服务实现类 * </p> * * @author administrator * @since 2025-12-29 */ @Service public class TInsuranceOrderServiceImpl extends ServiceImpl<TInsuranceOrderMapper, TInsuranceOrder> implements TInsuranceOrderService { } ruoyi-system/src/main/resources/mapper/system/TInsuranceMapper.xml
New file @@ -0,0 +1,36 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.TInsuranceOrderMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.ruoyi.system.model.TInsuranceOrder"> <id column="id" property="id" /> <result column="app_user_id" property="appUserId" /> <result column="name" property="name" /> <result column="phone" property="phone" /> <result column="id_card" property="idCard" /> <result column="img" property="img" /> <result column="pay_type" property="payType" /> <result column="pay_no" property="payNo" /> <result column="pay_money" property="payMoney" /> <result column="pay_time" property="payTime" /> <result column="transaction_id" property="transactionId" /> <result column="status" property="status" /> <result column="refund_time" property="refundTime" /> <result column="request_refund_time" property="requestRefundTime" /> <result column="refund_money" property="refundMoney" /> <result column="refund_reason" property="refundReason" /> <result column="refund_reason_pictures" property="refundReasonPictures" /> <result column="refund_number" property="refundNumber" /> <result column="refund_transaction_id" property="refundTransactionId" /> <result column="refund_status" property="refundStatus" /> <result column="refund_voucher" property="refundVoucher" /> <result column="reject_reason" property="rejectReason" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> <result column="create_by" property="createBy" /> <result column="update_by" property="updateBy" /> <result column="disabled" property="disabled" /> </resultMap> </mapper>