From 1cb507c8d1596f66ce66417cd3751c975ceb3ab1 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Tue, 6 Aug 2024 19:09:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AE=B0=E8=B4=A6=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E5=88=A0=E9=99=A4=E7=BC=96=E8=BE=91=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AccountsTransferRecordController.java | 27 +++--- .../domain/dto/AccountsDealRecordDto.java | 3 + .../impl/AccountsDealRecordServiceImpl.java | 16 +++- .../AccountsTransferRecordServiceImpl.java | 87 ++++++++++++++++++- .../service/impl/StatisticAnalysisImpl.java | 19 +++- .../invest/AccountsDealRecordMapper.xml | 1 + 6 files changed, 128 insertions(+), 25 deletions(-) diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/AccountsTransferRecordController.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/AccountsTransferRecordController.java index 0f20923..2b1e1f3 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/AccountsTransferRecordController.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/AccountsTransferRecordController.java @@ -1,30 +1,23 @@ package com.ruoyi.invest.controller; -import java.util.List; -import java.io.IOException; -import javax.servlet.http.HttpServletResponse; -import javax.annotation.Resource; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.invest.domain.AccountsTransferRecord; -import com.ruoyi.invest.domain.vo.AccountsTransferRecordVo; import com.ruoyi.invest.domain.dto.AccountsTransferRecordDto; +import com.ruoyi.invest.domain.vo.AccountsTransferRecordVo; import com.ruoyi.invest.service.IAccountsTransferRecordService; -import com.ruoyi.common.core.web.controller.BaseController; -import com.ruoyi.common.core.web.domain.AjaxResult; -import com.ruoyi.common.core.utils.poi.ExcelUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import com.ruoyi.common.core.web.page.TableDataInfo; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; /** * 账户转账记录Controller diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/domain/dto/AccountsDealRecordDto.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/domain/dto/AccountsDealRecordDto.java index 128da17..05b5c1e 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/domain/dto/AccountsDealRecordDto.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/domain/dto/AccountsDealRecordDto.java @@ -65,4 +65,7 @@ public class AccountsDealRecordDto extends BaseEntity implements Serializable @ApiModelProperty(value="交易子类别") private String childCategory; + /** 转账记录id */ + private Long transferRecordId; + } 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 5b3b771..cb34367 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 @@ -108,7 +108,8 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService AccountsDealRecord lastOneAccountsDealRecord=accountsDealRecordMapper.getLastOneAccountsDealRecordByMap(lastMap); if(lastOneAccountsDealRecord==null){ lastOneAccountsDealRecord=new AccountsDealRecord(); - lastOneAccountsDealRecord.setCurrentBalance(0d); + AccountsVo accountsVo=accountsMapper.selectAccountsById(accountsDealRecord.getAccountId()); + lastOneAccountsDealRecord.setCurrentBalance(accountsVo.getBalance()); } //收入 if(accountsDealRecord.getDealType().equals("1")){ @@ -159,9 +160,16 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService @Override public int updateAccountsDealRecord(AccountsDealRecord accountsDealRecord) { + //编辑时,先物理删除数据,再插入一条新数据,否则计算太繁琐,简单处理 + long id=accountsDealRecord.getId(); + updateDeleteDealRecord(id); + accountsDealRecordMapper.deleteAccountsDealRecordById(id); + //删除后,将id设置为空,进行插入操作 + accountsDealRecord.setId(null); accountsDealRecord.setUpdateBy(SecurityUtils.getUsername()); accountsDealRecord.setUpdateTime(DateUtils.getNowDate()); - return accountsDealRecordMapper.updateAccountsDealRecord(accountsDealRecord); + //插入更新后的数据 + return insertAccountsDealRecord(accountsDealRecord); } /** @@ -200,9 +208,11 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService lastMap.put("startDateTime", accountsDealRecord.getCreateTime()); lastMap.put("accountId", accountsDealRecord.getAccountId()); AccountsDealRecord lastOneAccountsDealRecord=accountsDealRecordMapper.getLastOneAccountsDealRecordByMap(lastMap); + //如果沒有记录,取最新的账户数据 if(lastOneAccountsDealRecord==null){ lastOneAccountsDealRecord=new AccountsDealRecord(); - lastOneAccountsDealRecord.setCurrentBalance(0d); + AccountsVo accountsVo=accountsMapper.selectAccountsById(accountsDealRecord.getAccountId()); + lastOneAccountsDealRecord.setCurrentBalance(accountsVo.getAvailableLimit()); } //收入 if(accountsDealRecord.getDealType().equals("1")){ 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 30c2b88..fd1b6d0 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 @@ -6,6 +6,7 @@ import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.invest.domain.AccountsDealRecord; import com.ruoyi.invest.domain.AccountsTransferRecord; +import com.ruoyi.invest.domain.dto.AccountsDealRecordDto; import com.ruoyi.invest.domain.dto.AccountsTransferRecordDto; import com.ruoyi.invest.domain.vo.*; import com.ruoyi.invest.mapper.*; @@ -60,6 +61,14 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor vo.setInAccountId(vo.getOutAccountId()); } } + if(vo.getPosId()!=null){ + + PosMachineVo pos=posMachineMapper.selectPosMachineById(vo.getPosId()); + //存入数据时,按实际来,需要重新计算下 + BigDecimal bg = BigDecimal.valueOf(pos.getRate()); + vo.setRate(bg.multiply(new BigDecimal(100)).doubleValue()); + vo.setRatePlus(pos.getRatePlus()); + } return vo; } @@ -120,9 +129,16 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor @Override public int updateAccountsTransferRecord(AccountsTransferRecord accountsTransferRecord) { + //先删除,再进行插入操作 + Long[] ids=new Long[1]; + ids[0]=accountsTransferRecord.getId(); + deleteAccountsTransferRecordByIds(ids); + + //删除后,将id设置为空,进行插入操作 + accountsTransferRecord.setId(null); accountsTransferRecord.setUpdateBy(SecurityUtils.getUsername()); accountsTransferRecord.setUpdateTime(DateUtils.getNowDate()); - return accountsTransferRecordMapper.updateAccountsTransferRecord(accountsTransferRecord); + return insertAccountsTransferRecord(accountsTransferRecord); } /** @@ -134,9 +150,72 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor @Override public int deleteAccountsTransferRecordByIds(Long[] ids) { + //遍历转账记录,获取对应的交易记录,再进行遍历删除 + for (Long id : ids) { + AccountsDealRecordDto accountsDealRecordDto=new AccountsDealRecordDto(); + accountsDealRecordDto.setTransferRecordId(id); + //获取对应的交易记录 + List list=accountsDealRecordMapper.selectAccountsDealRecordList(accountsDealRecordDto); + //遍历交易记录进行数据更新 + for (AccountsDealRecordVo accountDeal : list) { + updateDeleteDealRecord(accountDeal.getId()); + } + //更新完成后,根据转账记录id进行物理删除 + accountsDealRecordMapper.deleteAccountsDealRecordByTransferId(id); + } + //全部删除后,对记录进行删除 return accountsTransferRecordMapper.removeAccountsTransferRecordByIds(ids); } + + public void updateDeleteDealRecord(Long id){ + //获取交易记录,删除的话,收入需要减回去,支出需要加回来。 + AccountsDealRecordVo accountsDealRecord=accountsDealRecordMapper.selectAccountsDealRecordById(id); + //获取最新一条记录的数据,计算余额 + Map lastMap = new HashMap<>(); + lastMap.put("startDateTime", accountsDealRecord.getCreateTime()); + lastMap.put("accountId", accountsDealRecord.getAccountId()); + AccountsDealRecord lastOneAccountsDealRecord=accountsDealRecordMapper.getLastOneAccountsDealRecordByMap(lastMap); + if(lastOneAccountsDealRecord==null){ + lastOneAccountsDealRecord=new AccountsDealRecord(); + AccountsVo accountsVo=accountsMapper.selectAccountsById(accountsDealRecord.getAccountId()); + lastOneAccountsDealRecord.setCurrentBalance(accountsVo.getBalance()); + } + //收入 + if(accountsDealRecord.getDealType().equals("1")){ + //收入账户余额计算 + AccountsVo inAccount=accountsMapper.selectAccountsById(accountsDealRecord.getAccountId()); + inAccount.setBalance(inAccount.getBalance()-accountsDealRecord.getAmount()); + inAccount.setAvailableLimit(inAccount.getAvailableLimit()-accountsDealRecord.getAmount()); + accountsDealRecord.setCurrentBalance(lastOneAccountsDealRecord.getCurrentBalance()-accountsDealRecord.getAmount()); + accountsMapper.updateAccounts(inAccount); + + Map map = new HashMap<>(); + map.put("startDateTime", accountsDealRecord.getCreateTime()); + map.put("accountId", accountsDealRecord.getAccountId()); + map.put("currentBalance", accountsDealRecord.getAmount()); + + accountsDealRecordMapper.batchMinusCurrentBalance(map); + } + + //支出 + if(accountsDealRecord.getDealType().equals("2")){ + //支出余额计算 + AccountsVo outAccount=accountsMapper.selectAccountsById(accountsDealRecord.getAccountId()); + outAccount.setBalance(outAccount.getBalance()+accountsDealRecord.getAmount()); + outAccount.setAvailableLimit(outAccount.getAvailableLimit()+accountsDealRecord.getAmount()); + accountsDealRecord.setCurrentBalance(lastOneAccountsDealRecord.getCurrentBalance()+accountsDealRecord.getAmount()); + accountsMapper.updateAccounts(outAccount); + Map map = new HashMap<>(); + map.put("startDateTime", accountsDealRecord.getCreateTime()); + map.put("accountId", accountsDealRecord.getAccountId()); + map.put("currentBalance", accountsDealRecord.getAmount()); + + accountsDealRecordMapper.batchPlusCurrentBalance(map); + } + } + + /** * 删除账户转账记录信息 * @@ -146,6 +225,7 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor @Override public int deleteAccountsTransferRecordById(Long id) { + return accountsTransferRecordMapper.removeAccountsTransferRecordById(id); } @@ -190,7 +270,7 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor //信用卡账户余额计算 AccountsVo creditAccount=accountsMapper.selectAccountsById(creditVo.getId()); creditAccount.setBalance(creditAccount.getBalance()-accountsTransferRecord.getAmount()); - creditAccount.setAvailableLimit(creditAccount.getBalance()+creditAccount.getCreditLimit()); + creditAccount.setAvailableLimit(creditAccount.getAvailableLimit()-accountsTransferRecord.getAmount()); creditAccount.setUpdateTime(accountsTransferRecord.getCreateTime()); accountsMapper.updateAccounts(creditAccount); //信用卡消费记录明细 @@ -292,7 +372,8 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor //信用卡账户余额计算 AccountsVo creditAccount=accountsMapper.selectAccountsById(creditVo.getId()); creditAccount.setBalance(creditAccount.getBalance()+accountsTransferRecord.getAmount()); - creditAccount.setAvailableLimit(creditAccount.getBalance()+creditAccount.getCreditLimit()); + //可用额度,等于之前的可用额度加上还款后的额度 + creditAccount.setAvailableLimit(creditAccount.getAvailableLimit()+accountsTransferRecord.getAmount()); creditAccount.setUpdateTime(accountsTransferRecord.getCreateTime()); accountsMapper.updateAccounts(creditAccount); //信用卡消费记录明细 diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/StatisticAnalysisImpl.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/StatisticAnalysisImpl.java index 678fb36..a52b347 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/StatisticAnalysisImpl.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/service/impl/StatisticAnalysisImpl.java @@ -241,7 +241,15 @@ public class StatisticAnalysisImpl implements IStatisticAnalysisService { map.put("lastMonthUsedLimit",decimalFormat.format(lastMonthUsedLimit)); - map.put("lastMonthUsedRate",decimalFormat.format(lastMonthUsedLimit*100/creditLimit)); + //使用率 + double lastMonthUsedRate; + if (creditLimit != 0) { + lastMonthUsedRate= ((lastMonthUsedLimit) * 100) /creditLimit; + }else { + lastMonthUsedRate= 0; + } + map.put("lastMonthUsedRate", decimalFormat.format(lastMonthUsedRate)); + //近6个月月信用卡账单 @@ -258,7 +266,14 @@ public class StatisticAnalysisImpl implements IStatisticAnalysisService { double lastSixMonthUsedLimit = creditCardBillList.stream().mapToDouble(CreditCardBillVo::getBillAmount).sum(); map.put("lastSixMonthUsedLimit",decimalFormat.format(lastSixMonthUsedLimit/6)); //近6个月月信用卡使用率 - map.put("lastSixMonthUsedRate",decimalFormat.format(lastSixMonthUsedLimit*100/(6*creditLimit))); + double lastSixMonthUsedRate; + if (creditLimit != 0) { + lastSixMonthUsedRate= lastSixMonthUsedLimit*100/(6*creditLimit); + }else { + lastSixMonthUsedRate= 0; + } + map.put("lastSixMonthUsedRate", decimalFormat.format(lastSixMonthUsedRate)); + return map; } diff --git a/ruoyi-modules/intc-invest/src/main/resources/mapper/invest/AccountsDealRecordMapper.xml b/ruoyi-modules/intc-invest/src/main/resources/mapper/invest/AccountsDealRecordMapper.xml index 344716c..6209045 100644 --- a/ruoyi-modules/intc-invest/src/main/resources/mapper/invest/AccountsDealRecordMapper.xml +++ b/ruoyi-modules/intc-invest/src/main/resources/mapper/invest/AccountsDealRecordMapper.xml @@ -55,6 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" a.del_flag='0' and (a2."name" like '%'|| #{name}||'%' or a2."code" like '%'|| #{name}||'%') and a.type = #{type} + and a.transfer_record_id = #{transferRecordId} and a.account_id = #{accountId} and a.deal_type = #{dealType} and a.deal_category = #{dealCategory}