From 05dd7b7be50a7227893bdeba881d0a368fe4b63e Mon Sep 17 00:00:00 2001
From: yupeng <roc__yu@163.com>
Date: 星期一, 10 三月 2025 15:02:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/xizang-changyun' into xizang-changyun

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java |   87 +++++++++++++++++++++++++++++--------------
 1 files changed, 58 insertions(+), 29 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
index 896ea36..f9d94d9 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
@@ -1,15 +1,14 @@
 package com.ruoyi.system.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.config.SmsProperties;
 import com.ruoyi.common.constant.AmountConstant;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.SmsUtil;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.TencentMailUtil;
+import com.ruoyi.common.utils.*;
 import com.ruoyi.common.utils.uuid.UUID;
 import com.ruoyi.system.dto.*;
 import com.ruoyi.system.mapper.TBillMapper;
@@ -242,41 +241,68 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean checkOfflinePay(OfflinePayCheckDto dto) {
-        TBankFlow bankflow = tBankFlowService.getById(dto.getFlowId());
         TBillDto bill = getDetailByBillId(dto.getBillId());
-        if (bankflow.getRemainingMoney().compareTo(BigDecimal.ZERO)<=0){
-            throw new ServiceException("该流水已无可抵扣剩余金额");
-        }
-        if (bankflow.getRemainingMoney().compareTo(dto.getAmount())<0){
-            throw new ServiceException("实付金额不能高于于流水可抵扣剩余金额");
-        }
-        //如果实付金额大于欠费金额
-        if (dto.getAmount().compareTo(bill.getOutstandingMoney())>=0){
-            throw new ServiceException("实付金额不能高于该账单欠费金额");
-        }
+        if (dto.getPayType()==1){ //银行
+            if (StringUtils.isEmpty(dto.getFlowId())){
+                throw new ServiceException("银行流水ID不能为空");
+            }
+            TBankFlow bankflow = tBankFlowService.getById(dto.getFlowId());
+            if (bankflow.getRemainingMoney().compareTo(BigDecimal.ZERO)<=0){
+                throw new ServiceException("该流水已无可抵扣剩余金额");
+            }
+            if (bankflow.getRemainingMoney().compareTo(dto.getAmount())<0){
+                throw new ServiceException("实付金额不能高于于流水可抵扣剩余金额");
+            }
+            //如果实付金额大于欠费金额
+            if (dto.getAmount().compareTo(bill.getOutstandingMoney())>0){
+                throw new ServiceException("实付金额不能高于该账单欠费金额");
+            }
+            TBill billSave = new TBill();
+            billSave.setId(bill.getId());
+            billSave.setPayFeesMoney(dto.getAmount());
+            billSave.setBankSerialNumber(bankflow.getBankSerialNumber());
+            billSave.setPayFeesTime(bankflow.getPayTime());
+            billSave.setVoucher(dto.getVoucher());
+            billSave.setPayFeesType(2);
+            TBill back = lockAndUpdateInfo(billSave, 2);
+            TBankFlow saveBankFlow = new TBankFlow();
+            saveBankFlow.setId(bankflow.getId());
+            saveBankFlow.setDeductionMoney(bankflow.getDeductionMoney().add(dto.getAmount()));
+            saveBankFlow.setRemainingMoney(bankflow.getRemainingMoney().subtract(dto.getAmount()));
+            tBankFlowService.updateById(saveBankFlow);
+            //更新银行流水的已抵扣金额和剩余可抵扣金额
 
+            //存流水
+            TFlowManagement save = new TFlowManagement();
+            save.setPayType(3);
+            save.setPayer(dto.getPayer());
+            save.setPayTime(bankflow.getPayTime());
+            save.setSysSerialNumber(OrderNos.getDid(30));
+            save.setBankSerialNumber(bankflow.getBankSerialNumber());
+            save.setFlowType(2);
+            save.setPaymentBillId(back.getId());
+            save.setDeductionMoney(back.getDeductionMoney());
+            save.setFlowMoney(dto.getAmount());
+            save.setRemainingMoney(back.getOutstandingMoney());
+            save.setPreOutstand(back.getPreOutstand());
+            tFlowManagementService.save(save);
+            return true;
+        }
+        //现金支付
         TBill billSave = new TBill();
         billSave.setId(bill.getId());
         billSave.setPayFeesMoney(dto.getAmount());
-        billSave.setBankSerialNumber(bankflow.getBankSerialNumber());
-        billSave.setPayFeesTime(bankflow.getPayTime());
+        billSave.setPayFeesTime(dto.getPayTime()!=null?dto.getPayTime():DateUtils.dateToLocalDateTime(new Date()));
         billSave.setVoucher(dto.getVoucher());
         billSave.setPayFeesType(2);
         TBill back = lockAndUpdateInfo(billSave, 2);
 
-        //更新银行流水的已抵扣金额和剩余可抵扣金额
-        TBankFlow saveBankFlow = new TBankFlow();
-        saveBankFlow.setId(bankflow.getId());
-        saveBankFlow.setDeductionMoney(bankflow.getDeductionMoney().add(dto.getAmount()));
-        saveBankFlow.setRemainingMoney(bankflow.getRemainingMoney().subtract(dto.getAmount()));
-        tBankFlowService.updateById(saveBankFlow);
-        //存流水
         TFlowManagement save = new TFlowManagement();
         save.setPayType(3);
         save.setPayer(dto.getPayer());
-        save.setPayTime(bankflow.getPayTime());
-        save.setBankSerialNumber(bankflow.getBankSerialNumber());
-        save.setFlowType(2);
+        save.setPayTime(billSave.getPayFeesTime());
+        save.setSysSerialNumber(OrderNos.getDid(30));
+        save.setFlowType(1);
         save.setPaymentBillId(back.getId());
         save.setDeductionMoney(back.getDeductionMoney());
         save.setFlowMoney(dto.getAmount());
@@ -331,6 +357,7 @@
                 saveFlow.setPayType(1);
                 saveFlow.setPayer(order.getUserId());
                 saveFlow.setPayTime(DateUtils.dateToLocalDateTime(save.getPayTime()));
+                saveFlow.setSysSerialNumber(OrderNos.getDid(30));
                 saveFlow.setBankSerialNumber(save.getPayNo());
                 saveFlow.setFlowType(2);
                 saveFlow.setPaymentBillId(bill.getId());
@@ -394,7 +421,8 @@
             TBill save = new TBill();
             save.setId(bill.getId());
             try {
-                smsUtil.sendSms(bill.getPhone(), "2365726", new String[]{bill.getPartyTwoName()});
+                String name = bill.getPartyTwoName().length()>5?bill.getPartyTwoName().substring(0,5):bill.getPartyTwoName();
+                smsUtil.sendSms(bill.getPhone(), "2365726", new String[]{name});
                 save.setSmsStatus(1);
             }catch (ServiceException e){
                 failNum++;
@@ -463,7 +491,7 @@
                 throw new ServiceException("实付金额不能高于于流水可抵扣剩余金额");
             }
             //如果实付金额大于欠费金额
-            if (dto.getAmount().compareTo(bill.getOutstandingMoney())>=0){
+            if (dto.getAmount().compareTo(bill.getOutstandingMoney())>0){
                 throw new ServiceException("实付金额不能高于该账单欠费金额");
             }
         }
@@ -489,6 +517,7 @@
         save.setPayType(3);
         save.setPayer(dto.getPayer());
         save.setPayTime(bankflow!=null?bankflow.getPayTime():DateUtils.dateToLocalDateTime(new Date()));
+        save.setSysSerialNumber(OrderNos.getDid());
         save.setBankSerialNumber(bankflow!=null?bankflow.getBankSerialNumber():null);
         save.setFlowType(dto.getPayType()==1?2:1);
         save.setPaymentBillId(back.getId());

--
Gitblit v1.7.1