package com.ruoyi.account.service.impl.sales; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.bean.dto.sales.AccountSalesCollectionDto; import com.ruoyi.account.bean.vo.sales.AccountSalesCollectionVo; import com.ruoyi.account.bean.vo.sales.SalesOutboundVo; import com.ruoyi.account.mapper.AccountStatementDetailsMapper; import com.ruoyi.account.mapper.sales.AccountSalesCollectionMapper; import com.ruoyi.account.pojo.AccountStatementDetails; import com.ruoyi.account.pojo.sales.AccountSalesCollection; import com.ruoyi.account.service.sales.AccountSalesCollectionService; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.List; import java.util.Random; /** *

* 财务管理--收款单 服务实现类 *

* * @author 芯导软件(江苏)有限公司 * @since 2026-05-18 03:49:56 */ @Service @RequiredArgsConstructor public class AccountSalesCollectionServiceImpl extends ServiceImpl implements AccountSalesCollectionService { private final AccountSalesCollectionMapper accountSalesCollectionMapper; private final AccountStatementDetailsMapper accountStatementDetailsMapper; private static final DateTimeFormatter CODE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyMMddHHmmss"); @Override public IPage listPageAccountSalesCollection(Page page, AccountSalesCollectionDto accountSalesCollectionDto) { return accountSalesCollectionMapper.listPageAccountSalesCollection(page, accountSalesCollectionDto); } @Override public boolean addAccountSalesCollection(AccountSalesCollection accountSalesCollection) { if (StringUtils.isEmpty(accountSalesCollection.getCollectionNumber())) { accountSalesCollection.setCollectionNumber(genAccountSalesCollectionNo()); } String stockOutRecordIds = accountSalesCollection.getStockOutRecordIds(); if (stockOutRecordIds != null && !stockOutRecordIds.isEmpty()) { List ids = Arrays.stream(stockOutRecordIds.split(",")) .map(Long::valueOf) .toList(); if (accountSalesCollectionMapper.existsByStockOutRecordId(ids)){ throw new ServiceException("存在重复的出库单"); } } return save(accountSalesCollection); } @Override public void exportAccountSalesCollection(HttpServletResponse response, AccountSalesCollectionDto accountSalesCollectionDto) { List list = accountSalesCollectionMapper.listPageAccountSalesCollection(new Page(1,-1),accountSalesCollectionDto).getRecords(); ExcelUtil util = new ExcelUtil<>(AccountSalesCollectionVo.class); util.exportExcel(response, list , "收款单"); } @Override public boolean deleteAccountSalesCollection(List ids) { //如果该收款单已经生成对账单则无法删除 List accountSalesCollections = accountSalesCollectionMapper.selectByIds(ids); List strings = accountSalesCollections.stream().map(AccountSalesCollection::getCollectionNumber).toList(); List accountStatementDetails = accountStatementDetailsMapper.selectList(Wrappers.lambdaQuery() .in(AccountStatementDetails::getReceiptNumber, strings)); if (CollectionUtils.isNotEmpty(accountStatementDetails)){ throw new ServiceException("该收款单已经生成对账单,无法删除"); } return removeByIds(ids); } @Override public List getOutboundBatchesByCustomer(Integer customerId) { return accountSalesCollectionMapper.getOutboundBatchesByCustomer(customerId); } private String genAccountSalesCollectionNo() { return "SK" + LocalDateTime.now().format(CODE_TIME_FORMATTER) + new Random().nextInt(10); } }