package com.ruoyi.cwgl.service.impl; import java.util.List; import com.ruoyi.common.utils.DateUtils; import javax.annotation.Resource; import com.ruoyi.cwgl.mapper.PayableFeeManagementMapper; import com.ruoyi.cwgl.service.IPayableBillManagementLogService; import com.ruoyi.cwgl.service.IPayableFeeManagementService; import org.springframework.beans.factory.annotation.Autowired; 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.PayableBillManagementMapper; import com.ruoyi.cwgl.domain.PayableBillManagement; import com.ruoyi.cwgl.domain.PayableBillManagementLog; import com.ruoyi.cwgl.service.IPayableBillManagementService; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.utils.SecurityUtils; /** * 应付账单管理Service业务层处理 * * @author ruoyi * @date 2025-12-17 */ @Service @Transactional(rollbackFor = Exception.class) public class PayableBillManagementServiceImpl extends BaseService implements IPayableBillManagementService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private PayableBillManagementMapper payableBillManagementMapper; @Autowired private IPayableBillManagementLogService logService; @Resource private PayableFeeManagementMapper payableFeeManagementMapper; /** * 查询应付账单管理 * * @param id 应付账单管理ID * @return 应付账单管理 */ @DataSource(DataSourceType.SLAVE) @Override public PayableBillManagement selectPayableBillManagementById(Integer id) { return payableBillManagementMapper.selectPayableBillManagementById(id); } /** * 查询应付账单管理 记录数 * * @param payableBillManagement 应付账单管理 * @return 应付账单管理集合 */ @DataSource(DataSourceType.SLAVE) @Override public int selectPayableBillManagementCount(PayableBillManagement payableBillManagement) { return payableBillManagementMapper.selectPayableBillManagementCount(payableBillManagement); } /** * 查询应付账单管理列表 * * @param payableBillManagement 应付账单管理 * @return 应付账单管理 */ @DataSource(DataSourceType.SLAVE) @Override public List selectPayableBillManagementList(PayableBillManagement payableBillManagement) { return payableBillManagementMapper.selectPayableBillManagementList(payableBillManagement); } /** * 查询应付账单管理列表 异步 导出 * * @param payableBillManagement 应付账单管理 * @param exportKey 导出功能的唯一标识 * @return 应付账单管理集合 */ @DataSource(DataSourceType.SLAVE) @Async @Override public void export(PayableBillManagement payableBillManagement,String exportKey) { super.export(PayableBillManagement.class,exportKey,"payableBillManagementData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectPayableBillManagementList(payableBillManagement); }); } /** * 新增应付账单管理 * * @param payableBillManagement 应付账单管理 * @return 结果 */ @Override public int insertPayableBillManagement(PayableBillManagement payableBillManagement) { payableBillManagement.setCreateTime(DateUtils.getNowDate()); return payableBillManagementMapper.insertPayableBillManagement(payableBillManagement); } /** * 新增应付账单管理[批量] * * @param payableBillManagements 应付账单管理 * @return 结果 */ @Override public int insertPayableBillManagementBatch(List payableBillManagements) { int rows = payableBillManagementMapper.insertPayableBillManagementBatch(payableBillManagements); return rows; } /** * 修改应付账单管理 * * @param payableBillManagement 应付账单管理 * @return 结果 */ @Override public int updatePayableBillManagement(PayableBillManagement payableBillManagement) { payableBillManagement.setUpdateTime(DateUtils.getNowDate()); int result = payableBillManagementMapper.updatePayableBillManagement(payableBillManagement); // 记录操作日志 if (result > 0) { PayableBillManagementLog log = new PayableBillManagementLog(); log.setBillId(payableBillManagement.getId()); try { log.setCreateBy(SecurityUtils.getUsername()); } catch (Exception e) { log.setCreateBy("api"); } log.setCreateTime(DateUtils.getNowDate()); log.setOperation("修改应付账单,账单编号:" + payableBillManagement.getSystemNo()); logService.insertPayableBillManagementLog(log); } return result; } /** * 修改应付账单管理[批量] * * @param payableBillManagements 应付账单管理 * @return 结果 */ @Override public int updatePayableBillManagementBatch(List payableBillManagements){ return payableBillManagementMapper.updatePayableBillManagementBatch(payableBillManagements); } /** * 删除应付账单管理对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deletePayableBillManagementByIds(String ids) { return deletePayableBillManagementByIds(Convert.toIntArray(ids)); } /** * 删除应付账单管理对象 * * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deletePayableBillManagementByIds(Integer[] ids) { return payableBillManagementMapper.deletePayableBillManagementByIds(ids); } /** * 删除应付账单管理信息 * * @param id 应付账单管理ID * @return 结果 */ @Override public int deletePayableBillManagementById(Integer id) { return payableBillManagementMapper.deletePayableBillManagementById(id); } /** * 作废应付账单管理记录 * * @param id 应付账单管理ID * @return 结果 */ @Override public int voidPayableBillManagement(Integer id) { // 查询账单信息 PayableBillManagement bill = selectPayableBillManagementById(id); if (bill == null) { throw new RuntimeException("应付账单不存在"); } // 检查账单状态,只有状态为"0"(未结算)的账单可以作废 if (!"0".equals(bill.getStatus())) { throw new RuntimeException("只能作废状态为未结算的应付账单"); } // 更新账单状态为"2"(作废) bill.setStatus("2"); bill.setUpdateTime(DateUtils.getNowDate()); // 更新应付账单记录 int result = payableBillManagementMapper.updatePayableBillManagement(bill); // 如果更新成功,清除关联应付费用的账单编号并更新状态 if (result > 0) { // 获取账单系统编号 String billSystemNo = bill.getSystemNo(); if (billSystemNo != null && !billSystemNo.trim().isEmpty()) { // 查询关联该账单的应付费用记录 payableFeeManagementMapper.updatePayableFeeManagementByRelatedBillNo(billSystemNo); } // 记录作废操作日志 PayableBillManagementLog log = new PayableBillManagementLog(); log.setBillId(id); try { log.setCreateBy(SecurityUtils.getUsername()); } catch (Exception e) { // 远程调用时没有登录信息,使用api作为创建人 log.setCreateBy("api"); } log.setCreateTime(DateUtils.getNowDate()); log.setOperation("作废应付账单,账单编号:" + bill.getSystemNo()); logService.insertPayableBillManagementLog(log); } return result; } /** * 根据系统编号查询应付账单管理 * * @param systemNo 系统编号 * @return 应付账单管理 */ @DataSource(DataSourceType.SLAVE) @Override public PayableBillManagement selectPayableBillManagementBySystemNo(String systemNo) { return payableBillManagementMapper.selectPayableBillManagementBySystemNo(systemNo); } }