wujianwei
6 天以前 849648e82e5dec96f9f30fcc9c9bd799268b1f4c
service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableBillManagementServiceImpl.java
@@ -4,6 +4,12 @@
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import com.ruoyi.cwgl.domain.*;
import com.ruoyi.cwgl.domain.vo.ReceivableBillAgingAnalysisVo;
import com.ruoyi.cwgl.domain.vo.ReceivableBillAccountAnalysisVo;
import com.ruoyi.cwgl.mapper.*;
import com.ruoyi.cwgl.service.IAgingLogService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Async;
@@ -15,10 +21,10 @@
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.core.service.BaseService;
import com.ruoyi.cwgl.mapper.ReceivableBillManagementMapper;
import com.ruoyi.cwgl.domain.ReceivableBillManagement;
import com.ruoyi.cwgl.service.IReceivableBillManagementService;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
/**
 * 应收账单管理Service业务层处理
@@ -33,6 +39,15 @@
    protected final Logger logger = LoggerFactory.getLogger(getClass());
    @Resource
    private ReceivableBillManagementMapper receivableBillManagementMapper;
    @Resource
    private ReceivableFeeManagementMapper receivableFeeManagementMapper;
    @Resource
    private ReceivableBillManagementLogMapper receivableBillManagementLogMapper;
    @Resource
    private AgingLogMapper agingLogMapper;
    @Resource
    private AccountLogMapper accountLogMapper;
    /**
@@ -90,6 +105,41 @@
            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
            return selectReceivableBillManagementList(receivableBillManagement);
        });
    }   /**
     * 查询应收账单管理列表 异步 导出
     *
     * @param receivableBillManagement 应收账单管理
     * @param exportKey 导出功能的唯一标识
     * @return 应收账单管理集合
     */
    @DataSource(DataSourceType.SLAVE)
    @Async
    @Override
    public void customerSummaryExport(ReceivableBillManagement receivableBillManagement,String exportKey) {
        super.export2(ReceivableBillCustomerSummary.class,exportKey,"应收账款分析管理",(pageNum)->{
            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
            return selectReceivableBillCustomerSummaryList(receivableBillManagement);
        });
    }  @DataSource(DataSourceType.SLAVE)
    @Async
    @Override
    public void agingAnalysisExport(ReceivableBillManagement receivableBillManagement,String exportKey) {
        super.export2(ReceivableBillAgingAnalysisVo.class,exportKey,"应收账款分析管理",(pageNum)->{
            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
            return selectReceivableBillAgingAnalysisList(receivableBillManagement);
        });
    }
    @Async
    @Override
    public void accountAnalysisExport(ReceivableBillManagement receivableBillManagement,String exportKey) {
        super.export2(ReceivableBillAccountAnalysisVo.class,exportKey,"应收账款分析管理",(pageNum)->{
            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
            return selectReceivableBillAccountAnalysisList(receivableBillManagement);
        });
    }
