package com.ruoyi.cwgl.service.impl;
|
|
import java.util.List;
|
|
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;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import com.ruoyi.common.utils.PageUtils;
|
import com.ruoyi.common.constant.Constants;
|
import com.ruoyi.common.annotation.DataSource;
|
import com.ruoyi.common.enums.DataSourceType;
|
import com.ruoyi.common.core.service.BaseService;
|
|
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业务层处理
|
*
|
* @author ruoyi
|
* @date 2025-12-17
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class ReceivableBillManagementServiceImpl extends BaseService<ReceivableBillManagementMapper, ReceivableBillManagement> implements IReceivableBillManagementService
|
{
|
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;
|
|
|
/**
|
* 查询应收账单管理
|
*
|
* @param id 应收账单管理ID
|
* @return 应收账单管理
|
*/
|
@DataSource(DataSourceType.SLAVE)
|
@Override
|
public ReceivableBillManagement selectReceivableBillManagementById(Integer id)
|
{
|
return receivableBillManagementMapper.selectReceivableBillManagementById(id);
|
}
|
|
/**
|
* 查询应收账单管理 记录数
|
*
|
* @param receivableBillManagement 应收账单管理
|
* @return 应收账单管理集合
|
*/
|
@DataSource(DataSourceType.SLAVE)
|
@Override
|
public int selectReceivableBillManagementCount(ReceivableBillManagement receivableBillManagement)
|
{
|
return receivableBillManagementMapper.selectReceivableBillManagementCount(receivableBillManagement);
|
}
|
|
/**
|
* 查询应收账单管理列表
|
*
|
* @param receivableBillManagement 应收账单管理
|
* @return 应收账单管理
|
*/
|
@DataSource(DataSourceType.SLAVE)
|
@Override
|
public List<ReceivableBillManagement> selectReceivableBillManagementList(ReceivableBillManagement receivableBillManagement)
|
{
|
return receivableBillManagementMapper.selectReceivableBillManagementList(receivableBillManagement);
|
}
|
|
/**
|
* 查询应收账单管理列表 异步 导出
|
*
|
* @param receivableBillManagement 应收账单管理
|
* @param exportKey 导出功能的唯一标识
|
* @return 应收账单管理集合
|
*/
|
@DataSource(DataSourceType.SLAVE)
|
@Async
|
@Override
|
public void export(ReceivableBillManagement receivableBillManagement,String exportKey) {
|
|
super.export(ReceivableBillManagement.class,exportKey,"receivableBillManagementData",(pageNum)->{
|
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);
|
});
|
}
|
|
|
/**
|
* 新增应收账单管理
|
*
|
* @param receivableBillManagement 应收账单管理
|
* @return 结果
|
*/
|
@Override
|
public int insertReceivableBillManagement(ReceivableBillManagement receivableBillManagement)
|
{
|
receivableBillManagement.setCreateTime(DateUtils.getNowDate());
|
return receivableBillManagementMapper.insertReceivableBillManagement(receivableBillManagement);
|
}
|
|
/**
|
* 新增应收账单管理[批量]
|
*
|
* @param receivableBillManagements 应收账单管理
|
* @return 结果
|
*/
|
@Override
|
public int insertReceivableBillManagementBatch(List<ReceivableBillManagement> receivableBillManagements)
|
{
|
int rows = receivableBillManagementMapper.insertReceivableBillManagementBatch(receivableBillManagements);
|
return rows;
|
}
|
|
/**
|
* 修改应收账单管理
|
*
|
* @param receivableBillManagement 应收账单管理
|
* @return 结果
|
*/
|
@Override
|
public int updateReceivableBillManagement(ReceivableBillManagement receivableBillManagement)
|
{
|
receivableBillManagement.setUpdateTime(DateUtils.getNowDate());
|
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;
|
}
|
|
/**
|
* 修改应收账单管理[批量]
|
*
|
* @param receivableBillManagements 应收账单管理
|
* @return 结果
|
*/
|
@Override
|
public int updateReceivableBillManagementBatch(List<ReceivableBillManagement> receivableBillManagements){
|
return receivableBillManagementMapper.updateReceivableBillManagementBatch(receivableBillManagements);
|
}
|
|
/**
|
* 删除应收账单管理对象
|
*
|
* @param ids 需要删除的数据ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteReceivableBillManagementByIds(String ids)
|
{
|
return deleteReceivableBillManagementByIds(Convert.toIntArray(ids));
|
}
|
|
/**
|
* 删除应收账单管理对象
|
*
|
*
|
* @param ids 需要删除的数据ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteReceivableBillManagementByIds(Integer[] ids)
|
{
|
return receivableBillManagementMapper.deleteReceivableBillManagementByIds(ids);
|
}
|
|
/**
|
* 删除应收账单管理信息
|
*
|
* @param id 应收账单管理ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteReceivableBillManagementById(Integer id)
|
{
|
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);
|
try {
|
log.setCreateBy(SecurityUtils.getUsername());
|
} catch (Exception e) {
|
// 远程调用时没有登录信息,使用api作为创建人
|
log.setCreateBy("api");
|
}
|
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;
|
}
|
}
|