余额统一在科目余额表

This commit is contained in:
jinbooks_dev
2025-06-10 15:37:27 +08:00
parent baef7b8625
commit ad249a0c84
7 changed files with 60 additions and 89 deletions

View File

@ -85,8 +85,6 @@ public class BaseSubject implements Serializable {
Integer systemDefault;
BigDecimal balance;
String unit;
/**
* 辅助核算
@ -119,6 +117,9 @@ public class BaseSubject implements Serializable {
@TableField(exist = false)
String parentName;
@TableField(exist = false)
BigDecimal balance;
/**
* 创建者

View File

@ -63,5 +63,7 @@ public interface StatementSubjectBalanceService {
StatementSubjectBalance create(BookSubject subject, String currentTerm);
boolean checkout(Settlement dto) ;
List<StatementSubjectBalance> selectSubjectBalance(String bookId, List<String> subjectCodes);
}

View File

@ -206,34 +206,6 @@ public class BookInitBalanceServiceImpl extends ServiceImpl<BookInitBalanceMappe
// 更新科目余额
Map<String, BookSubject> map = new HashMap<>();
List<String> codes = bookInitBalances.stream().map(BookInitBalance::getCode).toList();
LambdaQueryWrapper<BookSubject> subjectLqw = Wrappers.lambdaQuery();
subjectLqw.in(BookSubject::getCode, codes);
subjectLqw.eq(BookSubject::getBookId, dtos.get(0).getBookId());
List<BookSubject> bookSubjects = bookSubjectMapper.selectList(subjectLqw);
List<BookSubject> updateSubjects = new ArrayList<>();
if (!bookSubjects.isEmpty()) {
map = bookSubjects.stream()
.collect(Collectors.toMap(BookSubject::getCode, bookSubject -> bookSubject));
for (BookInitBalance bookInitBalance : bookInitBalances) {
BookSubject bookSubject = map.get(bookInitBalance.getCode());
if (bookSubject != null) {
if (bookSubject.getBalance() == null) {
bookSubject.setBalance(BigDecimal.ZERO);
}
if (bookInitBalance.getBalance() == null) {
bookInitBalance.setBalance(BigDecimal.ZERO);
}
if (!BigDecimal.ZERO.equals(bookInitBalance.getBalance())
&& !bookSubject.getBalance().equals(bookInitBalance.getBalance())) {
bookSubject.setBalance(bookInitBalance.getBalance());
updateSubjects.add(bookSubject);
}
}
}
}
if (!updateSubjects.isEmpty()) {
bookSubjectMapper.updateBatchById(updateSubjects);
}
// 更新科目余额表
LambdaQueryWrapper<StatementSubjectBalance> balanceLqw = Wrappers.lambdaQuery();

View File

@ -38,6 +38,7 @@ import com.jinbooks.entity.book.dto.SubjectChangeDto;
import com.jinbooks.entity.book.dto.SubjectPageDto;
import com.jinbooks.entity.dto.ListIdsDto;
import com.jinbooks.entity.standard.StandardSubject;
import com.jinbooks.entity.statement.StatementSubjectBalance;
import com.jinbooks.enums.BookBusinessExceptionEnum;
import com.jinbooks.exception.BusinessException;
import com.jinbooks.persistence.mapper.BookSubjectMapper;
@ -46,6 +47,7 @@ import com.jinbooks.persistence.service.BookSubjectService;
import com.jinbooks.persistence.service.StatementSubjectBalanceService;
import com.jinbooks.util.StrUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.dromara.hutool.core.tree.MapTree;
@ -55,6 +57,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@ -494,38 +497,6 @@ public class BookSubjectServiceImpl extends ServiceImpl<BookSubjectMapper, BookS
}
}
private void insertAuxiliaryData(boolean isAuxiliary, String currentId, BookSubject subject) {
if (isAuxiliary) {
BookSubject one = super.getOne(Wrappers.<BookSubject>lambdaQuery()
.eq(BookSubject::getBelongSubjectId, currentId));
if (Objects.isNull(one)) {
BookSubject bookSubject = new BookSubject();
bookSubject.setBookId(subject.getBookId());
bookSubject.setCode(subject.getCode());
bookSubject.setName(subject.getName());
bookSubject.setAuxiliary(subject.getAuxiliary());
//忽略字段
// BookSubject bookSubject = BeanUtil.copyProperties(subject, BookSubject.class, "id", "createdBy", "createdDate", "modifiedBy", "modifiedDate", "deleted");
setAuxiliarySubject(bookSubject);
bookSubject.setBelongSubjectId(currentId);
super.save(bookSubject);
} else {
BookSubject bookSubject = new BookSubject();
bookSubject.setCode(subject.getCode());
bookSubject.setName(subject.getName());
bookSubject.setAuxiliary(subject.getAuxiliary());
setAuxiliarySubject(bookSubject);
/* BookSubject bookSubject = new BookSubject();
bookSubject.setAuxiliary(subject.getAuxiliary());
bookSubject.setIdPath(subject.getIdPath());
bookSubject.setParentId(subject.getParentId());
bookSubject.setLevel(subject.getLevel());
;*/
super.update(bookSubject, Wrappers.<BookSubject>lambdaUpdate().eq(BookSubject::getId, one.getId()));
}
}
}
@Override
public List<MapTree<String>> tree(String bookId) {
List<BaseSubject> subjects = new ArrayList<>();
@ -537,6 +508,12 @@ public class BookSubjectServiceImpl extends ServiceImpl<BookSubjectMapper, BookS
);
subjects = new ArrayList<>(setSubjects);
}
List<StatementSubjectBalance> listSubjectBalance=subjectBalanceService.selectSubjectBalance(bookId, null);
HashMap<String,StatementSubjectBalance> subjectBalanceMap = new HashMap<>();
for(StatementSubjectBalance sb : listSubjectBalance) {
subjectBalanceMap.put(sb.getSubjectCode(), sb);
}
List<TreeNode<String>> treeNode = new ArrayList<>();
subjects.forEach(temp -> {
@ -553,7 +530,10 @@ public class BookSubjectServiceImpl extends ServiceImpl<BookSubjectMapper, BookS
extraMap.put("direction", temp.getDirection());
extraMap.put("code", temp.getCode());
extraMap.put("auxiliary", temp.getAuxiliary());
extraMap.put("balance", temp.getBalance());
subjectBalanceMap.get(temp.getCode());
StatementSubjectBalance sb = subjectBalanceMap.get(temp.getCode());
extraMap.put("balance", (sb != null ) ? sb.getBalance():BigDecimal.ZERO);
//extraMap.put("balance", temp.getBalance());
extraMap.put("pinyinCode", temp.getPinyinCode());
extraMap.put("pinyinDisplayCode", temp.getPinyinDisplayCode());
extraMap.put("displayName", temp.getDisplayName());
@ -658,6 +638,14 @@ public class BookSubjectServiceImpl extends ServiceImpl<BookSubjectMapper, BookS
bookLqw.eq(BookSubject::getBookId, bookId);
bookLqw.eq(BookSubject::getDeleted, "n");
BookSubject bookSubject = bookSubjectMapper.selectOne(bookLqw);
List<String>subjectCodes = new ArrayList<>();
subjectCodes.add(subjectCode);
List<StatementSubjectBalance> listSubjectBalance = subjectBalanceService.selectSubjectBalance(bookId, subjectCodes);
if(CollectionUtils.isNotEmpty(listSubjectBalance) && listSubjectBalance.size()>0) {
bookSubject.setBalance(listSubjectBalance.get(0).getBalance());
}else {
bookSubject.setBalance(BigDecimal.ZERO);
}
return bookSubject;
}
@ -674,7 +662,25 @@ public class BookSubjectServiceImpl extends ServiceImpl<BookSubjectMapper, BookS
bookLqw.likeRight(BookSubject::getCode, subjectCode);
bookLqw.eq(BookSubject::getBookId, bookId);
bookLqw.eq(BookSubject::getDeleted, "n");
return bookSubjectMapper.selectList(bookLqw);
List<BookSubject> listSubject = bookSubjectMapper.selectList(bookLqw);
List<String>subjectCodes = new ArrayList<>();
subjectCodes.add(subjectCode);
List<StatementSubjectBalance> listSubjectBalance=subjectBalanceService.selectSubjectBalance(bookId, subjectCodes);
HashMap<String,StatementSubjectBalance> subjectBalanceMap = new HashMap<>();
for(StatementSubjectBalance sb : listSubjectBalance) {
subjectBalanceMap.put(sb.getSubjectCode(), sb);
}
for(BookSubject s : listSubject) {
StatementSubjectBalance sb = subjectBalanceMap.get(s.getCode());
if(sb != null) {
s.setBalance(sb.getBalance());
}else {
s.setBalance(BigDecimal.ZERO);
}
}
return listSubject;
}
@Override

