package cn.iocoder.yudao.module.finance.service.voucher; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.finance.controller.admin.voucher.vo.FinVoucherPageReqVO; import cn.iocoder.yudao.module.finance.controller.admin.voucher.vo.FinVoucherSaveReqVO; import cn.iocoder.yudao.module.finance.dal.dataobject.voucher.FinVoucherDO; import cn.iocoder.yudao.module.finance.dal.dataobject.voucher.FinVoucherEntryDO; import jakarta.validation.Valid; import java.time.LocalDate; import java.util.Collection; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMultiMap; /** * 记账凭证 Service 接口 * * @author 超级管理员 */ public interface FinVoucherService { /** * 创建记账凭证 * * @param createReqVO 创建信息 * @return 凭证编号 */ Long createVoucher(@Valid FinVoucherSaveReqVO createReqVO); /** * 更新记账凭证 * * 仅未过账的凭证允许修改;修改时会整表重建凭证分录 * * @param updateReqVO 更新信息 */ void updateVoucher(@Valid FinVoucherSaveReqVO updateReqVO); /** * 删除记账凭证 * * @param id 凭证编号 */ void deleteVoucher(Long id); /** * 批量删除记账凭证 * * @param ids 凭证编号数组 */ void deleteVoucherList(List ids); /** * 凭证过账:未过账 -> 已过账 * * @param id 凭证编号 */ void postVoucher(Long id); /** * 凭证作废:未过账 -> 已作废 * * @param id 凭证编号 */ void cancelVoucher(Long id); /** * 获得记账凭证 * * @param id 凭证编号 * @return 记账凭证 */ FinVoucherDO getVoucher(Long id); /** * 获得记账凭证分页 * * @param pageReqVO 分页查询 * @return 记账凭证分页 */ PageResult getVoucherPage(FinVoucherPageReqVO pageReqVO); /** * 获得指定编号的记账凭证列表 * * @param ids 凭证编号数组 * @return 记账凭证列表 */ List getVoucherList(Collection ids); /** * 获得指定日期区间的记账凭证列表 * * @param startDate 开始日期(含) * @param endDate 结束日期(含) * @return 记账凭证列表 */ List getVoucherListByDateBetween(LocalDate startDate, LocalDate endDate); /** * 获得指定凭证的分录列表(按行号升序) * * @param voucherId 凭证编号 * @return 分录列表 */ List getVoucherEntryListByVoucherId(Long voucherId); /** * 获得指定凭证的分录 Map(key 为凭证编号) * * @param voucherIds 凭证编号数组 * @return 分录 Map */ default Map> getVoucherEntryMap(Collection voucherIds) { List list = getVoucherEntryListByVoucherIds(voucherIds); return convertMultiMap(list, FinVoucherEntryDO::getVoucherId); } /** * 获得指定凭证的分录列表 * * @param voucherIds 凭证编号数组 * @return 分录列表 */ List getVoucherEntryListByVoucherIds(Collection voucherIds); }