package com.ruoyi.cwgl.service.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.DateUtils; import javax.annotation.Resource; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.cwgl.domain.InvoiceDetail; 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.mapper.InvoiceManageMapper; import com.ruoyi.cwgl.domain.InvoiceManage; import com.ruoyi.cwgl.domain.InvoiceManageLog; import com.ruoyi.cwgl.service.IInvoiceManageService; import com.ruoyi.cwgl.service.IInvoiceManageLogService; import com.ruoyi.common.core.text.Convert; /** * 发票管理Service业务层处理 * * @author ruoyi * @date 2025-12-26 */ @Service @Transactional(rollbackFor = Exception.class) public class InvoiceManageServiceImpl extends BaseService implements IInvoiceManageService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private InvoiceManageMapper invoiceManageMapper; @Resource private IInvoiceManageLogService invoiceManageLogService; /** * 查询发票管理 * * @param id 发票管理ID * @return 发票管理 */ @DataSource(DataSourceType.SLAVE) @Override public InvoiceManage selectInvoiceManageById(Integer id) { return invoiceManageMapper.selectInvoiceManageById(id); } /** * 查询发票管理 记录数 * * @param invoiceManage 发票管理 * @return 发票管理集合 */ @DataSource(DataSourceType.SLAVE) @Override public int selectInvoiceManageCount(InvoiceManage invoiceManage) { return invoiceManageMapper.selectInvoiceManageCount(invoiceManage); } /** * 查询发票管理列表 * * @param invoiceManage 发票管理 * @return 发票管理 */ @DataSource(DataSourceType.SLAVE) @Override public List selectInvoiceManageList(InvoiceManage invoiceManage) { return invoiceManageMapper.selectInvoiceManageList(invoiceManage); } /** * 查询发票管理列表 异步 导出 * * @param invoiceManage 发票管理 * @param exportKey 导出功能的唯一标识 * @return 发票管理集合 */ @DataSource(DataSourceType.SLAVE) @Async @Override public void export(InvoiceManage invoiceManage,String exportKey) { super.export(InvoiceManage.class,exportKey,"invoiceManageData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectInvoiceManageList(invoiceManage); }); } /** * 新增发票管理 * * @param invoiceManage 发票管理 * @return 结果 */ @Override public int insertInvoiceManage(InvoiceManage invoiceManage) { invoiceManage.setCreateTime(DateUtils.getNowDate()); int rows = invoiceManageMapper.insertInvoiceManage(invoiceManage); insertInvoiceDetail(invoiceManage); // 记录新增发票管理日志 if (rows > 0) { recordInvoiceManageLog(invoiceManage, "新增发票管理"); } return rows; } /** * 新增发票管理[批量] * * @param invoiceManages 发票管理 * @return 结果 */ @Override public int insertInvoiceManageBatch(List invoiceManages) { int rows = invoiceManageMapper.insertInvoiceManageBatch(invoiceManages); // 记录批量新增发票管理日志 if (rows > 0 && invoiceManages != null && !invoiceManages.isEmpty()) { for (InvoiceManage invoiceManage : invoiceManages) { recordInvoiceManageLog(invoiceManage, "批量新增发票管理"); } } return rows; } /** * 修改发票管理 * * @param invoiceManage 发票管理 * @return 结果 */ @Transactional @Override public int updateInvoiceManage(InvoiceManage invoiceManage) { invoiceManage.setUpdateTime(DateUtils.getNowDate()); invoiceManageMapper.deleteInvoiceDetailByInvoiceManageId(invoiceManage.getId()); insertInvoiceDetail(invoiceManage); int rows = invoiceManageMapper.updateInvoiceManage(invoiceManage); // 记录修改发票管理日志 if (rows > 0) { recordInvoiceManageLog(invoiceManage, "修改发票管理"); } return rows; } /** * 修改发票管理[批量] * * @param invoiceManages 发票管理 * @return 结果 */ @Override public int updateInvoiceManageBatch(List invoiceManages){ int rows = invoiceManageMapper.updateInvoiceManageBatch(invoiceManages); // 记录批量修改发票管理日志 if (rows > 0 && invoiceManages != null && !invoiceManages.isEmpty()) { for (InvoiceManage invoiceManage : invoiceManages) { recordInvoiceManageLog(invoiceManage, "批量修改发票管理"); } } return rows; } /** * 删除发票管理对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Transactional @Override public int deleteInvoiceManageByIds(String ids) { return deleteInvoiceManageByIds(Convert.toIntArray(ids)); } /** * 删除发票管理对象 * * * @param ids 需要删除的数据ID * @return 结果 */ @Transactional @Override public int deleteInvoiceManageByIds(Integer[] ids) { invoiceManageMapper.deleteInvoiceDetailByInvoiceManageIds(ids); return invoiceManageMapper.deleteInvoiceManageByIds(ids); } /** * 删除发票管理信息 * * @param id 发票管理ID * @return 结果 */ @Override public int deleteInvoiceManageById(Integer id) { invoiceManageMapper.deleteInvoiceDetailByInvoiceManageId(id); return invoiceManageMapper.deleteInvoiceManageById(id); } /** * 新增发票明细信息 * * @param invoiceManage 发票管理对象 */ @Override public void insertInvoiceDetail(InvoiceManage invoiceManage) { List invoiceDetailList = invoiceManage.getInvoiceDetailList(); Integer id = invoiceManage.getId(); if (StringUtils.isNotNull(invoiceDetailList)) { List list = new ArrayList(); for (InvoiceDetail invoiceDetail : invoiceDetailList) { invoiceDetail.setInvoiceManageId(id); invoiceDetail.setCreateTime(new Date()); list.add(invoiceDetail); } if (list.size() > 0) { invoiceManageMapper.batchInvoiceDetail(list); } } } /** * 记录发票管理操作日志 * * @param invoiceManage 发票管理对象 * @param operationType 操作类型 */ private void recordInvoiceManageLog(InvoiceManage invoiceManage, String operationType) { try { InvoiceManageLog log = new InvoiceManageLog(); log.setInvoiceManageId(invoiceManage.getId()); log.setOperator(SecurityUtils.getUsername()); log.setOperationTime(DateUtils.getNowDate()); // 构建操作描述,包含开票金额、关联账单编号和对应开票金额 StringBuilder descBuilder = new StringBuilder(); descBuilder.append(operationType).append(": "); if (invoiceManage.getInvoiceAmount() != null) { descBuilder.append("开票金额=").append(invoiceManage.getInvoiceAmount()).append("; "); } // 获取关联账单信息 if (invoiceManage.getInvoiceDetailList() != null && !invoiceManage.getInvoiceDetailList().isEmpty()) { descBuilder.append("关联账单信息: "); for (InvoiceDetail detail : invoiceManage.getInvoiceDetailList()) { if (detail.getReceivableBillNo() != null) { descBuilder.append("账单编号=").append(detail.getReceivableBillNo()); } if (detail.getCurrentBilledAmount() != null) { descBuilder.append(", 本次开票金额=").append(detail.getCurrentBilledAmount()); } descBuilder.append("; "); } } log.setOperationDesc(descBuilder.toString()); log.setCreateTime(DateUtils.getNowDate()); invoiceManageLogService.insertInvoiceManageLog(log); } catch (Exception e) { logger.error("记录发票管理操作日志失败: {}", e.getMessage()); } } @Override public AjaxResult applyInvoice(Integer id) { return AjaxResult.success("申请开票成功"); } /** * 记录申请开票日志 * * @param invoiceManage 发票管理对象 */ private void recordApplyInvoiceLog(InvoiceManage invoiceManage) { try { InvoiceManageLog log = new InvoiceManageLog(); log.setInvoiceManageId(invoiceManage.getId()); log.setOperator(SecurityUtils.getUsername()); log.setOperationTime(new java.util.Date()); // 构建操作描述,包含开票金额、关联账单编号和对应开票金额 StringBuilder descBuilder = new StringBuilder(); descBuilder.append("申请开票: "); if (invoiceManage.getInvoiceAmount() != null) { descBuilder.append("开票金额=").append(invoiceManage.getInvoiceAmount()).append("; "); } // 获取关联账单信息 if (invoiceManage.getInvoiceDetailList() != null && !invoiceManage.getInvoiceDetailList().isEmpty()) { descBuilder.append("关联账单信息: "); for (com.ruoyi.cwgl.domain.InvoiceDetail detail : invoiceManage.getInvoiceDetailList()) { if (detail.getReceivableBillNo() != null) { descBuilder.append("账单编号=").append(detail.getReceivableBillNo()); } if (detail.getCurrentBilledAmount() != null) { descBuilder.append(", 本次开票金额=").append(detail.getCurrentBilledAmount()); } descBuilder.append("; "); } } log.setOperationDesc(descBuilder.toString()); log.setCreateTime(new java.util.Date()); invoiceManageLogService.insertInvoiceManageLog(log); } catch (Exception e) { logger.error("记录申请开票日志失败: {}", e.getMessage()); } } }