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)); 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("请先缴纳保险费"); } 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("无权限操作"); 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 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 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; } 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); } 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; 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); } 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); } } 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; } 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>