View File

@ -106,7 +106,7 @@ public class StandardSubjectServiceImpl extends ServiceImpl<StandardSubjectMappe
extraMap.put("direction", temp.getDirection());
extraMap.put("code", temp.getCode());
extraMap.put("auxiliary", temp.getAuxiliary());
extraMap.put("balance", temp.getBalance());
//extraMap.put("balance", temp.getBalance());
extraMap.put("pinyinCode", temp.getPinyinCode());
extraMap.put("pinyinDisplayCode", temp.getPinyinDisplayCode());
extraMap.put("displayName", temp.getDisplayName());

View File

@ -44,6 +44,8 @@ import com.jinbooks.persistence.service.ConfigSysService;
import com.jinbooks.persistence.service.StatementSubjectBalanceService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -434,4 +436,15 @@ public class StatementSubjectBalanceServiceImpl implements StatementSubjectBalan
subjectBalanceMapper.insertBatch(subjectBalanceList);
return true;
}
@Override
public List<StatementSubjectBalance> selectSubjectBalance(String bookId, List<String> subjectCodes) {
String currentTerm = configSysService.getCurrentTerm(bookId);
LambdaQueryWrapper<StatementSubjectBalance> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StatementSubjectBalance::getBookId, bookId);
queryWrapper.eq(StatementSubjectBalance::getYearPeriod, currentTerm);
queryWrapper.eq(StatementSubjectBalance::getPeriodType, StatementPeriodTypeEnum.MONTH.getValue());
queryWrapper.in(CollectionUtils.isNotEmpty(subjectCodes),StatementSubjectBalance::getSubjectCode, subjectCodes);
return subjectBalanceMapper.selectList(queryWrapper);
}
}