@@ -129,7 +179,54 @@
    public int updateReceivableBillManagement(ReceivableBillManagement receivableBillManagement)
    {
        receivableBillManagement.setUpdateTime(DateUtils.getNowDate());
        return receivableBillManagementMapper.updateReceivableBillManagement(receivableBillManagement);
        int result = receivableBillManagementMapper.updateReceivableBillManagement(receivableBillManagement);
        // 记录操作日志
        if (result > 0) {
            ReceivableBillManagementLog log = new ReceivableBillManagementLog();
            log.setBillId(receivableBillManagement.getId());
            log.setCreateBy(SecurityUtils.getUsername());
            log.setCreateTime(DateUtils.getNowDate());
            log.setOperation("修改应收账单,账单编号:" + receivableBillManagement.getSystemNo());
            receivableBillManagementLogMapper.insertReceivableBillManagementLog(log);
        }
        return result;
    } @Override
    public int aging(ReceivableBillManagement receivableBillManagement)
    {
        receivableBillManagement.setUpdateTime(DateUtils.getNowDate());
        int result = receivableBillManagementMapper.updateReceivableBillManagement(receivableBillManagement);
        // 记录操作日志
        if (result > 0) {
            AgingLog log = new AgingLog();
            log.setHeadId(receivableBillManagement.getId());
            log.setCreateBy(SecurityUtils.getUsername());
            log.setCreateTime(DateUtils.getNowDate());
            log.setOperation("编辑账龄分析信息");
            agingLogMapper.insertAgingLog(log);
        }
        return result;
    }
    @Override
    public int account(ReceivableBillManagement receivableBillManagement)
    {
        receivableBillManagement.setUpdateTime(DateUtils.getNowDate());
        int result = receivableBillManagementMapper.updateReceivableBillManagement(receivableBillManagement);
        // 记录操作日志
        if (result > 0) {
            AccountLog log = new AccountLog();
            log.setHeadId(receivableBillManagement.getId());
            log.setCreateBy(SecurityUtils.getUsername());
            log.setCreateTime(DateUtils.getNowDate());
            log.setOperation("编辑账款分析信息");
            accountLogMapper.insertAccountLog(log);
        }
        return result;
    }
    /**
@@ -179,4 +276,126 @@
    {
        return receivableBillManagementMapper.deleteReceivableBillManagementById(id);
    }
    /**
     * 作废应收账单管理记录
     *
     * @param id 应收账单管理ID
     * @return 结果
     */
    @Override
    public int voidReceivableBillManagement(Integer id) {
        // 1. 查询应收账单记录
        ReceivableBillManagement billManagement = receivableBillManagementMapper.selectReceivableBillManagementById(id);
        if (billManagement == null) {
            throw new ServiceException("应收账单记录不存在");
        }
        // 2. 判断状态是否为0(未结算),只有状态为0才能作废
        if (!"0".equals(billManagement.getStatus())) {
            throw new ServiceException("只有状态为未结算的账单才能作废");
        }
        // 3. 设置状态为作废
        billManagement.setStatus("2");
        billManagement.setUpdateTime(DateUtils.getNowDate());
        // 4. 更新应收账单记录
        int result = receivableBillManagementMapper.updateReceivableBillManagement(billManagement);
        // 5. 如果更新成功,清除关联应收费用的账单编号并更新状态
        if (result > 0) {
            // 获取账单系统编号
            String billSystemNo = billManagement.getSystemNo();
            if (billSystemNo != null && !billSystemNo.trim().isEmpty()) {
                // 查询关联该账单的应收费用记录
                ReceivableFeeManagement queryFee = new ReceivableFeeManagement();
                queryFee.setRelatedBillNo(billSystemNo);
                List<ReceivableFeeManagement> feeList = receivableFeeManagementMapper.selectReceivableFeeManagementList(queryFee);
                // 清除关联账单编号并将状态改为0(待生成账单)
                receivableFeeManagementMapper.updateReceivableFeeManagementByRelatedBillNo(billSystemNo);
            }
            // 记录作废操作日志
            ReceivableBillManagementLog log = new ReceivableBillManagementLog();
            log.setBillId(id);
            log.setCreateBy(SecurityUtils.getUsername());
            log.setCreateTime(DateUtils.getNowDate());
            log.setOperation("作废应收账单,账单编号:" + billManagement.getSystemNo());
            receivableBillManagementLogMapper.insertReceivableBillManagementLog(log);
        }
        return result;
    }
    /**
     * 根据系统编号查询应收账单管理
     *
     * @param systemNo 系统编号
     * @return 应收账单管理
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public ReceivableBillManagement selectReceivableBillManagementBySystemNo(String systemNo)
    {
        return receivableBillManagementMapper.selectReceivableBillManagementBySystemNo(systemNo);
    }
    /**
     * 查询应收账单客户汇总列表
     *
     * @param receivableBillManagement 查询条件
     * @return 应收账单客户汇总列表
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public List<ReceivableBillCustomerSummary> selectReceivableBillCustomerSummaryList(ReceivableBillManagement receivableBillManagement)
    {
        return receivableBillManagementMapper.selectReceivableBillCustomerSummaryList(receivableBillManagement);
    }
    /**
     * 查询应收账单账龄分析列表
     *
     * @param receivableBillManagement 查询条件
     * @return 应收账单账龄分析列表
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public List<ReceivableBillAgingAnalysisVo> selectReceivableBillAgingAnalysisList(ReceivableBillManagement receivableBillManagement)
    {
        // 直接查询数据库中的预计算账龄数据
        List<ReceivableBillAgingAnalysisVo> result = receivableBillManagementMapper.selectReceivableBillAgingAnalysisList(receivableBillManagement);
        return result;
    }
    /**
     * 批量更新应收账单账龄分析数据
     * 直接在数据库层面计算账龄分段,避免查询大量数据到应用层
     *
     * @return 更新的记录数
     */
    @Override
    public int batchUpdateAgingAnalysisData()
    {
        return receivableBillManagementMapper.batchUpdateAgingAnalysisData();
    }
    /**
     * 查询应收账单账款分析列表
     *
     * @param receivableBillManagement 查询条件
     * @return 应收账单账款分析列表
     */
    @DataSource(DataSourceType.SLAVE)
    @Override
    public List<ReceivableBillAccountAnalysisVo> selectReceivableBillAccountAnalysisList(ReceivableBillManagement receivableBillManagement)
    {
        // 直接查询数据库中的账款分析数据
        List<ReceivableBillAccountAnalysisVo> result = receivableBillManagementMapper.selectReceivableBillAccountAnalysisList(receivableBillManagement);
        return result;
    }
}