| | |
| | | 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.BasePage; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.OrderNos; |
| | |
| | | import com.ruoyi.system.model.TAppUser; |
| | | import com.ruoyi.system.model.TCourse; |
| | | import com.ruoyi.system.model.TCourseOrder; |
| | | import com.ruoyi.system.model.TEmploymentInfo; |
| | | 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.service.TEmploymentInfoService; |
| | | 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.model.WxPaymentRefundModel; |
| | | import com.ruoyi.system.wxPay.utils.WxRefundUtil; |
| | | import com.ruoyi.system.wxPay.utils.WxV3Pay; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | |
| | | String userId = tokenService.getLoginUserApplet().getUserId(); |
| | | Page<TCourseOrder> page = new Page<>(query.getPageNum(), query.getPageSize()); |
| | | Page<TCourseOrder> courseOrderPage = courseOrderService.page(page, Wrappers.<TCourseOrder>lambdaQuery() |
| | | .and(e->e.ne(TCourseOrder::getPayStatus, 1) |
| | | .ge(TCourseOrder::getCreateTime, LocalDateTime.now().minusMinutes(15))) |
| | | .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(); |
| | |
| | | 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(); |
| | | } |
| | | |
| | | 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 |
| | | ); |
| | | |
| | | |
| | | return R.fail("报名失败"); |
| | | } |
| | | |
| | | @PostMapping("/payOrder") |
| | | @ApiOperation(value = "课程模块--支付订单") |
| | | public R<Map<String, Object>> payOrder(@RequestBody TCourseOrder courseOrder) { |
| | | String userId = tokenService.getLoginUserApplet().getUserId(); |
| | | TAppUser appUser = appUserService.getById(userId); |
| | | // String userId = tokenService.getLoginUserApplet().getUserId(); |
| | | // TAppUser appUser = appUserService.getById(userId); |
| | | TCourseOrder courseOrder1 = courseOrderService.getById(courseOrder.getId()); |
| | | if(!userId.equals(courseOrder1.getAppUserId())){ |
| | | return R.fail("无权限操作"); |
| | | } |
| | | // if(!userId.equals(courseOrder1.getAppUserId())){ |
| | | // 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(), appUser.getOpenId(),"购买课程",""); |
| | | Map<String, Object> result = wxV3Pay.jsApi(courseOrder1.getOrderNumber(), courseOrder1.getPayMoney().multiply(BigDecimal.valueOf(100)).longValue(), "oz71-1_OevadwmESB_IFAW7PucWY","购买课程",""); |
| | | return R.ok(result); |
| | | } |
| | | |
| | |
| | | TCourseOrder courseOrder1 = courseOrderService.getById(courseOrder.getId()); |
| | | courseOrder1.setRefundReason(courseOrder.getRefundReason()); |
| | | courseOrder1.setRefundReasonPictures(courseOrder.getRefundReasonPictures()); |
| | | courseOrder1.setPayStatus(6); |
| | | |
| | | courseOrder1.setRequestRefundTime(LocalDateTime.now()); |
| | | courseOrder1.setRefundMoney(courseOrder1.getPayMoney()); |
| | | |
| | |
| | | if(courseOrder1.getPayStatus()!=2){ |
| | | return R.fail("状态不允许退款"); |
| | | } |
| | | courseOrder1.setPayStatus(6); |
| | | LocalDateTime payTime = courseOrder1.getPayTime(); |
| | | if(payTime==null){ |
| | | return R.fail("状态不允许退款"); |
| | |
| | | courseOrder1.setRefundStatus(1); |
| | | courseOrderService.updateById(courseOrder1); |
| | | }else { |
| | | 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.setNotify_url(""); |
| | | refundModel.setFunds_account("AVAILABLE"); |
| | | 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); |
| | | |
| | | 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; |
| | | |
| | | } |