| | |
| | | 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.BaseModel; |
| | | import com.ruoyi.common.core.domain.BasePage; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.utils.OrderNos; |
| | | import com.ruoyi.framework.web.service.TokenService; |
| | | import com.ruoyi.system.dto.BuyInsuranceDto; |
| | | import com.ruoyi.system.model.TBanner; |
| | | import com.ruoyi.system.model.TCourse; |
| | | import com.ruoyi.system.model.TInsuranceOrder; |
| | | 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.vo.UserInsuranceVo; |
| | | 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.math.RoundingMode; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | |
| | | @Slf4j |
| | |
| | | |
| | | private final TInsuranceOrderService tInsuranceOrderService; |
| | | private final TokenService tokenService; |
| | | private final TInsuranceService tInsuranceService; |
| | | private final WxV3Pay wxV3Pay; |
| | | private final TAppUserService tAppUserService; |
| | | |
| | | public InsuranceController(TInsuranceOrderService tInsuranceOrderService, TokenService tokenService) { |
| | | public InsuranceController(TInsuranceOrderService tInsuranceOrderService, TokenService tokenService, TInsuranceService tInsuranceService, WxV3Pay wxV3Pay, TAppUserService tAppUserService) { |
| | | this.tInsuranceOrderService = tInsuranceOrderService; |
| | | this.tokenService = tokenService; |
| | | this.tInsuranceService = tInsuranceService; |
| | | this.wxV3Pay = wxV3Pay; |
| | | this.tAppUserService = tAppUserService; |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | @PostMapping("/buyInsurance") |
| | | @ApiOperation(value = "保险模块--购买保险") |
| | | public R<?> buyInsurance(@RequestBody BuyInsuranceDto dto) { |
| | | public R<?> buyInsurance(@RequestBody 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")); |
| | | if(one!=null){ |
| | | return R.fail("您已购买保险"); |
| | | if(one.getEndTime().after(new Date())){ |
| | | return R.fail("您已购买保险"); |
| | | } |
| | | } |
| | | TInsuranceOrder insuranceOrder = new TInsuranceOrder(); |
| | | insuranceOrder.setAppUserId(userId); |
| | |
| | | insuranceOrder.setIdCard(dto.getIdCard()); |
| | | insuranceOrder.setImg(dto.getImg()); |
| | | insuranceOrder.setPayType(dto.getType()); |
| | | |
| | | |
| | | |
| | | boolean save = tInsuranceOrderService.save(insuranceOrder); |
| | | if(save){ |
| | | return R.ok("购买成功"); |
| | | TInsurance insurance = tInsuranceService.getOne(new LambdaQueryWrapper<TInsurance>().eq(TInsurance::getStatus, 1)); |
| | | if(insurance==null){ |
| | | return R.fail("保险已关闭"); |
| | | } |
| | | return R.fail("购买失败"); |
| | | insuranceOrder.setInsuranceId(insurance.getId()); |
| | | insuranceOrder.setPayMoney(BigDecimal.valueOf(insurance.getInsuranceMoney()).setScale(2, RoundingMode.HALF_UP)); |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Date date = simpleDateFormat.parse(insurance.getValidityTime()); |
| | | insuranceOrder.setEndTime(date); |
| | | |
| | | String payNo = OrderNos.getDid(); |
| | | insuranceOrder.setPayNo(payNo); |
| | | boolean save = tInsuranceOrderService.save(insuranceOrder); |
| | | Map<String, Object> result = wxV3Pay.jsApiInsurance(payNo, insuranceOrder.getPayMoney().multiply(BigDecimal.valueOf(100)).longValue(), appUser.getOpenId(),"购买保险",""); |
| | | return R.ok(result); |
| | | } |
| | | |
| | | |
| | | |
| | | @ApiOperation(value = "保险模块--缴费记录") |
| | | @PostMapping("/getInsuranceOrderList") |
| | | public R<?> getInsuranceOrderList(@RequestBody BasePage query) { |
| | | String userId = tokenService.getLoginUserApplet().getUserId(); |
| | | Page<TInsuranceOrder> page = tInsuranceOrderService.page(new Page<>(query.getPageNum(), query.getPageSize()), Wrappers.<TInsuranceOrder>lambdaQuery().eq(TInsuranceOrder::getAppUserId, userId).ne(TInsuranceOrder::getStatus,0).orderByDesc(BaseModel::getCreateTime)); |
| | | return R.ok(page); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @PostMapping("/refundOrder") |
| | | @ApiOperation(value = "保险模块--退款") |
| | | public R<?> refundOrder(@RequestBody TInsuranceOrder order) { |
| | | String userId = tokenService.getLoginUserApplet().getUserId(); |
| | | TInsuranceOrder order1 = tInsuranceOrderService.getById(order.getId()); |
| | | order1.setRefundReason(order.getRefundReason()); |
| | | order1.setRefundReasonPictures(order.getRefundReasonPictures()); |
| | | |
| | | order1.setRequestRefundTime(new Date()); |
| | | order1.setRefundMoney(order1.getPayMoney().doubleValue()); |
| | | |
| | | if(!userId.equals(order1.getAppUserId())){ |
| | | return R.fail("无权限操作"); |
| | | } |
| | | if(order1.getStatus()!=2){ |
| | | return R.fail("状态不允许退款"); |
| | | } |
| | | order1.setStatus(4); |
| | | LocalDateTime payTime = order1.getPayTime(); |
| | | if(payTime==null){ |
| | | return R.fail("状态不允许退款"); |
| | | } |
| | | if(payTime.plusDays(2).isBefore(LocalDateTime.now()) || order.getPayType()==2){ |
| | | order1.setBankCardNumber(order.getBankCardNumber()); |
| | | order1.setCardholderName(order.getCardholderName()); |
| | | order1.setRefundStatus(1); |
| | | tInsuranceOrderService.updateById(order1); |
| | | }else { |
| | | String outRefundNo = OrderNos.getDid(); |
| | | order1.setRefundNumber(outRefundNo); |
| | | tInsuranceOrderService.updateById(order1); |
| | | // tInsuranceOrderService 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(order1.getPayMoney().multiply(BigDecimal.valueOf(100)).intValue(), order1.getPayNo(),outRefundNo); |
| | | if(result!=null){ |
| | | return R.fail(result); |
| | | } |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | @Autowired |
| | | private WxRefundUtil wxRefundUtil; |
| | | } |