diff --git a/jinbooks-ui/package.json b/jinbooks-ui/package.json index b2e44a6..5402696 100644 --- a/jinbooks-ui/package.json +++ b/jinbooks-ui/package.json @@ -14,7 +14,7 @@ "@element-plus/icons-vue": "2.3.1", "@vueup/vue-quill": "1.2.0", "@vueuse/core": "10.11.0", - "axios": "0.28.1", + "axios": "0.29.0", "dayjs": "^1.11.13", "decimal.js": "^10.5.0", "echarts": "^5.6.0", @@ -48,7 +48,7 @@ "typescript": "^5.6.3", "unplugin-auto-import": "0.17.6", "unplugin-vue-setup-extend-plus": "1.0.1", - "vite": "5.3.2", + "vite": "5.4.19", "vite-plugin-compression": "0.5.1", "vite-plugin-svg-icons": "2.0.1" }, diff --git a/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/mapper/StatementSubjectBalanceMapper.java b/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/mapper/StatementSubjectBalanceMapper.java index ceaf0df..cbd6fb2 100644 --- a/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/mapper/StatementSubjectBalanceMapper.java +++ b/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/mapper/StatementSubjectBalanceMapper.java @@ -21,8 +21,9 @@ package com.jinbooks.persistence.mapper; import com.jinbooks.entity.statement.StatementSubjectBalance; import com.jinbooks.mapper.BaseMapperPlus; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; @Mapper public interface StatementSubjectBalanceMapper extends BaseMapperPlus { - } diff --git a/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/StatementSubjectBalanceService.java b/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/StatementSubjectBalanceService.java index 6c8e93f..99ff46f 100644 --- a/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/StatementSubjectBalanceService.java +++ b/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/StatementSubjectBalanceService.java @@ -32,6 +32,8 @@ import java.util.List; * 科目余额表业务接口 */ public interface StatementSubjectBalanceService { + StatementSubjectBalance getSubjectBalance(String bookId, String subjectCode); + boolean hasVoucher(String bookId, List codes); boolean hasVoucherByCodes(String bookId, List codes); diff --git a/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/impl/SettlementCarryServiceImpl.java b/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/impl/SettlementCarryServiceImpl.java index 9390e2b..bbc0ef0 100644 --- a/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/impl/SettlementCarryServiceImpl.java +++ b/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/impl/SettlementCarryServiceImpl.java @@ -1,12 +1,12 @@ /* * Copyright [2025] [JinBooks of copyright http://www.jinbooks.com] - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,7 +14,7 @@ * limitations under the License. * */ - + package com.jinbooks.persistence.service.impl; @@ -29,6 +29,7 @@ import com.jinbooks.entity.book.BookSubject; import com.jinbooks.entity.book.Settlement; import com.jinbooks.entity.book.SettlementCarryforward; import com.jinbooks.entity.book.vo.SettlementCarryforwardVo; +import com.jinbooks.entity.statement.StatementSubjectBalance; import com.jinbooks.entity.voucher.VoucherTemplate; import com.jinbooks.entity.voucher.VoucherTemplateItem; import com.jinbooks.entity.voucher.dto.GenerateVoucherDto; @@ -61,9 +62,9 @@ import org.springframework.stereotype.Service; @Slf4j @Service public class SettlementCarryServiceImpl extends ServiceImpl implements SettlementCarryService { - private static final Logger logger = LoggerFactory.getLogger(SettlementCarryServiceImpl.class); + private static final Logger logger = LoggerFactory.getLogger(SettlementCarryServiceImpl.class); - @Autowired + @Autowired IdentifierGenerator identifierGenerator; @Autowired @@ -77,7 +78,7 @@ public class SettlementCarryServiceImpl extends ServiceImpl> fetchCarry(VoucherTemplatePageDto dto) { - dto.setCategory(1);//期末处理模板 + @Autowired + StatementSubjectBalanceService statementSubjectBalanceService; + + public Message> fetchCarry(VoucherTemplatePageDto dto) { + dto.setCategory(1);//期末处理模板 Page page = settlementCarryforwardMapper.pageList(dto.build(), dto); - if(page.getTotal() <= 0) { - Book book = bookMapper.selectById(dto.getRelatedId()); - voucherTemplateService.insertBookTemplate(dto.getRelatedId(),book.getStandardId()); + if (page.getTotal() <= 0) { + Book book = bookMapper.selectById(dto.getRelatedId()); + voucherTemplateService.insertBookTemplate(dto.getRelatedId(), book.getStandardId()); //重新查询数据 page = settlementCarryforwardMapper.pageList(dto.build(), dto); } - return Message.ok(page); - } + return Message.ok(page); + } - @Override - public Message generateVoucher(GenerateVoucherDto dto) { - logger.debug("GenerateVoucherDto {}",dto); - String bookId = dto.getBookId(); - Book book = bookMapper.selectById(bookId); - String currentTerm = configSysService.getCurrentTerm(bookId); - VoucherTemplate voucherTemplate = voucherTemplateMapper.selectById(dto.getTemplateId()); - logger.debug("voucherTemplate {}",voucherTemplate); - LambdaQueryWrapper itemLqw = Wrappers.lambdaQuery(); + @Override + public Message generateVoucher(GenerateVoucherDto dto) { + logger.debug("GenerateVoucherDto {}", dto); + String bookId = dto.getBookId(); + Book book = bookMapper.selectById(bookId); + String currentTerm = configSysService.getCurrentTerm(bookId); + VoucherTemplate voucherTemplate = voucherTemplateMapper.selectById(dto.getTemplateId()); + logger.debug("voucherTemplate {}", voucherTemplate); + LambdaQueryWrapper itemLqw = Wrappers.lambdaQuery(); itemLqw.eq(VoucherTemplateItem::getRelatedId, voucherTemplate.getRelatedId()); itemLqw.eq(VoucherTemplateItem::getTemplateId, voucherTemplate.getId()); List items = voucherTemplateItemMapper.selectList(itemLqw); - logger.debug("VoucherTemplateItems {}",items); + logger.debug("VoucherTemplateItems {}", items); BigDecimal debitAmount = BigDecimal.ZERO; BigDecimal creditAmount = BigDecimal.ZERO; @@ -125,85 +129,83 @@ public class SettlementCarryServiceImpl extends ServiceImpl voucherItems = new ArrayList<>(); - if(voucherTemplate.getCode().startsWith("qm_jz_")) { - MapitemsMap = new HashMap<>(); - for(VoucherTemplateItem item : items) { - itemsMap.put(item.getSubjectCode(), item); - } - //凭证 不转结 - voucherChangeDto.setCarryForward("y"); - - if(voucherTemplate.getCode().equals("qm_jz_sr")){//结转收入 - //贷 - //主营业务收入 - addVoucherItems(bookId,"6001",voucherItems,itemsMap.get("6001")); - //其他业务收入 - addVoucherItems(bookId,"6301",voucherItems,itemsMap.get("6301")); - //营业外收入 - addVoucherItems(bookId,"6051",voucherItems,itemsMap.get("6051")); - for(VoucherItemChangeDto vt :voucherItems) { - debitAmount = debitAmount.add(vt.getDebitAmount()); - } - creditAmount = debitAmount ; - //借 - //本年利润 - voucherItems.add(createVoucherItemDto(bookId,itemsMap.get("4103"),debitAmount)); - }else if(voucherTemplate.getCode().equals("qm_jz_cbfy")){//结转成本 - //主营业务成本 - addVoucherItems(bookId,"6401",voucherItems,itemsMap.get("6401")); - //营业税金及附加 - addVoucherItems(bookId,"6405",voucherItems,itemsMap.get("6405")); - //销售费用 - addVoucherItems(bookId,"6601",voucherItems,itemsMap.get("6601")); - //管理费用 - addVoucherItems(bookId,"6602",voucherItems,itemsMap.get("6602")); - //财务费用 - addVoucherItems(bookId,"6603",voucherItems,itemsMap.get("6603")); - //营业外支出 - addVoucherItems(bookId,"6711",voucherItems,itemsMap.get("6711")); - for(VoucherItemChangeDto vt :voucherItems) { - creditAmount = creditAmount.add(vt.getCreditAmount()); - } - debitAmount = creditAmount; - //本年利润 - voucherItems.add(createVoucherItemDto(bookId,itemsMap.get("4103"),debitAmount)); - }else if(voucherTemplate.getCode().equals("qm_jz_sds")){//结转所得税 - //所得税 - addVoucherItems(bookId,"6801",voucherItems,itemsMap.get("6801")); - for(VoucherItemChangeDto vt :voucherItems) { - creditAmount = creditAmount.add(vt.getCreditAmount()); - } - debitAmount = creditAmount; - //本年利润 - voucherItems.add(createVoucherItemDto(bookId,itemsMap.get("4103"),debitAmount)); - }else if(voucherTemplate.getCode().equals("qm_jz_bnlr")){//年末 结转本年利润 - if(month == 12) { - //本年利润 - BookSubject bnlrSubject = bookSubjectService.selectSubject(bookId,"4103"); - voucherItems.add(createVoucherItemDto(bookId,itemsMap.get("4103"),bnlrSubject.getBalance())); - //未分配利润 - BookSubject wfplrSubject = bookSubjectService.selectSubject(bookId,"410406"); - voucherItems.add(createVoucherItemDto(bookId,itemsMap.get("410406"),wfplrSubject.getBalance())); - - }else { - return Message.failed("非年末,无需结转本年利润"); - } - } - }else { - for(VoucherTemplateItem item : items) { - voucherItems.add(createVoucherItemDto(bookId,item,BigDecimal.ZERO)); - } + if (voucherTemplate.getCode().startsWith("qm_jz_")) { + Map itemsMap = new HashMap<>(); + for (VoucherTemplateItem item : items) { + itemsMap.put(item.getSubjectCode(), item); + } + //凭证 不转结 + voucherChangeDto.setCarryForward("y"); + + if (voucherTemplate.getCode().equals("qm_jz_sr")) {//结转收入 + //贷 + //主营业务收入 + addVoucherItems(bookId, "6001", voucherItems, itemsMap.get("6001")); + //其他业务收入 + addVoucherItems(bookId, "6301", voucherItems, itemsMap.get("6301")); + //营业外收入 + addVoucherItems(bookId, "6051", voucherItems, itemsMap.get("6051")); + for (VoucherItemChangeDto vt : voucherItems) { + debitAmount = debitAmount.add(vt.getDebitAmount()); + } + creditAmount = debitAmount; + //借 + //本年利润 + voucherItems.add(createVoucherItemDto(bookId, itemsMap.get("4103"), debitAmount)); + } else if (voucherTemplate.getCode().equals("qm_jz_cbfy")) {//结转成本 + //主营业务成本 + addVoucherItems(bookId, "6401", voucherItems, itemsMap.get("6401")); + //营业税金及附加 + addVoucherItems(bookId, "6405", voucherItems, itemsMap.get("6405")); + //销售费用 + addVoucherItems(bookId, "6601", voucherItems, itemsMap.get("6601")); + //管理费用 + addVoucherItems(bookId, "6602", voucherItems, itemsMap.get("6602")); + //财务费用 + addVoucherItems(bookId, "6603", voucherItems, itemsMap.get("6603")); + //营业外支出 + addVoucherItems(bookId, "6711", voucherItems, itemsMap.get("6711")); + for (VoucherItemChangeDto vt : voucherItems) { + creditAmount = creditAmount.add(vt.getCreditAmount()); + } + debitAmount = creditAmount; + //本年利润 + voucherItems.add(createVoucherItemDto(bookId, itemsMap.get("4103"), debitAmount)); + } else if (voucherTemplate.getCode().equals("qm_jz_sds")) {//结转所得税 + //所得税 + addVoucherItems(bookId, "6801", voucherItems, itemsMap.get("6801")); + for (VoucherItemChangeDto vt : voucherItems) { + creditAmount = creditAmount.add(vt.getCreditAmount()); + } + debitAmount = creditAmount; + //本年利润 + voucherItems.add(createVoucherItemDto(bookId, itemsMap.get("4103"), debitAmount)); + } else if (voucherTemplate.getCode().equals("qm_jz_bnlr")) {//年末 结转本年利润 + if (month == 12) { + StatementSubjectBalance subjectBalance = statementSubjectBalanceService.getSubjectBalance(bookId, "4103"); + voucherItems.add(createVoucherItemDto(bookId, itemsMap.get("4103"), subjectBalance.getBalance())); + //未分配利润 + subjectBalance = statementSubjectBalanceService.getSubjectBalance(bookId, "410406"); + voucherItems.add(createVoucherItemDto(bookId, itemsMap.get("410406"), subjectBalance.getBalance())); + } else { + return Message.failed("非年末,无需结转本年利润"); + } + } + } else { + for (VoucherTemplateItem item : items) { + voucherItems.add(createVoucherItemDto(bookId, item, BigDecimal.ZERO)); + } } voucherChangeDto.setItems(voucherItems); //草稿阶段 voucherChangeDto.setStatus(VoucherStatusEnum.DRAFT.getValue()); - log.debug("voucherChangeDto {}",voucherChangeDto); + log.debug("voucherChangeDto {}", voucherChangeDto); //保持凭证 voucherService.save(voucherChangeDto); @@ -217,45 +219,45 @@ public class SettlementCarryServiceImpl extends ServiceImpl items,VoucherTemplateItem templateItem) { - List subjectList = bookSubjectService.selectSubjectAndChild(bookId, subjectCode); - for(BookSubject s : subjectList ) { - if(isLeafSubject(s,subjectList) && s.getBalance().compareTo(BigDecimal.ZERO) != 0) { - items.add(createVoucherItemDtoBySubject(bookId,s,templateItem,s.getBalance().abs())); - } - } - return true; - } - - private boolean isLeafSubject(BookSubject subject,List subjectList) { - boolean isLeaf = true; - //仅有一条数据 - if(subjectList.size() == 1) { - return true; - } - //多条数据 - for(BookSubject s : subjectList ) { - //跳过自己 - if(subject.getCode().equals(s.getCode())) { - continue; - } - //有节点以当前节点开头认为不是叶节点 - if(s.getCode().startsWith(subject.getCode())) { - isLeaf = false; - break; - } - } - return isLeaf; - } + return Message.ok(voucherChangeDto.getId()); + } + + private boolean addVoucherItems(String bookId, String subjectCode, List items, VoucherTemplateItem templateItem) { + List subjectList = bookSubjectService.selectSubjectAndChild(bookId, subjectCode); + for (BookSubject s : subjectList) { + if (isLeafSubject(s, subjectList) && s.getBalance().compareTo(BigDecimal.ZERO) != 0) { + items.add(createVoucherItemDtoBySubject(bookId, s, templateItem, s.getBalance().abs())); + } + } + return true; + } + + private boolean isLeafSubject(BookSubject subject, List subjectList) { + boolean isLeaf = true; + //仅有一条数据 + if (subjectList.size() == 1) { + return true; + } + //多条数据 + for (BookSubject s : subjectList) { + //跳过自己 + if (subject.getCode().equals(s.getCode())) { + continue; + } + //有节点以当前节点开头认为不是叶节点 + if (s.getCode().startsWith(subject.getCode())) { + isLeaf = false; + break; + } + } + return isLeaf; + } - /** + /** * Creates the voucher change dto with common fields */ - private VoucherChangeDto createVoucherChangeDto(Book book, String bookId,String wordHead, + private VoucherChangeDto createVoucherChangeDto(Book book, String bookId, String wordHead, Date voucherDate, Integer year, Integer month, BigDecimal amount) { Integer wordNum = voucherService.getAbleWordNum(bookId, wordHead, null, null).getData(); @@ -278,8 +280,8 @@ public class SettlementCarryServiceImpl extends ServiceImpl delete(String bookId, String voucherId) { - LambdaQueryWrapper carryLqw = Wrappers.lambdaQuery(); - carryLqw.eq(SettlementCarryforward::getBookId, bookId); - carryLqw.eq(SettlementCarryforward::getVoucherId, voucherId); - SettlementCarryforward settlementCarryforward = settlementCarryforwardMapper.selectOne(carryLqw); - ArrayList voucherIds = new ArrayList(); - voucherIds.add(settlementCarryforward.getVoucherId()); - voucherService.delete(voucherIds, bookId); - - settlementCarryforwardMapper.delete(carryLqw); - return null; - } + @Override + public Message delete(String bookId, String voucherId) { + LambdaQueryWrapper carryLqw = Wrappers.lambdaQuery(); + carryLqw.eq(SettlementCarryforward::getBookId, bookId); + carryLqw.eq(SettlementCarryforward::getVoucherId, voucherId); + SettlementCarryforward settlementCarryforward = settlementCarryforwardMapper.selectOne(carryLqw); + ArrayList voucherIds = new ArrayList(); + voucherIds.add(settlementCarryforward.getVoucherId()); + voucherService.delete(voucherIds, bookId); + + settlementCarryforwardMapper.delete(carryLqw); + return null; + } } diff --git a/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/impl/StatementSubjectBalanceServiceImpl.java b/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/impl/StatementSubjectBalanceServiceImpl.java index 44f15d8..5cf5bd9 100644 --- a/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/impl/StatementSubjectBalanceServiceImpl.java +++ b/jinbooks/jinbooks-persistence/src/main/java/com/jinbooks/persistence/service/impl/StatementSubjectBalanceServiceImpl.java @@ -66,6 +66,14 @@ public class StatementSubjectBalanceServiceImpl implements StatementSubjectBalan private final IdentifierGenerator identifierGenerator; private final VoucherItemMapper voucherItemMapper; + @Override + public StatementSubjectBalance getSubjectBalance(String bookId, String subjectCode) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(StatementSubjectBalance::getBookId, bookId); + queryWrapper.eq(StatementSubjectBalance::getSubjectCode, subjectCode); + return subjectBalanceMapper.selectOne(queryWrapper); + } + /** * 判断科目是否有凭证 *