From bf1b072b6af7de878fb5750bc14db7a2e2258f0c Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 31 十二月 2025 15:46:30 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOtherConfigController.java | 2
ruoyi-system/src/main/resources/mapper/system/TCourseOrderMapper.xml | 6 +++
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCourseOrderServiceImpl.java | 5 ++
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/CourseController.java | 7 ++-
ruoyi-system/src/main/java/com/ruoyi/system/dto/BuyInsuranceDto.java | 11 +++++
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCourseOrderMapper.java | 2 +
ruoyi-system/src/main/java/com/ruoyi/system/vo/UserInsuranceVo.java | 4 +-
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/InsuranceController.java | 34 ++++++++++++-----
ruoyi-system/src/main/java/com/ruoyi/system/model/TInsuranceOrder.java | 4 ++
ruoyi-applet/src/main/resources/application-test.yml | 7 +++
ruoyi-system/src/main/java/com/ruoyi/system/service/TCourseOrderService.java | 3 +
11 files changed, 69 insertions(+), 16 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOtherConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOtherConfigController.java
index ae72795..90a1735 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOtherConfigController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOtherConfigController.java
@@ -39,7 +39,7 @@
@ApiOperation(value = "修改系统其他设置-通知阈值管理")
@PostMapping(value = "/update")
public R<Boolean> update(@Validated @RequestBody TOtherConfig dto) {
- if(dto.getDays()>=365){
+ if(dto.getDays()!=null && dto.getDays()>=365){
return R.fail("天数不能超过365天");
}
return R.ok(otherConfigService.updateById(dto));
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..09cc1d1 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
@@ -135,7 +135,8 @@
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));
+
+ 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("请先缴纳保险费");
}
@@ -176,7 +177,9 @@
@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));
+
+ TCourse course = courseService.getById(courseOrder.getCourseId());
+ 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("请先缴纳保险费");
}
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/InsuranceController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/InsuranceController.java
index bb7604a..bac84d9 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/InsuranceController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/InsuranceController.java
@@ -11,10 +11,7 @@
import com.ruoyi.system.dto.BuyInsuranceDto;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.GetCourseListQuery;
-import com.ruoyi.system.service.TAppUserService;
-import com.ruoyi.system.service.TBannerService;
-import com.ruoyi.system.service.TInsuranceOrderService;
-import com.ruoyi.system.service.TInsuranceService;
+import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.UserInsuranceVo;
import com.ruoyi.system.wxPay.utils.WxRefundUtil;
import com.ruoyi.system.wxPay.utils.WxV3Pay;
@@ -24,11 +21,13 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import javax.validation.Valid;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
+import java.util.Arrays;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
@@ -44,13 +43,16 @@
private final TInsuranceService tInsuranceService;
private final WxV3Pay wxV3Pay;
private final TAppUserService tAppUserService;
+ private final TCourseOrderService tCourseOrderService;
- public InsuranceController(TInsuranceOrderService tInsuranceOrderService, TokenService tokenService, TInsuranceService tInsuranceService, WxV3Pay wxV3Pay, TAppUserService tAppUserService) {
+
+ public InsuranceController(TInsuranceOrderService tInsuranceOrderService, TokenService tokenService, TInsuranceService tInsuranceService, WxV3Pay wxV3Pay, TAppUserService tAppUserService, TCourseOrderService tCourseOrderService) {
this.tInsuranceOrderService = tInsuranceOrderService;
this.tokenService = tokenService;
this.tInsuranceService = tInsuranceService;
this.wxV3Pay = wxV3Pay;
this.tAppUserService = tAppUserService;
+ this.tCourseOrderService = tCourseOrderService;
}
@@ -59,10 +61,10 @@
*/
@GetMapping("/getInsurance")
@ApiOperation(value = "保险模块--获取用户是否有保险",response = TBanner.class)
- public R<UserInsuranceVo> getCourseList() {
+ public R<UserInsuranceVo> getCourseList(int type) {
String userId = tokenService.getLoginUserApplet().getUserId();
UserInsuranceVo insuranceVo = new UserInsuranceVo();
- TInsuranceOrder one = tInsuranceOrderService.getOne(Wrappers.<TInsuranceOrder>lambdaQuery().eq(TInsuranceOrder::getAppUserId, userId).eq(TInsuranceOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("LIMIT 1"));
+ TInsuranceOrder one = tInsuranceOrderService.getOne(Wrappers.<TInsuranceOrder>lambdaQuery().eq(TInsuranceOrder::getType,type).eq(TInsuranceOrder::getAppUserId, userId).eq(TInsuranceOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("LIMIT 1"));
if(one!=null){
insuranceVo.setUserId(userId);
insuranceVo.setPayTime(one.getPayTime());
@@ -75,12 +77,12 @@
@PostMapping("/buyInsurance")
@ApiOperation(value = "保险模块--购买保险")
- public R<?> buyInsurance(@RequestBody BuyInsuranceDto dto) throws ParseException {
+ public R<?> buyInsurance(@RequestBody @Valid BuyInsuranceDto dto) throws ParseException {
String userId = tokenService.getLoginUserApplet().getUserId();
TAppUser appUser = tAppUserService.getById(userId);
// 查询保险订单
- TInsuranceOrder one = tInsuranceOrderService.getOne(Wrappers.<TInsuranceOrder>lambdaQuery().eq(TInsuranceOrder::getAppUserId, userId).eq(TInsuranceOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("LIMIT 1"));
+ TInsuranceOrder one = tInsuranceOrderService.getOne(Wrappers.<TInsuranceOrder>lambdaQuery().eq(TInsuranceOrder::getType,dto.getCourseType()).eq(TInsuranceOrder::getAppUserId, userId).eq(TInsuranceOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("LIMIT 1"));
if(one!=null){
if(one.getEndTime().after(new Date())){
return R.fail("您已购买保险");
@@ -93,7 +95,8 @@
insuranceOrder.setIdCard(dto.getIdCard());
insuranceOrder.setImg(dto.getImg());
insuranceOrder.setPayType(dto.getType());
- TInsurance insurance = tInsuranceService.getOne(new LambdaQueryWrapper<TInsurance>().eq(TInsurance::getStatus, 1));
+ insuranceOrder.setType(dto.getCourseType());
+ TInsurance insurance = tInsuranceService.getOne(new LambdaQueryWrapper<TInsurance>().eq(TInsurance::getInsuranceType, dto.getCourseType()).eq(TInsurance::getStatus, 1));
if(insurance==null){
return R.fail("保险已关闭");
}
@@ -106,6 +109,9 @@
String payNo = OrderNos.getDid();
insuranceOrder.setPayNo(payNo);
boolean save = tInsuranceOrderService.save(insuranceOrder);
+ if(dto.getType()==2){
+ return R.ok();
+ }
Map<String, Object> result = wxV3Pay.jsApiInsurance(payNo, insuranceOrder.getPayMoney().multiply(BigDecimal.valueOf(100)).longValue(), appUser.getOpenId(),"购买保险","");
return R.ok(result);
}
@@ -133,6 +139,14 @@
order1.setRequestRefundTime(new Date());
order1.setRefundMoney(order1.getPayMoney().doubleValue());
+ Integer type = order1.getType();
+
+
+ // 判断是否有当前的课程 待支付 和已完成
+ int count = tCourseOrderService.countOrderNum( userId, type);
+ if(count>0){
+ return R.fail("请先完成课程");
+ }
if(!userId.equals(order1.getAppUserId())){
return R.fail("无权限操作");
diff --git a/ruoyi-applet/src/main/resources/application-test.yml b/ruoyi-applet/src/main/resources/application-test.yml
index ebca5d4..e7df8ec 100644
--- a/ruoyi-applet/src/main/resources/application-test.yml
+++ b/ruoyi-applet/src/main/resources/application-test.yml
@@ -217,4 +217,9 @@
# 支付成功回调地址
notifyPayUrl: http://221.182.45.100:9100/wx/pay/notify
# 支付退款回调地址
- notifyRefundUrl: http://221.182.45.100:9100/wx/refund/notify
\ No newline at end of file
+ notifyRefundUrl: http://221.182.45.100:9100/wx/refund/notify
+
+ # 保险支付成功回调地址
+ insuranceNotifyPayUrl: http://221.182.45.100:9100/wx/pay/notifyInsurance
+ # 保险支付退款回调地址
+ notifyInsuranceRefundUrl: http://221.182.45.100:9100/wx/refund/notifyInsurance
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/BuyInsuranceDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/BuyInsuranceDto.java
index 1ec3d0f..66588b0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/BuyInsuranceDto.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/BuyInsuranceDto.java
@@ -4,22 +4,33 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
@Data
@ApiModel("购买保险参数")
public class BuyInsuranceDto {
@ApiModelProperty("姓名")
+ @NotBlank(message = "姓名不能为空")
private String name;
@ApiModelProperty("手机号")
+ @NotBlank(message = "手机号不能为空")
private String phone;
@ApiModelProperty("身份证号")
+ @NotBlank(message = "身份证号不能为空")
private String idCard;
@ApiModelProperty("凭证")
private String img;
@ApiModelProperty("1线上2线下")
+ @NotNull(message = "支付方式不能为空")
private Integer type;
+
+ @ApiModelProperty("1=社区大学课程 2=暑期青少年工艺培训班")
+ @NotNull(message = "保险类型不能为空")
+ private Integer courseType;
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCourseOrderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCourseOrderMapper.java
index 00ac199..deb769d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCourseOrderMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCourseOrderMapper.java
@@ -42,4 +42,6 @@
*/
List<TRefundOrderExport> exportRefundOrder(@Param("query")TCourseOrderQuery query);
+ int countOrderNum(@Param("userId") String userId, @Param("type") Integer type);
+
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TInsuranceOrder.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TInsuranceOrder.java
index e5cf398..3174ef8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TInsuranceOrder.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TInsuranceOrder.java
@@ -43,6 +43,10 @@
@ApiModelProperty(value = "用户id")
private String appUserId;
+ @TableField("type")
+ @ApiModelProperty(value = "1=社区大学课程 2=暑期青少年工艺培训班")
+ private Integer type;
+
@TableField("name")
@ApiModelProperty(value = "姓名")
private String name;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TCourseOrderService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TCourseOrderService.java
index 4aaea1a..ebfa094 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TCourseOrderService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TCourseOrderService.java
@@ -45,4 +45,7 @@
* @return
*/
List<TRefundOrderExport> exportRefundOrder(TCourseOrderQuery query);
+
+ int countOrderNum(String userId, Integer type);
+
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCourseOrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCourseOrderServiceImpl.java
index c42508d..263fd94 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCourseOrderServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCourseOrderServiceImpl.java
@@ -52,4 +52,9 @@
List<TRefundOrderExport> list = this.baseMapper.exportRefundOrder(query);
return list;
}
+
+ @Override
+ public int countOrderNum(String userId, Integer type) {
+ return this.baseMapper.countOrderNum(userId,type);
+ }
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/UserInsuranceVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/UserInsuranceVo.java
index 3d54b64..833c92d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/UserInsuranceVo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/UserInsuranceVo.java
@@ -16,10 +16,10 @@
private String userId;
@ApiModelProperty("保险支付时间")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDateTime payTime;
@ApiModelProperty("保险到期时间")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endTime;
}
diff --git a/ruoyi-system/src/main/resources/mapper/system/TCourseOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TCourseOrderMapper.xml
index ad77786..41527c6 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TCourseOrderMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TCourseOrderMapper.xml
@@ -157,5 +157,11 @@
</where>
ORDER BY tco.create_time DESC
</select>
+ <select id="countOrderNum" resultType="java.lang.Integer">
+
+select count(1) from t_course_order tco left join t_course tc on tc.id = tco.course_id
+where tco.disabled = 0 and tco.app_user_id = #{userId}
+and tco.pay_status in (1,2) and tc.course_type = #{type}
+ </select>
</mapper>
--
Gitblit v1.7.1