View File

@ -977,25 +977,17 @@ public class VoucherServiceImpl extends ServiceImpl<VoucherMapper, Voucher> impl
.filter(auxiliary -> auxiliary.getVoucherItemId().equals(item.getId()))
.toList();
BookSubject setSubject = subjectMap.get(item.getSubjectId());
// 寻找上级节点,同步更新余额
List<String> subjectParentIds = Arrays.asList(setSubject.getIdPath().split("/"));
List<BookSubject> parentSubjects = bookSubjectService.listByIds(subjectParentIds);
BigDecimal balance = setSubject.getBalance();
if (balance == null) {
balance = BigDecimal.ZERO;
}
// 借方,更新科目余额和科目余额表
if (item.getDebitAmount() != null && item.getDebitAmount().compareTo(BigDecimal.ZERO) != 0) {
if (isCancel) {
subjectBalanceService.update(setSubject, item.getDebitAmount(),
StatementSymbolEnum.MINUS, SubjectDirectionEnum.DEBIT, auxiliaries,
DateUtils.format(item.getVoucherDate(), "yyyy-MM"));
balance = balance.subtract(item.getDebitAmount());
} else {
subjectBalanceService.update(setSubject, item.getDebitAmount(),
StatementSymbolEnum.PLUS, SubjectDirectionEnum.DEBIT, auxiliaries,
DateUtils.format(item.getVoucherDate(), "yyyy-MM"));
balance = balance.add(item.getDebitAmount());
}
}
// 贷方,更新科目余额和科目余额表
@ -1004,29 +996,14 @@ public class VoucherServiceImpl extends ServiceImpl<VoucherMapper, Voucher> impl
subjectBalanceService.update(setSubject, item.getCreditAmount(),
StatementSymbolEnum.PLUS, SubjectDirectionEnum.CREDIT, auxiliaries,
DateUtils.format(item.getVoucherDate(), "yyyy-MM"));
balance = balance.add(item.getCreditAmount());
} else {
subjectBalanceService.update(setSubject, item.getCreditAmount(),
StatementSymbolEnum.MINUS, SubjectDirectionEnum.CREDIT, auxiliaries,
DateUtils.format(item.getVoucherDate(), "yyyy-MM"));
balance = balance.subtract(item.getCreditAmount());
}
}
if (!isCancel) {
item.setSubjectBalance(balance);
}
// 更新科目余额
setSubject.setBalance(balance);
BigDecimal finalBalance = balance;
parentSubjects = parentSubjects.stream()
.filter(sb -> !sb.getId().equals(setSubject.getId()))
.peek(sb -> sb.setBalance(finalBalance)).toList();
bookSubjectService.updateBatchById(parentSubjects);
});
bookSubjectService.updateBatchById(booksSubjects);
}
}