Quellcode durchsuchen

非充值订单退钱

Memory_LG vor 1 Monat
Ursprung
Commit
b9d48177bc

+ 0 - 5
qmjszx-admin/src/main/java/beilv/web/controller/carinformation/cardAppController.java

@@ -13,7 +13,6 @@ import beilv.common.utils.StringUtils;
 import beilv.common.utils.uuid.IdUtils;
 import beilv.competition.domain.Competition;
 import beilv.competition.service.ICompetitionService;
-import beilv.site.service.IBeilvSiteService;
 import beilv.usermembershipcard.domain.UserMembershipCard;
 import beilv.usermembershipcard.service.IUserMembershipCardService;
 import beilv.vipCard.domain.VipCard;
@@ -53,9 +52,6 @@ public class cardAppController extends BaseController {
     private IVipCardService vipCardService;
 
     @Autowired
-    private IBeilvSiteService siteService;
-
-    @Autowired
     private IBootACourseService courseService;
 
     @Autowired
@@ -242,7 +238,6 @@ public class cardAppController extends BaseController {
             return AjaxResult.error("订单号不能为空!");
         }
 
-
         //拉取订单信息
         VipCardLog orderInfo = vipCardLogService.selectVipCardLogById(vipCardLog.getId());
 

+ 8 - 0
qmjszx-admin/src/main/java/beilv/web/controller/vipCardLog/VipCardLogController.java

@@ -6,6 +6,7 @@ import beilv.common.core.domain.AjaxResult;
 import beilv.common.core.page.TableDataInfo;
 import beilv.common.enums.BusinessType;
 import beilv.common.utils.poi.ExcelUtil;
+import beilv.vipCard.domain.VipCard;
 import beilv.vipCardLog.domain.VipCardLog;
 import beilv.vipCardLog.service.IVipCardLogService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -113,4 +114,11 @@ public class VipCardLogController extends BaseController {
     public AjaxResult remove(String ids) {
         return toAjax(vipCardLogService.deleteVipCardLogByIds(ids));
     }
+
+
+    @PostMapping("/refund")
+    @ResponseBody
+    public AjaxResult refund(VipCardLog vipCardLog){
+        return vipCardLogService.refundById(vipCardLog);
+    }
 }

+ 14 - 13
qmjszx-admin/src/main/resources/templates/system/vipCardLog/vipCardLog.html

@@ -64,7 +64,7 @@
             url: prefix + "/list",
             // createUrl: prefix + "/add",
             // updateUrl: prefix + "/edit/{id}",
-            // removeUrl: prefix + "/remove",
+            removeUrl: prefix + "/refund",
             exportUrl: prefix + "/export",
             modalName: "充值记录",
             columns: [{
@@ -110,30 +110,31 @@
                     formatter: function (value, row, index) {
                         return $.table.selectDictLabel(paymentStatusDatas, value);
                     }
-                },
-
-                /*{
-                    field: 'refundTime',
-                    title: '退款时间'
-                },*/
-                {
+                },{
                     field: 'practicalMoney',
                     title: '支付金额'
-                }]
-                /*,
+                },
                 {
                     title: '操作',
                     align: 'center',
                     formatter: function (value, row, index) {
                         var actions = [];
-                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
-                        actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
+                        if ("chongzhi" !== row.orderType && "payment_status_have_paid" === row.paymentStatus) {
+                            actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>退款</a> ');
+                        }
+
+                        // actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
                         return actions.join('');
                     }
-                }]*/
+                }]
         };
         $.table.init(options);
     });
+
+
+    function refund(id){
+        $.operate.save(prefix + "/refund", $('#form-vipCardLog-edit').serialize());
+    }
 </script>
 </body>
 </html>

+ 2 - 0
qmjszx-business/src/main/java/beilv/usermembershipcard/mapper/UserMembershipCardMapper.java

@@ -84,4 +84,6 @@ public interface UserMembershipCardMapper {
     * @date 2025/1/8 上午11:05
     */
     public int updateRemainingNumber(UserMembershipCard userMembershipCard);
+
+    UserMembershipCard selectUserMembershipCardRecordId(String recordId);
 }

+ 2 - 0
qmjszx-business/src/main/java/beilv/usermembershipcard/service/IUserMembershipCardService.java

