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.ruoyi.common.core.domain.R;
|
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.query.CourseOrderListQuery;
|
import com.ruoyi.system.query.GetCourseListQuery;
|
import com.ruoyi.system.service.*;
|
import com.ruoyi.system.wxPay.model.WeixinPayProperties;
|
import com.ruoyi.system.wxPay.utils.WxRefundUtil;
|
import com.ruoyi.system.wxPay.utils.WxV3Pay;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
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;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
@Slf4j
|
@RestController
|
@RequestMapping("/course")
|
@Api(tags = "课程模块")
|
public class CourseController {
|
|
private final TCourseService courseService;
|
private final TCourseOrderService courseOrderService;
|
private final TokenService tokenService;
|
private final WxV3Pay wxV3Pay;
|
private final WeixinPayProperties weixinPayProperties;
|
private final TAppUserService appUserService;
|
private final TInsuranceOrderService insuranceOrderService;
|
private final TOtherConfigService otherConfigService;
|
|
public CourseController(TCourseService courseService, TCourseOrderService courseOrderService, TokenService tokenService, WxV3Pay wxV3Pay, WeixinPayProperties weixinPayProperties, TAppUserService appUserService, TInsuranceOrderService insuranceOrderService, TOtherConfigService otherConfigService) {
|
this.courseService = courseService;
|
this.courseOrderService = courseOrderService;
|
this.tokenService = tokenService;
|
this.wxV3Pay = wxV3Pay;
|
this.weixinPayProperties = weixinPayProperties;
|
this.appUserService = appUserService;
|
this.insuranceOrderService = insuranceOrderService;
|
this.otherConfigService = otherConfigService;
|
|
}
|
|
|
@GetMapping("/getOtherConfig")
|
@ApiOperation(value = "课程模块--是否开启课程缴费 1=是 0=否",response = TOtherConfig.class)
|
public R<TOtherConfig> getOtherConfig() {
|
TOtherConfig tOtherConfig = otherConfigService.getById(1);
|
return R.ok(tOtherConfig);
|
}
|
|
|
@PostMapping("/getCourseList")
|
@ApiOperation(value = "课程模块--列表",response = TCourse.class)
|
public R<Page<TCourse>> getCourseList(@RequestBody GetCourseListQuery query) {
|
Page<TCourse> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<TCourse> coursePage = courseService.page(page, Wrappers.<TCourse>lambdaQuery().eq(TCourse::getCourseType,query.getCourseType()).like(Objects.nonNull(query.getCourseTitle()), TCourse::getCourseTitle, query.getCourseTitle()).orderByDesc(TCourse::getCreateTime));
|
return R.ok(coursePage);
|
}
|
|
|
@PostMapping("/getCourseDetail/{id}")
|
@ApiOperation(value = "课程模块--详情",response = TCourse.class)
|
public R<TCourse> getCourseDetail(@PathVariable String id) {
|
TCourse course = courseService.getById(id);
|
long count = courseOrderService.count(Wrappers.lambdaQuery(TCourseOrder.class).eq(TCourseOrder::getCourseId, id).in(TCourseOrder::getPayStatus, Arrays.asList(1, 2, 5)));
|
course.setSignUpNum((int) count);
|
return R.ok(course);
|
}
|
|
|
|
@PostMapping("/getCourseOrderList")
|
@ApiOperation(value = "课程模块--订单列表",response = TCourseOrder.class)
|
public R<Page<TCourseOrder>> getCourseOrderList(@RequestBody CourseOrderListQuery query) {
|
String userId = tokenService.getLoginUserApplet().getUserId();
|
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())
|
.orderByDesc(TCourseOrder::getCreateTime));
|
List<TCourseOrder> records = courseOrderPage.getRecords();
|
if(!records.isEmpty()){
|
List<String> courseIds = records.stream().map(TCourseOrder::getCourseId).collect(Collectors.toList());
|
List<TCourse> tCourses = courseService.listByIds(courseIds);
|
records.forEach(courseOrder -> {
|
tCourses.forEach(course -> {
|
if(course.getId().equals(courseOrder.getCourseId())){
|
courseOrder.setCourse(course);
|
}
|
});
|
});
|
}
|
courseOrderPage.setRecords(records);
|
return R.ok(courseOrderPage);
|
}
|
|
@GetMapping("/getCourseOrderDetail/{id}")
|
@ApiOperation(value = "课程模块--订单详情",response = TCourseOrder.class)
|
public R<TCourseOrder> getCourseOrderList(@PathVariable String id) {
|
String userId = tokenService.getLoginUserApplet().getUserId();
|
TCourseOrder courseOrder = courseOrderService.getById(id);
|
if(!courseOrder.getAppUserId().equals(userId)){
|
return R.fail("无权限");
|
}
|
String courseId = courseOrder.getCourseId();
|
TCourse course = courseService.getById(courseId);
|
courseOrder.setCourse(course);
|
return R.ok(courseOrder);
|
}
|
|
@PostMapping("/saveOrder")
|
@ApiOperation(value = "课程模块--报名")
|
public R<Map<String, Object>> saveOrder(@RequestBody TCourseOrder courseOrder) {
|
String userId = tokenService.getLoginUserApplet().getUserId();
|
// 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("报名人数已满");
|
}
|
|
courseOrder.setAppUserId(userId);
|
courseOrder.setPayMoney(course.getCourseCost());
|
courseOrder.setPayStatus(0);
|
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());
|
// 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(), "oz71-1_OevadwmESB_IFAW7PucWY","购买课程","");
|
return R.ok(result);
|
}
|
|
|
@PostMapping("/refundOrder")
|
@ApiOperation(value = "课程模块--退款")
|
public R<?> refundOrder(@RequestBody TCourseOrder courseOrder) {
|
String userId = tokenService.getLoginUserApplet().getUserId();
|
TCourseOrder courseOrder1 = courseOrderService.getById(courseOrder.getId());
|
courseOrder1.setRefundReason(courseOrder.getRefundReason());
|
courseOrder1.setRefundReasonPictures(courseOrder.getRefundReasonPictures());
|
|
courseOrder1.setRequestRefundTime(LocalDateTime.now());
|
courseOrder1.setRefundMoney(courseOrder1.getPayMoney());
|
|
if(!userId.equals(courseOrder1.getAppUserId())){
|
return R.fail("无权限操作");
|
}
|
if(courseOrder1.getPayStatus()!=2){
|
return R.fail("状态不允许退款");
|
}
|
courseOrder1.setPayStatus(6);
|
LocalDateTime payTime = courseOrder1.getPayTime();
|
if(payTime==null){
|
return R.fail("状态不允许退款");
|
}
|
if(payTime.plusDays(2).isBefore(LocalDateTime.now())){
|
courseOrder1.setBankCardNumber(courseOrder.getBankCardNumber());
|
courseOrder1.setCardholderName(courseOrder.getCardholderName());
|
courseOrder1.setBankName(courseOrder.getBankName());
|
courseOrder1.setRefundStatus(1);
|
courseOrderService.updateById(courseOrder1);
|
}else {
|
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;
|
|
}
|