package com.ruoyi.cwgl.service.impl; import java.util.List; import com.ruoyi.common.utils.DateUtils; import javax.annotation.Resource; import com.ruoyi.common.utils.SecurityUtils; 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.VoucherSubjectSettingMapper; import com.ruoyi.cwgl.domain.VoucherSubjectSetting; import com.ruoyi.cwgl.domain.VoucherSubjectSettingLog; import com.ruoyi.cwgl.service.IVoucherSubjectSettingService; import com.ruoyi.cwgl.service.IVoucherSubjectSettingLogService; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.utils.StringUtils; /** * 凭证科目设置Service业务层处理 * * @author ruoyi * @date 2026-01-19 */ @Service @Transactional(rollbackFor = Exception.class) public class VoucherSubjectSettingServiceImpl extends BaseService implements IVoucherSubjectSettingService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private VoucherSubjectSettingMapper voucherSubjectSettingMapper; @Resource private IVoucherSubjectSettingLogService voucherSubjectSettingLogService; /** * 查询凭证科目设置 * * @param id 凭证科目设置ID * @return 凭证科目设置 */ @DataSource(DataSourceType.SLAVE) @Override public VoucherSubjectSetting selectVoucherSubjectSettingById(Integer id) { return voucherSubjectSettingMapper.selectVoucherSubjectSettingById(id); } /** * 查询凭证科目设置 记录数 * * @param voucherSubjectSetting 凭证科目设置 * @return 凭证科目设置集合 */ @DataSource(DataSourceType.SLAVE) @Override public int selectVoucherSubjectSettingCount(VoucherSubjectSetting voucherSubjectSetting) { return voucherSubjectSettingMapper.selectVoucherSubjectSettingCount(voucherSubjectSetting); } /** * 查询凭证科目设置列表 * * @param voucherSubjectSetting 凭证科目设置 * @return 凭证科目设置 */ @DataSource(DataSourceType.SLAVE) @Override public List selectVoucherSubjectSettingList(VoucherSubjectSetting voucherSubjectSetting) { List list = voucherSubjectSettingMapper.selectVoucherSubjectSettingList(voucherSubjectSetting); // 设置核算项目描述 for (VoucherSubjectSetting subject : list) { if (subject.getAccountingItems() != null) { subject.setAccountingItemsDesc(subject.getAccountingItemsDesc()); } } return list; } /** * 查询凭证科目设置列表 异步 导出 * * @param voucherSubjectSetting 凭证科目设置 * @param exportKey 导出功能的唯一标识 * @return 凭证科目设置集合 */ @DataSource(DataSourceType.SLAVE) @Async @Override public void export(VoucherSubjectSetting voucherSubjectSetting,String exportKey) { super.export(VoucherSubjectSetting.class,exportKey,"voucherSubjectSettingData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectVoucherSubjectSettingList(voucherSubjectSetting); }); } /** * 新增凭证科目设置 * * @param voucherSubjectSetting 凭证科目设置 * @return 结果 */ @Override public int insertVoucherSubjectSetting(VoucherSubjectSetting voucherSubjectSetting) { voucherSubjectSetting.setCreateTime(DateUtils.getNowDate()); voucherSubjectSetting.setCreateBy(SecurityUtils.getUsername()); int result = voucherSubjectSettingMapper.insertVoucherSubjectSetting(voucherSubjectSetting); // 记录新增日志 if (result > 0) { VoucherSubjectSettingLog log = new VoucherSubjectSettingLog(); log.setSubjectId(voucherSubjectSetting.getId()); log.setCreateBy(voucherSubjectSetting.getCreateBy()); log.setOperation("新增科目:【" + voucherSubjectSetting.getSubjectName() + "】"); voucherSubjectSettingLogService.insertVoucherSubjectSettingLog(log); } return result; } /** * 新增凭证科目设置[批量] * * @param voucherSubjectSettings 凭证科目设置 * @return 结果 */ @Override public int insertVoucherSubjectSettingBatch(List voucherSubjectSettings) { int rows = voucherSubjectSettingMapper.insertVoucherSubjectSettingBatch(voucherSubjectSettings); return rows; } /** * 修改凭证科目设置 * * @param voucherSubjectSetting 凭证科目设置 * @param original * @return 结果 */ @Override public int updateVoucherSubjectSetting(VoucherSubjectSetting voucherSubjectSetting, VoucherSubjectSetting original) { voucherSubjectSetting.setUpdateTime(DateUtils.getNowDate()); int result = voucherSubjectSettingMapper.updateVoucherSubjectSetting(voucherSubjectSetting); // 记录修改日志 if (result > 0 && original != null) { String changeLog = generateChangeLog(original, voucherSubjectSetting); if (!changeLog.isEmpty()) { VoucherSubjectSettingLog log = new VoucherSubjectSettingLog(); log.setSubjectId(voucherSubjectSetting.getId()); log.setCreateBy(SecurityUtils.getUsername()); log.setOperation("修改科目:【" + original.getSubjectName() + "】" + changeLog); voucherSubjectSettingLogService.insertVoucherSubjectSettingLog(log); } } return result; } /** * 生成字段变更日志 * @param original 原始数据 * @param updated 更新后数据 * @return 变更日志字符串 */ private String generateChangeLog(VoucherSubjectSetting original, VoucherSubjectSetting updated) { StringBuilder changeLog = new StringBuilder(); // 比较科目代码 if (!StringUtils.equals(original.getSubjectCode(), updated.getSubjectCode())) { changeLog.append("科目代码【").append(original.getSubjectCode()).append("】修改为【").append(updated.getSubjectCode()).append("】;"); } // 比较科目名称 if (!StringUtils.equals(original.getSubjectName(), updated.getSubjectName())) { changeLog.append("科目名称【").append(original.getSubjectName()).append("】修改为【").append(updated.getSubjectName()).append("】;"); } // 比较科目类别 if (!StringUtils.equals(original.getSubjectType(), updated.getSubjectType())) { changeLog.append("科目类别【").append(original.getSubjectType()).append("】修改为【").append(updated.getSubjectType()).append("】;"); } // 比较启用状态 if (!StringUtils.equals(original.getEnabled(), updated.getEnabled())) { changeLog.append("启用状态【").append(original.getEnabled()).append("】修改为【").append(updated.getEnabled()).append("】;"); } // 比较余额方向 if (!StringUtils.equals(original.getBalanceDirection(), updated.getBalanceDirection())) { changeLog.append("余额方向【").append(original.getBalanceDirection()).append("】修改为【").append(updated.getBalanceDirection()).append("】;"); } // 比较核算项目 if (original.getAccountingItems() != null && updated.getAccountingItems() != null && !original.getAccountingItems().equals(updated.getAccountingItems())) { changeLog.append("核算项目【").append(original.getAccountingItems()).append("】修改为【").append(updated.getAccountingItems()).append("】;"); } // 比较往来单位 if (!StringUtils.equals(original.getContactUnit(), updated.getContactUnit())) { changeLog.append("往来单位【").append(original.getContactUnit()).append("】修改为【").append(updated.getContactUnit()).append("】;"); } // 比较部门 if (!StringUtils.equals(original.getDepartment(), updated.getDepartment())) { changeLog.append("部门【").append(original.getDepartment()).append("】修改为【").append(updated.getDepartment()).append("】;"); } // 比较品名 if (!StringUtils.equals(original.getProductName(), updated.getProductName())) { changeLog.append("品名【").append(original.getProductName()).append("】修改为【").append(updated.getProductName()).append("】;"); } // 比较数量金额核算 if (!StringUtils.equals(original.getQuantityAmountAccounting(), updated.getQuantityAmountAccounting())) { changeLog.append("数量金额核算【").append(original.getQuantityAmountAccounting()).append("】修改为【").append(updated.getQuantityAmountAccounting()).append("】;"); } // 比较现金科目 if (!StringUtils.equals(original.getCashSubject(), updated.getCashSubject())) { changeLog.append("现金科目【").append(original.getCashSubject()).append("】修改为【").append(updated.getCashSubject()).append("】;"); } // 比较银行科目 if (!StringUtils.equals(original.getBankSubject(), updated.getBankSubject())) { changeLog.append("银行科目【").append(original.getBankSubject()).append("】修改为【").append(updated.getBankSubject()).append("】;"); } // 比较现金流量科目 if (!StringUtils.equals(original.getCashFlowSubject(), updated.getCashFlowSubject())) { changeLog.append("现金流量科目【").append(original.getCashFlowSubject()).append("】修改为【").append(updated.getCashFlowSubject()).append("】;"); } // 比较费用名称 if (!StringUtils.equals(original.getExpenseName(), updated.getExpenseName())) { changeLog.append("费用名称【").append(original.getExpenseName()).append("】修改为【").append(updated.getExpenseName()).append("】;"); } // 比较助记码 if (!StringUtils.equals(original.getMnemonicCode(), updated.getMnemonicCode())) { changeLog.append("助记码【").append(original.getMnemonicCode()).append("】修改为【").append(updated.getMnemonicCode()).append("】;"); } // 比较外币核算 if (!StringUtils.equals(original.getForeignCurrencyAccounting(), updated.getForeignCurrencyAccounting())) { changeLog.append("外币核算【").append(original.getForeignCurrencyAccounting()).append("】修改为【").append(updated.getForeignCurrencyAccounting()).append("】;"); } // 比较计量单位 if (!StringUtils.equals(original.getUnitOfMeasurement(), updated.getUnitOfMeasurement())) { changeLog.append("计量单位【").append(original.getUnitOfMeasurement()).append("】修改为【").append(updated.getUnitOfMeasurement()).append("】;"); } // 比较显示顺序 if (original.getOrderNum() != null && updated.getOrderNum() != null && !original.getOrderNum().equals(updated.getOrderNum())) { changeLog.append("显示顺序【").append(original.getOrderNum()).append("】修改为【").append(updated.getOrderNum()).append("】;"); } // 比较状态 if (!StringUtils.equals(original.getStatus(), updated.getStatus())) { changeLog.append("状态【").append(original.getStatus()).append("】修改为【").append(updated.getStatus()).append("】;"); } // 比较备注 if (!StringUtils.equals(original.getRemark(), updated.getRemark())) { changeLog.append("备注【").append(original.getRemark()).append("】修改为【").append(updated.getRemark()).append("】;"); } // 比较帐套类型 if (!StringUtils.equals(original.getType(), updated.getType())) { changeLog.append("帐套类型【").append(original.getType()).append("】修改为【").append(updated.getType()).append("】;"); } return changeLog.toString(); } /** * 修改凭证科目设置[批量] * * @param voucherSubjectSettings 凭证科目设置 * @return 结果 */ @Override public int updateVoucherSubjectSettingBatch(List voucherSubjectSettings){ return voucherSubjectSettingMapper.updateVoucherSubjectSettingBatch(voucherSubjectSettings); } /** * 删除凭证科目设置对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteVoucherSubjectSettingByIds(String ids) { return deleteVoucherSubjectSettingByIds(Convert.toIntArray(ids)); } /** * 删除凭证科目设置对象 * * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteVoucherSubjectSettingByIds(Integer[] ids) { return voucherSubjectSettingMapper.deleteVoucherSubjectSettingByIds(ids); } /** * 删除凭证科目设置信息 * * @param id 凭证科目设置ID * @return 结果 */ @Override public int deleteVoucherSubjectSettingById(Integer id) { return voucherSubjectSettingMapper.deleteVoucherSubjectSettingById(id); } /** * 校验科目代码是否唯一 * * @param voucherSubjectSetting 凭证科目设置 * @return 结果 */ @Override public String checkSubjectCodeUnique(VoucherSubjectSetting voucherSubjectSetting) { Integer id = StringUtils.isNull(voucherSubjectSetting.getId()) ? -1 : voucherSubjectSetting.getId(); VoucherSubjectSetting info = voucherSubjectSettingMapper.checkSubjectCodeUnique(voucherSubjectSetting.getSubjectCode(), voucherSubjectSetting.getAccountSet()); if (StringUtils.isNotNull(info) && info.getId().intValue() != id.intValue()) { return "1"; } return "0"; } }