fix: 信用卡有交易记录后,直接更新账单。

This commit is contained in:
tianyongbao
2025-01-14 09:48:02 +08:00
parent ae0b3f05f8
commit 5c8dea177e
4 changed files with 309 additions and 5 deletions

View File

@@ -1,10 +1,11 @@
package com.ruoyi.invest.service; package com.ruoyi.invest.service;
import java.util.List;
import com.ruoyi.invest.domain.CreditCardBill; import com.ruoyi.invest.domain.CreditCardBill;
import com.ruoyi.invest.domain.dto.CreditCardBillDto; import com.ruoyi.invest.domain.dto.CreditCardBillDto;
import com.ruoyi.invest.domain.vo.CreditCardBillVo; import com.ruoyi.invest.domain.vo.CreditCardBillVo;
import java.util.List;
/** /**
* 信用卡账单Service接口 * 信用卡账单Service接口
* *
@@ -60,4 +61,21 @@ public interface ICreditCardBillService
* @return 结果 * @return 结果
*/ */
public int deleteCreditCardBillById(Long id); public int deleteCreditCardBillById(Long id);
/**
* 更新信用卡账单信息
*
* @param id 信用卡账单主键
* @return 结果
*/
public void updateCreditBill(Long id);
/**
* 更新信用卡未出账单
*
* @author tianyongbao
* @date 2023-12-11
*/
public void updateAllCreditBill();
} }

View File

