package com.klp.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.klp.domain.bo.CostStandardConfigBo; import com.klp.domain.vo.CostStandardConfigVo; import com.klp.domain.CostStandardConfig; import com.klp.mapper.CostStandardConfigMapper; import com.klp.service.ICostStandardConfigService; import java.time.LocalDate; import java.util.Collection; import java.util.List; /** * 成本标准配置表Service业务层处理 * * @author klp * @date 2025-11-25 */ @RequiredArgsConstructor @Service public class CostStandardConfigServiceImpl implements ICostStandardConfigService { private final CostStandardConfigMapper baseMapper; /** * 查询成本标准配置表 */ @Override public CostStandardConfigVo queryById(Long configId) { return baseMapper.selectVoById(configId); } /** * 查询成本标准配置表列表 */ @Override public TableDataInfo queryPageList(CostStandardConfigBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } /** * 查询成本标准配置表列表 */ @Override public List queryList(CostStandardConfigBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper buildQueryWrapper(CostStandardConfigBo bo) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getConfigId() != null, CostStandardConfig::getConfigId, bo.getConfigId()); lqw.eq(bo.getUnitCost() != null, CostStandardConfig::getUnitCost, bo.getUnitCost()); lqw.eq(bo.getEffectiveDate() != null, CostStandardConfig::getEffectiveDate, bo.getEffectiveDate()); lqw.eq(bo.getStatus() != null, CostStandardConfig::getStatus, bo.getStatus()); lqw.orderByDesc(CostStandardConfig::getEffectiveDate); return lqw; } /** * 新增成本标准配置表 */ @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(CostStandardConfigBo bo) { // 如果新标准立即生效,需要将当前有效的标准标记为失效 if (bo.getEffectiveDate() != null && !bo.getEffectiveDate().isAfter(LocalDate.now())) { // 将当前有效的标准标记为失效 CostStandardConfigVo current = queryCurrentEffective(); if (current != null) { CostStandardConfig update = new CostStandardConfig(); update.setConfigId(current.getConfigId()); update.setExpireDate(LocalDate.now().minusDays(1)); update.setStatus(0); baseMapper.updateById(update); } } CostStandardConfig add = BeanUtil.toBean(bo, CostStandardConfig.class); if (add.getStatus() == null) { add.setStatus(1); // 默认有效 } validEntityBeforeSave(add); return baseMapper.insert(add) > 0; } /** * 修改成本标准配置表 */ @Override public Boolean updateByBo(CostStandardConfigBo bo) { CostStandardConfig update = BeanUtil.toBean(bo, CostStandardConfig.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(CostStandardConfig entity) { // TODO 做一些数据校验,如唯一约束 } /** * 校验并批量删除成本标准配置表信息 */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { // TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; } /** * 查询当前有效的成本标准 */ @Override public CostStandardConfigVo queryCurrentEffective() { return baseMapper.selectCurrentEffective(); } /** * 查询指定日期的有效成本标准 */ @Override public CostStandardConfigVo queryEffectiveByDate(LocalDate date) { return baseMapper.selectEffectiveByDate(date); } }