fix: 交易记录问题修复。

This commit is contained in:
tianyongbao
2024-05-13 11:46:00 +08:00
parent af2d44a517
commit ba154d8e32
5 changed files with 215 additions and 36 deletions

View File

@@ -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

View File

@@ -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<String, Object> map);
/**
* 修改账户交易记录
*
* @param map 账户交易记录
* @return 结果
*/
public int batchMinusCurrentBalance(Map<String, Object> map);
/**
* 查询账户交易记录
*
* @param map 账户交易记录主键
* @return 账户交易记录
*/
public AccountsDealRecordVo getLastOneAccountsDealRecordByMap(Map<String, Object> map);
}

View File

@@ -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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> map = new HashMap<>();
map.put("startDateTime", accountsDealRecord.getCreateTime());
map.put("accountId", accountsDealRecord.getAccountId());
map.put("currentBalance", accountsDealRecord.getAmount());
accountsDealRecordMapper.batchPlusCurrentBalance(map);
}
}
}

View File

@@ -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<String, Object> 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<String, Object> 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<String, Object> 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);
}
}

View File

@@ -165,4 +165,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</update>
<update id="batchPlusCurrentBalance" >
update accounts_deal_record
<trim prefix="SET" suffixOverrides=",">
<if test="currentBalance != null ">current_balance = current_balance+#{currentBalance},</if>
</trim>
where account_id = #{accountId}
<if test="startDateTime!=null">
and create_time>=#{startDateTime}
</if>
</update>
<update id="batchMinusCurrentBalance" >
update accounts_deal_record
<trim prefix="SET" suffixOverrides=",">
<if test="currentBalance != null ">current_balance = current_balance-#{currentBalance},</if>
</trim>
where account_id = #{accountId}
<if test="startDateTime!=null">
and create_time>=#{startDateTime}
</if>
</update>
<select id="getLastOneAccountsDealRecordByMap" resultMap="AccountsDealRecordResult">
<include refid="selectAccountsDealRecordVo"/>
where a.account_id = #{accountId}
and a.del_flag='0'
<if test="startDateTime!=null">
and #{startDateTime}>=a.create_time
</if>
order by a.create_time desc
limit 1
</select>
</mapper>