From 5c8dea177ee038d7306dc5db3583f11b54082795 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Tue, 14 Jan 2025 09:48:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=A1=E7=94=A8=E5=8D=A1=E6=9C=89?= =?UTF-8?q?=E4=BA=A4=E6=98=93=E8=AE=B0=E5=BD=95=E5=90=8E=EF=BC=8C=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E6=9B=B4=E6=96=B0=E8=B4=A6=E5=8D=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ICreditCardBillService.java | 20 +- .../impl/AccountsDealRecordServiceImpl.java | 14 +- .../AccountsTransferRecordServiceImpl.java | 14 +- .../impl/CreditCardBillServiceImpl.java | 266 ++++++++++++++++++ 4 files changed, 309 insertions(+), 5 deletions(-) diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/ICreditCardBillService.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/ICreditCardBillService.java index ba7361a..9e22471 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/ICreditCardBillService.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/ICreditCardBillService.java @@ -1,10 +1,11 @@ package com.ruoyi.invest.service; -import java.util.List; import com.ruoyi.invest.domain.CreditCardBill; import com.ruoyi.invest.domain.dto.CreditCardBillDto; import com.ruoyi.invest.domain.vo.CreditCardBillVo; +import java.util.List; + /** * 信用卡账单Service接口 * @@ -60,4 +61,21 @@ public interface ICreditCardBillService * @return 结果 */ public int deleteCreditCardBillById(Long id); + + + /** + * 更新信用卡账单信息 + * + * @param id 信用卡账单主键 + * @return 结果 + */ + public void updateCreditBill(Long id); + + /** + * 更新信用卡未出账单 + * + * @author tianyongbao + * @date 2023-12-11 + */ + public void updateAllCreditBill(); } diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/AccountsDealRecordServiceImpl.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/AccountsDealRecordServiceImpl.java index cb34367..dfe5fc3 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/AccountsDealRecordServiceImpl.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/AccountsDealRecordServiceImpl.java @@ -12,6 +12,7 @@ import com.ruoyi.invest.domain.vo.AccountsVo; import com.ruoyi.invest.mapper.AccountsDealRecordMapper; import com.ruoyi.invest.mapper.AccountsMapper; import com.ruoyi.invest.service.IAccountsDealRecordService; +import com.ruoyi.invest.service.ICreditCardBillService; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -28,6 +29,8 @@ import java.util.Map; @Service public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService { + @Resource + private ICreditCardBillService creditCardBillService; @Resource private AccountsDealRecordMapper accountsDealRecordMapper; @@ -147,7 +150,10 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService map.put("currentBalance", accountsDealRecord.getAmount()); accountsDealRecordMapper.batchMinusCurrentBalance(map); } - + //如果是信用卡交易,更新信用卡账单数据 + if(accountsDealRecord.getDealType().equals("2")){ + creditCardBillService.updateCreditBill(accountsDealRecord.getAccountId()); + } return accountsDealRecordMapper.insertAccountsDealRecord(accountsDealRecord); } @@ -184,7 +190,10 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService for (Long id : ids) { 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) { updateDeleteDealRecord(id); + return accountsDealRecordMapper.removeAccountsDealRecordById(id); } diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/AccountsTransferRecordServiceImpl.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/AccountsTransferRecordServiceImpl.java index fd1b6d0..d85d10d 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/AccountsTransferRecordServiceImpl.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/AccountsTransferRecordServiceImpl.java @@ -11,6 +11,7 @@ import com.ruoyi.invest.domain.dto.AccountsTransferRecordDto; import com.ruoyi.invest.domain.vo.*; import com.ruoyi.invest.mapper.*; import com.ruoyi.invest.service.IAccountsTransferRecordService; +import com.ruoyi.invest.service.ICreditCardBillService; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -46,6 +47,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor @Resource private FutureStocksMapper futureStocksMapper; + + @Resource + private ICreditCardBillService creditCardBillService; /** * 查询账户转账记录 * @@ -100,10 +104,14 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor //pos机刷卡,进行计算 if(accountsTransferRecord.getType().equals("1")){ dealPosTransfer(accountsTransferRecord); + //更新信用卡账单 + creditCardBillService.updateCreditBill(accountsTransferRecord.getOutAccountId()); } //信用卡还款,进行计算 if(accountsTransferRecord.getType().equals("2")){ dealCreditTransfer(accountsTransferRecord); + //更新信用卡账单 + creditCardBillService.updateCreditBill(accountsTransferRecord.getInAccountId()); } //投资转账,进行计算 if(accountsTransferRecord.getType().equals("3")){ @@ -163,8 +171,10 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor //更新完成后,根据转账记录id进行物理删除 accountsDealRecordMapper.deleteAccountsDealRecordByTransferId(id); } - //全部删除后,对记录进行删除 - return accountsTransferRecordMapper.removeAccountsTransferRecordByIds(ids); + //全部删除后,更新信用卡账单,对记录进行删除 + int i= accountsTransferRecordMapper.removeAccountsTransferRecordByIds(ids); + creditCardBillService.updateAllCreditBill(); + return i; } diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/CreditCardBillServiceImpl.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/CreditCardBillServiceImpl.java index bd2d6c4..bb079c5 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/CreditCardBillServiceImpl.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/CreditCardBillServiceImpl.java @@ -5,9 +5,13 @@ import com.ruoyi.common.core.utils.IdWorker; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.utils.SecurityUtils; 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.vo.AccountsDealRecordVo; import com.ruoyi.invest.domain.vo.BankCardLendVo; import com.ruoyi.invest.domain.vo.CreditCardBillVo; +import com.ruoyi.invest.mapper.AccountsDealRecordMapper; import com.ruoyi.invest.mapper.BankCardLendMapper; import com.ruoyi.invest.mapper.CreditCardBillMapper; import com.ruoyi.invest.service.ICreditCardBillService; @@ -15,7 +19,10 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.DecimalFormat; +import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalTime; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -34,6 +41,9 @@ public class CreditCardBillServiceImpl implements ICreditCardBillService @Resource private BankCardLendMapper bankCardLendMapper; + @Resource + private AccountsDealRecordMapper accountsDealRecordMapper; + /** * 查询信用卡账单 * @@ -182,4 +192,260 @@ public class CreditCardBillServiceImpl implements ICreditCardBillService 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 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 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()))&¤tTime.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 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 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 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()))&¤tTime.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); + } + } + + } + } }