@@ -12,6 +12,7 @@ import com.ruoyi.invest.domain.vo.AccountsVo;
import com.ruoyi.invest.mapper.AccountsDealRecordMapper; import com.ruoyi.invest.mapper.AccountsDealRecordMapper;
import com.ruoyi.invest.mapper.AccountsMapper; import com.ruoyi.invest.mapper.AccountsMapper;
import com.ruoyi.invest.service.IAccountsDealRecordService; import com.ruoyi.invest.service.IAccountsDealRecordService;
import com.ruoyi.invest.service.ICreditCardBillService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -28,6 +29,8 @@ import java.util.Map;
@Service @Service
public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService
{ {
@Resource
private ICreditCardBillService creditCardBillService;
@Resource @Resource
private AccountsDealRecordMapper accountsDealRecordMapper; private AccountsDealRecordMapper accountsDealRecordMapper;
@@ -147,7 +150,10 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService
map.put("currentBalance", accountsDealRecord.getAmount()); map.put("currentBalance", accountsDealRecord.getAmount());
accountsDealRecordMapper.batchMinusCurrentBalance(map); accountsDealRecordMapper.batchMinusCurrentBalance(map);
} }
//如果是信用卡交易,更新信用卡账单数据
if(accountsDealRecord.getDealType().equals("2")){
creditCardBillService.updateCreditBill(accountsDealRecord.getAccountId());
}
return accountsDealRecordMapper.insertAccountsDealRecord(accountsDealRecord); return accountsDealRecordMapper.insertAccountsDealRecord(accountsDealRecord);
} }
@@ -184,7 +190,10 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService
for (Long id : ids) { for (Long id : ids) {
updateDeleteDealRecord(id); updateDeleteDealRecord(id);
} }
return accountsDealRecordMapper.removeAccountsDealRecordByIds(ids); //删除后,更新信用卡账单
int i= accountsDealRecordMapper.removeAccountsDealRecordByIds(ids);
creditCardBillService.updateAllCreditBill();
return i;
} }
/** /**
@@ -197,6 +206,7 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService
public int deleteAccountsDealRecordById(Long id) public int deleteAccountsDealRecordById(Long id)
{ {
updateDeleteDealRecord(id); updateDeleteDealRecord(id);
return accountsDealRecordMapper.removeAccountsDealRecordById(id); return accountsDealRecordMapper.removeAccountsDealRecordById(id);
} }

View File

@@ -11,6 +11,7 @@ import com.ruoyi.invest.domain.dto.AccountsTransferRecordDto;
import com.ruoyi.invest.domain.vo.*; import com.ruoyi.invest.domain.vo.*;
import com.ruoyi.invest.mapper.*; import com.ruoyi.invest.mapper.*;
import com.ruoyi.invest.service.IAccountsTransferRecordService; import com.ruoyi.invest.service.IAccountsTransferRecordService;
import com.ruoyi.invest.service.ICreditCardBillService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -46,6 +47,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor
@Resource @Resource
private FutureStocksMapper futureStocksMapper; private FutureStocksMapper futureStocksMapper;
@Resource
private ICreditCardBillService creditCardBillService;
/** /**
* 查询账户转账记录 * 查询账户转账记录
* *
@@ -100,10 +104,14 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor
//pos机刷卡进行计算 //pos机刷卡进行计算
if(accountsTransferRecord.getType().equals("1")){ if(accountsTransferRecord.getType().equals("1")){
dealPosTransfer(accountsTransferRecord); dealPosTransfer(accountsTransferRecord);
//更新信用卡账单
creditCardBillService.updateCreditBill(accountsTransferRecord.getOutAccountId());
} }
//信用卡还款,进行计算 //信用卡还款,进行计算
if(accountsTransferRecord.getType().equals("2")){ if(accountsTransferRecord.getType().equals("2")){
dealCreditTransfer(accountsTransferRecord); dealCreditTransfer(accountsTransferRecord);
//更新信用卡账单
creditCardBillService.updateCreditBill(accountsTransferRecord.getInAccountId());
} }
//投资转账,进行计算 //投资转账,进行计算
if(accountsTransferRecord.getType().equals("3")){ if(accountsTransferRecord.getType().equals("3")){
@@ -163,8 +171,10 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor
//更新完成后根据转账记录id进行物理删除 //更新完成后根据转账记录id进行物理删除
accountsDealRecordMapper.deleteAccountsDealRecordByTransferId(id); accountsDealRecordMapper.deleteAccountsDealRecordByTransferId(id);
} }
//全部删除后,对记录进行删除 //全部删除后,更新信用卡账单,对记录进行删除
return accountsTransferRecordMapper.removeAccountsTransferRecordByIds(ids); int i= accountsTransferRecordMapper.removeAccountsTransferRecordByIds(ids);
creditCardBillService.updateAllCreditBill();
return i;
} }

View File

@@ -5,9 +5,13 @@ import com.ruoyi.common.core.utils.IdWorker;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.invest.domain.CreditCardBill; import com.ruoyi.invest.domain.CreditCardBill;
import com.ruoyi.invest.domain.dto.AccountsDealRecordDto;
import com.ruoyi.invest.domain.dto.BankCardLendDto;
import com.ruoyi.invest.domain.dto.CreditCardBillDto; import com.ruoyi.invest.domain.dto.CreditCardBillDto;
import com.ruoyi.invest.domain.vo.AccountsDealRecordVo;
import com.ruoyi.invest.domain.vo.BankCardLendVo; import com.ruoyi.invest.domain.vo.BankCardLendVo;
import com.ruoyi.invest.domain.vo.CreditCardBillVo; import com.ruoyi.invest.domain.vo.CreditCardBillVo;
import com.ruoyi.invest.mapper.AccountsDealRecordMapper;
import com.ruoyi.invest.mapper.BankCardLendMapper; import com.ruoyi.invest.mapper.BankCardLendMapper;
import com.ruoyi.invest.mapper.CreditCardBillMapper; import com.ruoyi.invest.mapper.CreditCardBillMapper;
import com.ruoyi.invest.service.ICreditCardBillService; import com.ruoyi.invest.service.ICreditCardBillService;
@@ -15,7 +19,10 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@@ -34,6 +41,9 @@ public class CreditCardBillServiceImpl implements ICreditCardBillService
@Resource @Resource
private BankCardLendMapper bankCardLendMapper; private BankCardLendMapper bankCardLendMapper;
@Resource
private AccountsDealRecordMapper accountsDealRecordMapper;
/** /**
* 查询信用卡账单 * 查询信用卡账单
* *
@@ -182,4 +192,260 @@ public class CreditCardBillServiceImpl implements ICreditCardBillService
return creditCardBillMapper.removeCreditCardBillById(id); return creditCardBillMapper.removeCreditCardBillById(id);
} }
/**
* 生成数据
*
* @author tianyongbao
* @date 2023-12-11
*/
@Override
public void updateCreditBill(Long id) {
//未出账单生成定时任务每3个小时同步计算一次作为未出账单根据信用卡基础信息包括账单日及账单日消费信息遍历信用卡记录信息表和交易记录表即可
BankCardLendVo bankCard=bankCardLendMapper.selectBankCardLendById(id);
// 获取当前日期
LocalDate currentDate = LocalDate.now();
int month = currentDate.getMonthValue();
int year = currentDate.getYear();
int dayOfMonth = currentDate.getDayOfMonth();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月账单");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat formatterTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date billDate= new Date();
//0表示当期1表示下期
String isNextBillDate = bankCard.getIsNextBillDate();
String billDateStr=year+"-"+String.format("%02d", month)+"-"+String.format("%02d", bankCard.getBillDate());
//如果当前日期大于账单日,进入下个账单周期
if(dayOfMonth>bankCard.getBillDate()){
if(month==12){
billDateStr=(year+1)+"-"+String.format("%02d", month-11)+"-"+String.format("%02d", bankCard.getBillDate());
}
else{
billDateStr=(year)+"-"+String.format("%02d", month+1)+"-"+String.format("%02d", bankCard.getBillDate());
}
}
try {
billDate=formatter.parse(billDateStr);
} catch (ParseException e) {
throw new RuntimeException(e);
}
Calendar calendarStart = Calendar.getInstance();
calendarStart.setTime(billDate);
calendarStart.add(Calendar.MONTH, -1);
if(isNextBillDate.equals("0")){
calendarStart.add(Calendar.DATE, 1);
}
Date startDate = calendarStart.getTime();
String periodStart = formatter.format(startDate);
Calendar calendarEnd = Calendar.getInstance();
calendarEnd.setTime(billDate);
if(isNextBillDate.equals("1")){
calendarEnd.add(Calendar.DATE, -1);
}
Date endDate = calendarEnd.getTime();
String periodEnd= formatter.format(endDate);
double billAmount=0;
AccountsDealRecordDto accountsDealRecordDto=new AccountsDealRecordDto();
accountsDealRecordDto.setAccountId(bankCard.getId());
try {
accountsDealRecordDto.setStartDateTime(formatterTime.parse(periodStart+" 00:00:00"));
accountsDealRecordDto.setEndDateTime(formatterTime.parse(periodEnd+" 23:59:59"));
} catch (ParseException e) {
throw new RuntimeException(e);
}
accountsDealRecordDto.setCreditBill("6");
//获取所有交易记录
List<AccountsDealRecordVo> accountsDealRecordVoList=accountsDealRecordMapper.selectAccountsDealRecordList(accountsDealRecordDto);
//收入转为负数
for (AccountsDealRecordVo vo:accountsDealRecordVoList
) {
if(vo.getDealType().equals("1")){
vo.setAmount(vo.getAmount()*(-1));
}
}
if(accountsDealRecordVoList.size()>0){
billAmount=accountsDealRecordVoList.stream().mapToDouble(AccountsDealRecordVo::getAmount).sum();
}
CreditCardBillDto creditCardBillDto=new CreditCardBillDto();
creditCardBillDto.setCreditCardId(bankCard.getId());
creditCardBillDto.setBillDate(billDateStr);
creditCardBillDto.setBillState("0");
List<CreditCardBillVo> creditCardBillList=creditCardBillMapper.selectCreditCardBillList(creditCardBillDto);
if(creditCardBillList.size()>0){
CreditCardBillVo creditCardBillVo=creditCardBillList.get(0);
CreditCardBill creditCardBill=new CreditCardBill();
creditCardBill.setUpdateBy(SecurityUtils.getUsername());
creditCardBill.setUpdateTime(DateUtils.getNowDate());
creditCardBill.setId(creditCardBillVo.getId());
creditCardBill.setBillAmount(billAmount);
//如果账单日与当前日期相同,将账单修改为已出账
LocalTime currentTime = LocalTime.now();
LocalTime eveningThreshold = LocalTime.of(23, 0);
if(billDateStr.equals(formatter.format(new Date()))&&currentTime.isAfter(eveningThreshold)){
creditCardBill.setBillState("1");
}
//更新未出账单
creditCardBillMapper.updateCreditCardBill(creditCardBill);
}else {
//如果账单日大于当前日期,未出账,进行插入操作
int flag=billDateStr.compareTo(formatter.format(new Date()));
if(flag>=0){
CreditCardBill creditCardBill=new CreditCardBill();
try {
creditCardBill.setBillDate(formatter.parse(billDateStr));
} catch (ParseException e) {
throw new RuntimeException(e);
}
creditCardBill.setName(simpleDateFormat.format(creditCardBill.getBillDate()));
creditCardBill.setBillDatePeriod(periodStart+"~"+periodEnd);
creditCardBill.setCreateBy(bankCard.getCreateBy());
creditCardBill.setCreateTime(DateUtils.getNowDate());
creditCardBill.setId(IdWorker.getId());
creditCardBill.setCreditCardId(bankCard.getId());
creditCardBill.setBillAmount(billAmount);
creditCardBill.setBillState("0");
//插入未出账单
creditCardBillMapper.insertCreditCardBill(creditCardBill);
}
}
}
/**
* 更新数据
*
* @author tianyongbao
* @date 2023-12-11
*/
@Override
public void updateAllCreditBill() {
//未出账单生成定时任务每3个小时同步计算一次作为未出账单根据信用卡基础信息包括账单日及账单日消费信息遍历信用卡记录信息表和交易记录表即可
BankCardLendDto bankCardLendDto=new BankCardLendDto();
bankCardLendDto.setType("2");
List<BankCardLendVo> bankCardVoList=bankCardLendMapper.selectBankCardLendList(bankCardLendDto);
// 获取当前日期
LocalDate currentDate = LocalDate.now();
int month = currentDate.getMonthValue();
int year = currentDate.getYear();
int dayOfMonth = currentDate.getDayOfMonth();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月账单");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat formatterTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date billDate= new Date();
//遍历数据,获取信用卡账单日及数据
for (BankCardLendVo bankCard : bankCardVoList) {
//如果信用卡额度为0不需要生成账单信息
if(bankCard.getCreditLimit()==0){
continue;
}
//0表示当期1表示下期
String isNextBillDate = bankCard.getIsNextBillDate();
String billDateStr=year+"-"+String.format("%02d", month)+"-"+String.format("%02d", bankCard.getBillDate());
//如果当前日期大于账单日,进入下个账单周期
if(dayOfMonth>bankCard.getBillDate()){
if(month==12){
billDateStr=(year+1)+"-"+String.format("%02d", month-11)+"-"+String.format("%02d", bankCard.getBillDate());
}
else{
billDateStr=(year)+"-"+String.format("%02d", month+1)+"-"+String.format("%02d", bankCard.getBillDate());
}
}
try {
billDate=formatter.parse(billDateStr);
} catch (ParseException e) {
throw new RuntimeException(e);
}
Calendar calendarStart = Calendar.getInstance();
calendarStart.setTime(billDate);
calendarStart.add(Calendar.MONTH, -1);
if(isNextBillDate.equals("0")){
calendarStart.add(Calendar.DATE, 1);
}
Date startDate = calendarStart.getTime();
String periodStart = formatter.format(startDate);
Calendar calendarEnd = Calendar.getInstance();
calendarEnd.setTime(billDate);
if(isNextBillDate.equals("1")){
calendarEnd.add(Calendar.DATE, -1);
}
Date endDate = calendarEnd.getTime();
String periodEnd= formatter.format(endDate);
double billAmount=0;
AccountsDealRecordDto accountsDealRecordDto=new AccountsDealRecordDto();
accountsDealRecordDto.setAccountId(bankCard.getId());
try {
accountsDealRecordDto.setStartDateTime(formatterTime.parse(periodStart+" 00:00:00"));
accountsDealRecordDto.setEndDateTime(formatterTime.parse(periodEnd+" 23:59:59"));
} catch (ParseException e) {
throw new RuntimeException(e);
}
accountsDealRecordDto.setCreditBill("6");
//获取所有交易记录
List<AccountsDealRecordVo> accountsDealRecordVoList=accountsDealRecordMapper.selectAccountsDealRecordList(accountsDealRecordDto);
//收入转为负数
for (AccountsDealRecordVo vo:accountsDealRecordVoList
) {
if(vo.getDealType().equals("1")){
vo.setAmount(vo.getAmount()*(-1));
}
}
if(accountsDealRecordVoList.size()>0){
billAmount=accountsDealRecordVoList.stream().mapToDouble(AccountsDealRecordVo::getAmount).sum();
}
CreditCardBillDto creditCardBillDto=new CreditCardBillDto();
creditCardBillDto.setCreditCardId(bankCard.getId());
creditCardBillDto.setBillDate(billDateStr);
creditCardBillDto.setBillState("0");
List<CreditCardBillVo> creditCardBillList=creditCardBillMapper.selectCreditCardBillList(creditCardBillDto);
if(creditCardBillList.size()>0){
CreditCardBillVo creditCardBillVo=creditCardBillList.get(0);
CreditCardBill creditCardBill=new CreditCardBill();
creditCardBill.setUpdateBy(SecurityUtils.getUsername());
creditCardBill.setUpdateTime(DateUtils.getNowDate());
creditCardBill.setId(creditCardBillVo.getId());
creditCardBill.setBillAmount(billAmount);
//如果账单日与当前日期相同,将账单修改为已出账
LocalTime currentTime = LocalTime.now();
LocalTime eveningThreshold = LocalTime.of(23, 0);
if(billDateStr.equals(formatter.format(new Date()))&&currentTime.isAfter(eveningThreshold)){
creditCardBill.setBillState("1");
}
//更新未出账单
creditCardBillMapper.updateCreditCardBill(creditCardBill);
}else {
//如果账单日大于当前日期,未出账,进行插入操作
int flag=billDateStr.compareTo(formatter.format(new Date()));
if(flag>=0){
CreditCardBill creditCardBill=new CreditCardBill();
try {
creditCardBill.setBillDate(formatter.parse(billDateStr));
} catch (ParseException e) {
throw new RuntimeException(e);
}
creditCardBill.setName(simpleDateFormat.format(creditCardBill.getBillDate()));
creditCardBill.setBillDatePeriod(periodStart+"~"+periodEnd);
creditCardBill.setCreateBy(bankCard.getCreateBy());
creditCardBill.setCreateTime(DateUtils.getNowDate());
creditCardBill.setId(IdWorker.getId());
creditCardBill.setCreditCardId(bankCard.getId());
creditCardBill.setBillAmount(billAmount);
creditCardBill.setBillState("0");
//插入未出账单
creditCardBillMapper.insertCreditCardBill(creditCardBill);
}
}
}
}
} }