@@ -84,4 +84,6 @@ public interface IUserMembershipCardService {
      * @date 2025/1/7 上午10:47
      */
     public int refundCard(UserMembershipCard userMembershipCard);
+
+    UserMembershipCard selectUserMembershipCardRecordId(String id);
 }

+ 5 - 0
qmjszx-business/src/main/java/beilv/usermembershipcard/service/impl/UserMembershipCardServiceImpl.java

@@ -191,4 +191,9 @@ public class UserMembershipCardServiceImpl implements IUserMembershipCardService
         userMembershipCard.setRemainingNumber(0);
         return userMembershipCardMapper.updateUserMembershipCard(userMembershipCard);
     }
+
+    @Override
+    public UserMembershipCard selectUserMembershipCardRecordId(String recordId) {
+        return userMembershipCardMapper.selectUserMembershipCardRecordId(recordId);
+    }
 }

+ 4 - 0
qmjszx-business/src/main/java/beilv/vipCardLog/service/IVipCardLogService.java

@@ -1,6 +1,8 @@
 package beilv.vipCardLog.service;
 
 
+import beilv.common.core.domain.AjaxResult;
+import beilv.vipCard.domain.VipCard;
 import beilv.vipCardLog.domain.VipCardLog;
 
 import java.util.List;
@@ -63,4 +65,6 @@ public interface IVipCardLogService {
     int updateVipCardLogByOrderId(VipCardLog vipCardLog);
 
     int getRegistrantsNumber(VipCardLog vipCardLog);
+
+    AjaxResult refundById(VipCardLog vipCardLog);
 }

+ 125 - 0
qmjszx-business/src/main/java/beilv/vipCardLog/service/impl/VipCardLogServiceImpl.java

@@ -1,13 +1,25 @@
 package beilv.vipCardLog.service.impl;
 
+import beilv.carinformation.domain.CarInformation;
+import beilv.carinformation.service.ICarInformationService;
+import beilv.common.core.domain.AjaxResult;
 import beilv.common.core.text.Convert;
+import beilv.common.utils.DateUtils;
 import beilv.common.utils.uuid.IdUtils;
