From 65f3fb018916e35a6271a4e348093a8d1a938120 Mon Sep 17 00:00:00 2001
From: luofl <1442745593@qq.com>
Date: 星期四, 03 四月 2025 21:17:29 +0800
Subject: [PATCH] 修改bug
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java | 279 +++++++++++++++++++++++++++++++++++++------------------
1 files changed, 188 insertions(+), 91 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 362d630..42adf5f 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,21 +1,42 @@
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.*;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.OrderNos;
+import com.ruoyi.common.utils.SmsUtil;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.TencentMailUtil;
import com.ruoyi.common.utils.uuid.UUID;
-import com.ruoyi.system.dto.*;
+import com.ruoyi.system.dto.BillStatisticsDto;
+import com.ruoyi.system.dto.CachPayDto;
+import com.ruoyi.system.dto.OfflinePayCheckDto;
+import com.ruoyi.system.dto.SmsByBillDto;
+import com.ruoyi.system.dto.TBillDto;
+import com.ruoyi.system.dto.TbillSaveDto;
import com.ruoyi.system.mapper.TBillMapper;
-import com.ruoyi.system.model.*;
+import com.ruoyi.system.model.TBankFlow;
+import com.ruoyi.system.model.TBill;
+import com.ruoyi.system.model.TBillDetail;
+import com.ruoyi.system.model.TFlowManagement;
+import com.ruoyi.system.model.TInvoiceToBill;
+import com.ruoyi.system.model.TOrderBill;
+import com.ruoyi.system.model.TPayOrder;
import com.ruoyi.system.query.TBillQuery;
import com.ruoyi.system.query.TInvoiceToBillQuery;
-import com.ruoyi.system.service.*;
+import com.ruoyi.system.service.TBankFlowService;
+import com.ruoyi.system.service.TBillConfirmService;
+import com.ruoyi.system.service.TBillDetailService;
+import com.ruoyi.system.service.TBillService;
+import com.ruoyi.system.service.TFlowManagementService;
+import com.ruoyi.system.service.TInvoiceToBillService;
+import com.ruoyi.system.service.TOrderBillService;
+import com.ruoyi.system.service.TPayOrderService;
+import com.ruoyi.system.vo.ScreenRentRankVO;
import com.taxi591.bankapi.dto.ChargeBillRequest;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
@@ -28,7 +49,6 @@
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.text.ParseException;
-import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
@@ -124,6 +144,7 @@
if (isok){
try {
TBill save = new TBill();
+ save.setId(tBill.getId());
TBill presist = getById(tBill.getId());
//如果账单是已缴费状态,本方法不再进行更新账单
if (presist.getPayFeesStatus().equals("3")){
@@ -241,42 +262,73 @@
@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()));
+ BigDecimal subtract = bankflow.getRemainingMoney().subtract(dto.getAmount());
+ saveBankFlow.setRemainingMoney(subtract);
+ if (BigDecimal.ZERO.compareTo(subtract) == 0){
+ saveBankFlow.setFlowStatus(1);
+ }
+ tBankFlowService.updateById(saveBankFlow);
+ //更新银行流水的已抵扣金额和剩余可抵扣金额
+ //存流水
+ TFlowManagement save = new TFlowManagement();
+ save.setPayType(3);
+ save.setPayer(dto.getPayer());
+ save.setBusinessDeptId(bill.getBusinessDeptId());
+ 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.setPayTime(billSave.getPayFeesTime());
save.setSysSerialNumber(OrderNos.getDid(30));
- save.setBankSerialNumber(bankflow.getBankSerialNumber());
- save.setFlowType(2);
+ save.setFlowType(1);
save.setPaymentBillId(back.getId());
save.setDeductionMoney(back.getDeductionMoney());
save.setFlowMoney(dto.getAmount());
@@ -293,62 +345,67 @@
String uuid = UUID.fastUUID().toString();
boolean lock = redisCache.trylockLoop(CacheConstants.COMPLETE_PAY_LOCK_KEY + orderNo, uuid, 60);
if (lock){
- TPayOrder order = tPayOrderService.getById(orderNo);
- if (order==null){
- throw new ServiceException("订单不存在");
- }
- if (StringUtils.isNotEmpty(order.getPayNo())){
- log.info("订单号已处理:{}",orderNo);
- return;
- }
- /**
- * 更新订单状态
- */
- TPayOrder save = new TPayOrder();
- save.setId(order.getId());
- save.setStatus(1);
- save.setPayNo(billRequest.getMessage().getInfo().getTraceNo());
- save.setPayType(billRequest.getMessage().getHead().getChannel());
try {
- save.setPayTime(DateUtils.parseDate(billRequest.getMessage().getHead().getTimeStamp(),"yyyyMMddHHmmssSSS"));
- } catch (ParseException e) {
- throw new ServiceException("日期格式化错误");
+ TPayOrder order = tPayOrderService.getById(orderNo);
+ if (order==null){
+ throw new ServiceException("订单不存在");
+ }
+ if (StringUtils.isNotEmpty(order.getPayNo())){
+ log.info("订单号已处理:{}",orderNo);
+ return;
+ }
+ /**
+ * 更新订单状态
+ */
+ TPayOrder save = new TPayOrder();
+ save.setId(order.getId());
+ save.setStatus(1);
+ save.setPayNo(billRequest.getMessage().getInfo().getTraceNo());
+ save.setPayType(billRequest.getMessage().getHead().getChannel());
+ try {
+ save.setPayTime(DateUtils.parseDate(billRequest.getMessage().getHead().getTimeStamp(),"yyyyMMddHHmmssSSS"));
+ } catch (ParseException e) {
+ throw new ServiceException("日期格式化错误");
+ }
+ save.setCallbackTime(new Date());
+ BigDecimal payAmount = new BigDecimal(billRequest.getMessage().getInfo().getPayBillAmt());
+ save.setActPayAmount(payAmount
+ .multiply(AmountConstant.b100).longValue());
+ save.setStatus(1);
+ save.setPayInfo(billRequest.getMessage().toString());
+ tPayOrderService.updateById(save);
+ /**
+ * 更新账单状态
+ */
+ List<TOrderBill> orderBills = orderBillService.getByOrderNo(order.getId());
+ List<TBill> bills = orderBills.stream().map(ob -> getById(ob.getBillId())).collect(Collectors.toList());
+ lockAndUpdateByAmountBatch(bills,payAmount,(bill)->{
+ TFlowManagement saveFlow = new TFlowManagement();
+ saveFlow.setPayType(1);
+ saveFlow.setPayer(order.getUserId());
+ saveFlow.setBusinessDeptId(bill.getBusinessDeptId());
+ saveFlow.setPayTime(DateUtils.dateToLocalDateTime(save.getPayTime()));
+ saveFlow.setSysSerialNumber(OrderNos.getDid(30));
+ saveFlow.setBankSerialNumber(save.getPayNo());
+ saveFlow.setFlowType(2);
+ saveFlow.setPaymentBillId(bill.getId());
+ saveFlow.setDeductionMoney(bill.getDeductionMoney());
+ saveFlow.setFlowMoney(payAmount);
+ saveFlow.setRemainingMoney(bill.getOutstandingMoney());
+ saveFlow.setPreOutstand(bill.getPreOutstand());
+ tFlowManagementService.save(saveFlow);
+ });
+// TBankFlow bankFlow = new TBankFlow();
+// bankFlow.setPayType(1);
+// bankFlow.setPayer(order.getUserId());
+// bankFlow.setPayTime(DateUtils.dateToLocalDateTime(save.getPayTime()));
+// bankFlow.setBankSerialNumber(save.getPayNo());
+// bankFlow.setFlowMoney(payAmount);
+// bankFlow.setFlowStatus(1);
+// tBankFlowService.save(bankFlow);
+ }finally {
+ redisCache.unlock(CacheConstants.COMPLETE_PAY_LOCK_KEY + orderNo,uuid);
}
- save.setCallbackTime(new Date());
- BigDecimal payAmount = new BigDecimal(billRequest.getMessage().getInfo().getPayBillAmt());
- save.setActPayAmount(payAmount
- .multiply(AmountConstant.b100).longValue());
- save.setStatus(1);
- save.setPayInfo(billRequest.getMessage().toString());
- tPayOrderService.updateById(save);
- /**
- * 更新账单状态
- */
- List<TOrderBill> orderBills = orderBillService.getByOrderNo(order.getId());
- List<TBill> bills = orderBills.stream().map(ob -> getById(ob.getBillId())).collect(Collectors.toList());
- lockAndUpdateByAmountBatch(bills,payAmount,(bill)->{
- TFlowManagement saveFlow = new TFlowManagement();
- 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());
- saveFlow.setDeductionMoney(bill.getDeductionMoney());
- saveFlow.setFlowMoney(payAmount);
- saveFlow.setRemainingMoney(bill.getOutstandingMoney());
- saveFlow.setPreOutstand(bill.getPreOutstand());
- tFlowManagementService.save(saveFlow);
- });
- TBankFlow bankFlow = new TBankFlow();
- bankFlow.setPayType(1);
- bankFlow.setPayer(order.getUserId());
- bankFlow.setPayTime(DateUtils.dateToLocalDateTime(save.getPayTime()));
- bankFlow.setBankSerialNumber(save.getPayNo());
- bankFlow.setFlowMoney(payAmount);
- bankFlow.setFlowStatus(1);
- tBankFlowService.save(bankFlow);
}
@@ -395,7 +452,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++;
@@ -482,14 +540,20 @@
TBankFlow saveBankFlow = new TBankFlow();
saveBankFlow.setId(bankflow.getId());
saveBankFlow.setDeductionMoney(bankflow.getDeductionMoney().add(dto.getAmount()));
- saveBankFlow.setRemainingMoney(bankflow.getRemainingMoney().subtract(dto.getAmount()));
+ BigDecimal subtract = bankflow.getRemainingMoney().subtract(dto.getAmount());
+ saveBankFlow.setRemainingMoney(subtract);
+ if (BigDecimal.ZERO.compareTo(subtract) == 0){
+ saveBankFlow.setFlowStatus(1);
+ }
tBankFlowService.updateById(saveBankFlow);
}
//存流水
TFlowManagement save = new TFlowManagement();
save.setPayType(3);
save.setPayer(dto.getPayer());
+ save.setBusinessDeptId(bill.getBusinessDeptId());
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());
@@ -502,14 +566,47 @@
}
@Override
- public BillStatisticsDto statistics() {
+ public BillStatisticsDto statistics(String busDeptId) {
BillStatisticsDto dto = new BillStatisticsDto();
- dto.setRent(getBaseMapper().statisticsAllRent());
- dto.setNopay(getBaseMapper().statisticsNoPay());
- dto.setPayed(getBaseMapper().statisticsPayed());
- dto.setOverdue(getBaseMapper().statisticsOverdue());
+ dto.setRent(getBaseMapper().statisticsAllRent(busDeptId));
+ dto.setNopay(getBaseMapper().statisticsNoPay(busDeptId));
+ dto.setPayed(getBaseMapper().statisticsPayed(busDeptId));
+ dto.setOverdue(getBaseMapper().statisticsOverdue(busDeptId));
return dto;
}
+ @Override
+ public Integer batchBillCount(String userId, List<String> billIds) {
+ return this.baseMapper.batchBillCount(userId,billIds);
+ }
+ /**
+ * 街道租金排行
+ * @return
+ */
+ @Override
+ public List<ScreenRentRankVO> getStreetRentRank(String businessDeptId) {
+ return baseMapper.getStreetRentRank(businessDeptId);
+ }
+ /**
+ * 查询季付账单
+ * @param businessDeptId
+ * @return
+ */
+ @Override
+ public List<TBill> getJiFuBillList(String businessDeptId) {
+ return baseMapper.getJiFuBillList(businessDeptId,null,null);
+ }
+
+ /**
+ * 查询当前季度的季付账单
+ * @param businessDeptId
+ * @param first
+ * @param last
+ * @return
+ */
+ @Override
+ public List<TBill> getJiFuBillListByTime(String businessDeptId, Date first, Date last) {
+ return baseMapper.getJiFuBillList(businessDeptId,first,last);
+ }
}
--
Gitblit v1.7.1