From ba154d8e32cf93f23bd526cd2386956c65990557 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Mon, 13 May 2024 11:46:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BA=A4=E6=98=93=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AccountsDealRecordController.java | 27 +++--- .../mapper/AccountsDealRecordMapper.java | 26 ++++++ .../impl/AccountsDealRecordServiceImpl.java | 80 ++++++++++++++++- .../AccountsTransferRecordServiceImpl.java | 86 +++++++++++++++---- .../invest/AccountsDealRecordMapper.xml | 32 +++++++ 5 files changed, 215 insertions(+), 36 deletions(-) diff --git a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/AccountsDealRecordController.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/AccountsDealRecordController.java index 6187ff9..b10e046 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/AccountsDealRecordController.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/controller/AccountsDealRecordController.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.AccountsDealRecord; -import com.ruoyi.invest.domain.vo.AccountsDealRecordVo; import com.ruoyi.invest.domain.dto.AccountsDealRecordDto; +import com.ruoyi.invest.domain.vo.AccountsDealRecordVo; import com.ruoyi.invest.service.IAccountsDealRecordService; -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/mapper/AccountsDealRecordMapper.java b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/mapper/AccountsDealRecordMapper.java index f994fdb..566a7c4 100644 --- a/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/mapper/AccountsDealRecordMapper.java +++ b/ruoyi-modules/intc-invest/src/main/java/com/ruoyi/invest/mapper/AccountsDealRecordMapper.java @@ -5,6 +5,7 @@ import com.ruoyi.invest.domain.dto.AccountsDealRecordDto; import com.ruoyi.invest.domain.vo.AccountsDealRecordVo; import java.util.List; +import java.util.Map; /** * 账户交易记录Mapper接口 @@ -85,4 +86,29 @@ public interface AccountsDealRecordMapper * @return 结果 */ public int deleteAccountsDealRecordByTransferId(Long id); + + /** + * 修改账户交易记录 + * + * @param map 账户交易记录 + * @return 结果 + */ + public int batchPlusCurrentBalance(Map map); + + /** + * 修改账户交易记录 + * + * @param map 账户交易记录 + * @return 结果 + */ + public int batchMinusCurrentBalance(Map map); + + + /** + * 查询账户交易记录 + * + * @param map 账户交易记录主键 + * @return 账户交易记录 + */ + public AccountsDealRecordVo getLastOneAccountsDealRecordByMap(Map map); } 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 f4496b6..fac4c16 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 @@ -14,7 +14,9 @@ import com.ruoyi.invest.service.IAccountsDealRecordService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 账户交易记录Service业务层处理 @@ -66,16 +68,34 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService { accountsDealRecord.setCreateBy(SecurityUtils.getUsername()); accountsDealRecord.setId(IdWorker.getId()); + + //获取最新一条记录的数据,计算余额 + 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(); + lastOneAccountsDealRecord.setCurrentBalance(0d); + } //收入 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(inAccount.getBalance()); + accountsDealRecord.setCurrentBalance(lastOneAccountsDealRecord.getCurrentBalance()+accountsDealRecord.getAmount()); accountsMapper.updateAccounts(inAccount); //收入 accountsDealRecord.setName(inAccount.getName()+"("+ StringUtils.getLastNumberChars(3,inAccount.getCode())+")收入"+accountsDealRecord.getAmount()); + + Map map = new HashMap<>(); + map.put("startDateTime", accountsDealRecord.getCreateTime()); + map.put("accountId", accountsDealRecord.getAccountId()); + map.put("currentBalance", accountsDealRecord.getAmount()); + + accountsDealRecordMapper.batchPlusCurrentBalance(map); } //支出 if(accountsDealRecord.getDealType().equals("2")){ @@ -83,10 +103,16 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService AccountsVo outAccount=accountsMapper.selectAccountsById(accountsDealRecord.getAccountId()); outAccount.setBalance(outAccount.getBalance()-accountsDealRecord.getAmount()); outAccount.setAvailableLimit(outAccount.getAvailableLimit()-accountsDealRecord.getAmount()); - accountsDealRecord.setCurrentBalance(outAccount.getBalance()); + accountsDealRecord.setCurrentBalance(lastOneAccountsDealRecord.getCurrentBalance()-accountsDealRecord.getAmount()); accountsMapper.updateAccounts(outAccount); //支出 accountsDealRecord.setName(outAccount.getName()+"("+ StringUtils.getLastNumberChars(3,outAccount.getCode())+")支出"+accountsDealRecord.getAmount()); + + Map map = new HashMap<>(); + map.put("startDateTime", accountsDealRecord.getCreateTime()); + map.put("accountId", accountsDealRecord.getAccountId()); + map.put("currentBalance", accountsDealRecord.getAmount()); + accountsDealRecordMapper.batchMinusCurrentBalance(map); } return accountsDealRecordMapper.insertAccountsDealRecord(accountsDealRecord); @@ -115,6 +141,9 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService @Override public int deleteAccountsDealRecordByIds(Long[] ids) { + for (Long id : ids) { + updateDeleteDealRecord(id); + } return accountsDealRecordMapper.removeAccountsDealRecordByIds(ids); } @@ -127,7 +156,54 @@ public class AccountsDealRecordServiceImpl implements IAccountsDealRecordService @Override public int deleteAccountsDealRecordById(Long id) { + updateDeleteDealRecord(id); return accountsDealRecordMapper.removeAccountsDealRecordById(id); } + 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(); + lastOneAccountsDealRecord.setCurrentBalance(0d); + } + //收入 + 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); + } + } + } 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 3f63064..75f8b5c 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 @@ -14,7 +14,9 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 账户转账记录Service业务层处理 @@ -193,8 +195,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor creditDeal.setRemark("交易商户:"+pos.getName()+"-"+pos.getMerchantName()); creditDeal.setCreateBy(SecurityUtils.getUsername()); creditDeal.setCreateTime(accountsTransferRecord.getCreateTime()); - accountsDealRecordMapper.insertAccountsDealRecord(creditDeal); - + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(creditDeal); //储蓄卡账户余额计算 AccountsVo debitAccount=accountsMapper.selectAccountsById(debitCardVo.getId()); debitAccount.setBalance(debitAccount.getBalance()+accountsTransferRecord.getActualAmount()); @@ -219,8 +222,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor creditDeal.setRemark("刷卡金额"); creditDeal.setCreateBy(SecurityUtils.getUsername()); creditDeal.setCreateTime(accountsTransferRecord.getCreateTime()); - accountsDealRecordMapper.insertAccountsDealRecord(creditDeal); - + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(creditDeal); //储蓄卡消费记录明细,支出 creditDeal.setAccountId(debitAccount.getAccountId()); @@ -243,8 +247,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor long millis = currentDate.getTime(); // 获取当前时间的毫秒数 Date newDate = new Date(millis + 1000); // 加上1000毫秒即1秒 creditDeal.setCreateTime(newDate); - accountsDealRecordMapper.insertAccountsDealRecord(creditDeal); - + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(creditDeal); accountsTransferRecord.setName(pos.getName()+"-"+creditAccount.getName()+"("+ StringUtils.getLastNumberChars(3,creditAccount.getCode())+")"+"-"+pos.getMerchantName()); } @@ -292,8 +297,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor long millis = currentDate.getTime(); // 获取当前时间的毫秒数 Date newDate = new Date(millis+1000); // 加上1000毫秒即1秒 creditDeal.setCreateTime(newDate); - accountsDealRecordMapper.insertAccountsDealRecord(creditDeal); - + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(creditDeal); //储蓄卡账户余额计算 AccountsVo debitAccount=accountsMapper.selectAccountsById(debitCardVo.getId()); debitAccount.setBalance(debitAccount.getBalance()-accountsTransferRecord.getActualAmount()); @@ -319,8 +325,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor creditDeal.setRemark("信用卡还款"); creditDeal.setCreateBy(SecurityUtils.getUsername()); creditDeal.setCreateTime(accountsTransferRecord.getCreateTime()); - accountsDealRecordMapper.insertAccountsDealRecord(creditDeal); - + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(creditDeal); accountsTransferRecord.setName(debitCardVo.getName()+"("+StringUtils.getLastNumberChars(3,debitCardVo.getCode())+")还款至"+creditVo.getName()+"("+StringUtils.getLastNumberChars(3,creditVo.getCode())+")"); } @@ -385,8 +392,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor dealRecord.setRemark("投资账户转账"); dealRecord.setCreateBy(SecurityUtils.getUsername()); dealRecord.setCreateTime(accountsTransferRecord.getCreateTime()); - accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); - + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(dealRecord); //储蓄卡账户余额计算 AccountsVo debitAccount=accountsMapper.selectAccountsById(debitCardVo.getId()); //1表示转入,2表示转出 @@ -424,7 +432,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor dealRecord.setRemark("投资账户转账"); dealRecord.setCreateBy(SecurityUtils.getUsername()); dealRecord.setCreateTime(accountsTransferRecord.getCreateTime()); - accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(dealRecord); } /** @@ -469,7 +479,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor creditDeal.setRemark("储蓄卡转账"); creditDeal.setCreateBy(SecurityUtils.getUsername()); creditDeal.setCreateTime(accountsTransferRecord.getCreateTime()); - accountsDealRecordMapper.insertAccountsDealRecord(creditDeal); + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(creditDeal); //储蓄卡转入账户余额计算 AccountsVo inAccount=accountsMapper.selectAccountsById(inDebitCardVo.getId()); @@ -496,7 +508,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor creditDeal.setRemark("储蓄卡转账"); creditDeal.setCreateBy(SecurityUtils.getUsername()); creditDeal.setCreateTime(accountsTransferRecord.getCreateTime()); - accountsDealRecordMapper.insertAccountsDealRecord(creditDeal); + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(creditDeal); accountsTransferRecord.setName(outDebitCardVo.getName()+"("+StringUtils.getLastNumberChars(3,outDebitCardVo.getCode())+")转账至"+inDebitCardVo.getName()+"("+StringUtils.getLastNumberChars(3,inDebitCardVo.getCode())+")"); } @@ -559,7 +573,9 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor dealRecord.setRemark("借贷记账"); dealRecord.setCreateBy(SecurityUtils.getUsername()); dealRecord.setCreateTime(accountsTransferRecord.getCreateTime()); - accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(dealRecord); //储蓄卡账户余额计算 AccountsVo debitAccount=accountsMapper.selectAccountsById(debitCardVo.getId()); @@ -600,6 +616,42 @@ public class AccountsTransferRecordServiceImpl implements IAccountsTransferRecor dealRecord.setCreateBy(SecurityUtils.getUsername()); dealRecord.setCreateTime(accountsTransferRecord.getCreateTime()); - accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + //重新计算余额 + // accountsDealRecordMapper.insertAccountsDealRecord(dealRecord); + insertAccountsDealRecord(dealRecord); + } + + public int insertAccountsDealRecord(AccountsDealRecord accountsDealRecord) + { + accountsDealRecord.setCreateBy(SecurityUtils.getUsername()); + accountsDealRecord.setId(IdWorker.getId()); + + //获取最新一条记录的数据,计算余额 + 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(); + lastOneAccountsDealRecord.setCurrentBalance(0d); + } + //收入 + if(accountsDealRecord.getDealType().equals("1")){ + Map map = new HashMap<>(); + map.put("startDateTime", accountsDealRecord.getCreateTime()); + map.put("accountId", accountsDealRecord.getAccountId()); + map.put("currentBalance", accountsDealRecord.getAmount()); + accountsDealRecordMapper.batchPlusCurrentBalance(map); + } + //支出 + if(accountsDealRecord.getDealType().equals("2")){ + Map map = new HashMap<>(); + map.put("startDateTime", accountsDealRecord.getCreateTime()); + map.put("accountId", accountsDealRecord.getAccountId()); + map.put("currentBalance", accountsDealRecord.getAmount()); + accountsDealRecordMapper.batchMinusCurrentBalance(map); + } + + return accountsDealRecordMapper.insertAccountsDealRecord(accountsDealRecord); } } 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 b62d109..48cd400 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 @@ -165,4 +165,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + update accounts_deal_record + + current_balance = current_balance+#{currentBalance}, + + where account_id = #{accountId} + + and create_time>=#{startDateTime} + + + + + update accounts_deal_record + + current_balance = current_balance-#{currentBalance}, + + where account_id = #{accountId} + + and create_time>=#{startDateTime} + + + +