+import beilv.competition.domain.Competition;
+import beilv.competition.service.ICompetitionService;
+import beilv.usermembershipcard.domain.UserMembershipCard;
+import beilv.usermembershipcard.service.IUserMembershipCardService;
+import beilv.vipCard.domain.VipCard;
+import beilv.vipCard.service.IVipCardService;
 import beilv.vipCardLog.domain.VipCardLog;
 import beilv.vipCardLog.mapper.VipCardLogMapper;
 import beilv.vipCardLog.service.IVipCardLogService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 
 /**
@@ -21,6 +33,18 @@ public class VipCardLogServiceImpl implements IVipCardLogService {
     @Autowired
     private VipCardLogMapper vipCardLogMapper;
 
+    @Autowired
+    private IVipCardService vipCardService;
+
+    @Autowired
+    private ICompetitionService competitionService;
+
+    @Autowired
+    private IUserMembershipCardService userMembershipCardService;
+
+    @Autowired
+    private ICarInformationService carInformationService;
+
     /**
      * 查询充值记录
      *
@@ -97,4 +121,105 @@ public class VipCardLogServiceImpl implements IVipCardLogService {
     public int getRegistrantsNumber(VipCardLog vipCardLog) {
         return vipCardLogMapper.getRegistrantsNumber(vipCardLog);
     }
+
+    @Override
+    public AjaxResult refundById(VipCardLog vipCardLog) {
+        //拉去订单信息
+        VipCardLog orderInfo = vipCardLogMapper.selectVipCardLogById(vipCardLog.getId());
+
+        if("payment_status_to_be_paid".equals(orderInfo.getPaymentStatus())){
+            return AjaxResult.error("订单未支付, 无需退款!");
+        }
+
+        if("payment_status_cancelled".equals(orderInfo.getPaymentStatus())){
+            return AjaxResult.error("订单已取消, 无需退款!");
+        }
+
+        if("payment_status_refunded".equals(orderInfo.getPaymentStatus())){
+            return AjaxResult.error("订单已退款, 无需重复操作!");
+        }
+
+        if("payment_status_verification".equals(orderInfo.getPaymentStatus())){
+            return AjaxResult.error("订单已核销, 无法退款!");
+        }
+
+        //退款金额
+        BigDecimal refundPrice = BigDecimal.valueOf(0);
+
+        int refundSum = 0;
+
+        if("yueqiu".equals(orderInfo.getOrderType())){
+
+            if("numCard".equals(orderInfo.getPaymentType())){
+                refundSum++;
+            }else{
+                refundPrice = refundPrice.add(orderInfo.getPracticalMoney());
+            }
+
+        }else if("gouka".equals(orderInfo.getOrderType())){
+
+            //拿到次卡信息, 得到剩余使用次数
+            UserMembershipCard userMembershipCard = userMembershipCardService.selectUserMembershipCardRecordId(orderInfo.getId());
+            //获取原价信息
+            CarInformation carInformation = carInformationService.selectCarInformationById(Long.valueOf(orderInfo.getBusId()));
+
+            //计算已使用次数
+            BigDecimal useSum = BigDecimal.valueOf(carInformation.getTotalNumber()-userMembershipCard.getRemainingNumber());
+
+            //计算需要支付的金额
+            BigDecimal userPrice = useSum.multiply(carInformation.getOriginalPrice());
+
+            //实际支付的金额 - 需要支付的金额 = 退款金额
+            BigDecimal refundMoner = orderInfo.getMemberPrice().subtract(userPrice);
+
+            //判断如果退款金额 不大于0, 则设置退款金额为0
+            refundMoner = refundMoner.compareTo(BigDecimal.ZERO) > 0 ? refundMoner : BigDecimal.ZERO;
+
+            //计算退款金额
+            refundPrice = refundPrice.add(refundMoner);
+
+        }else if("cansai".equals(orderInfo.getOrderType()) || "menpiao".equals(orderInfo.getOrderType())){
+
+            //验证赛事状态, 已经开始/已经结束/已经关闭 无法退款
+            Competition competition = competitionService.selectCompetitionById(Integer.valueOf(orderInfo.getBusId()));
+            if("competiton_state_5".equals(competition.getCompetitionState())){
+                return AjaxResult.error("赛事已开始, 无法退票!");
+            }
+            if("competiton_state_6".equals(competition.getCompetitionState())){
+                return AjaxResult.error("赛事已结束, 无法退票!");
+            }
+            if("competiton_state_3".equals(competition.getCompetitionState())){
+                return AjaxResult.error("报名已结束, 无法退票!");
+            }
+            if("competiton_state_4".equals(competition.getCompetitionState())){
+                return AjaxResult.error("赛事已关闭, 无法退票!");
+            }
+            //计算退款金额
+            refundPrice = refundPrice.add(orderInfo.getPracticalMoney());
+        }
+
+        if("vipCard".equals(orderInfo.getPaymentType())){
+            //查询会员卡信息
+            VipCard vipCard = vipCardService.selectVipCardById(orderInfo.getPaymentId());
+            vipCard.setBalance(vipCard.getBalance().add(refundPrice));
+            vipCardService.updateVipCard(vipCard);
+        }else if("weChart".equals(orderInfo.getPaymentType())){
+            //微信支付, 退款到微信
+
+
+        }else if("numCard".equals(orderInfo.getPaymentType())){
+            //查询次卡信息
+            UserMembershipCard userMembershipCard = userMembershipCardService.selectUserMembershipCardById(Long.valueOf(orderInfo.getPaymentId()));
+            //剩余使用次数+1
+            userMembershipCard.setRemainingNumber(userMembershipCard.getRemainingNumber() + refundSum);
+            //更新次卡信息
+            userMembershipCardService.updateUserMembershipCard(userMembershipCard);
+        }
+
+        vipCardLog.setRefundTime(DateUtils.getNowDate());
+        vipCardLog.setPaymentStatus("payment_status_refunded");
+        vipCardLogMapper.updateVipCardLog(vipCardLog);
+        return AjaxResult.success("退款成功!");
+
+    }
 }

+ 5 - 0
qmjszx-business/src/main/resources/mapper/card/UserMembershipCardMapper.xml

@@ -184,4 +184,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </trim>
         where id = #{id}
     </update>
+
+    <select id="selectUserMembershipCardRecordId" parameterType="string" resultMap="UserMembershipCardResult">
+        <include refid="selectUserMembershipCardVo"/>
+        where record_id = #{recordId}
+    </select>
 </mapper>