From 7e2eb8af7459da7a03a23606651dfbfb5a5f2cee Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 29 十二月 2025 16:12:31 +0800
Subject: [PATCH] 文档调整

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/InsuranceController.java |  121 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 108 insertions(+), 13 deletions(-)

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 2a7a876..59533b4 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
@@ -1,22 +1,36 @@
 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
@@ -27,10 +41,16 @@
 
     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;
     }
 
 
@@ -55,12 +75,16 @@
 
     @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);
@@ -69,15 +93,86 @@
         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())){
+            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;
 }

--
Gitblit v1.7.1