package cn.iocoder.yudao.module.mdm.service.unit; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mdm.controller.admin.unit.vo.MdmUnitMeasurePageReqVO; import cn.iocoder.yudao.module.mdm.controller.admin.unit.vo.MdmUnitMeasureSaveReqVO; import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO; import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemMapper; import cn.iocoder.yudao.module.mdm.dal.mysql.unit.MdmUnitMeasureMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mdm.enums.ErrorCodeConstants.*; /** * MDM 计量单位 Service 实现类 * * @author 芋道源码 */ @Service @Validated public class MdmUnitMeasureServiceImpl implements MdmUnitMeasureService { @Resource private MdmUnitMeasureMapper unitMeasureMapper; @Resource private MdmItemMapper itemMapper; @Override public Long createUnitMeasure(MdmUnitMeasureSaveReqVO createReqVO) { // 校验数据 validateUnitMeasureSaveData(createReqVO); // 插入 MdmUnitMeasureDO unitMeasure = BeanUtils.toBean(createReqVO, MdmUnitMeasureDO.class); unitMeasureMapper.insert(unitMeasure); return unitMeasure.getId(); } @Override public void updateUnitMeasure(MdmUnitMeasureSaveReqVO updateReqVO) { // 校验存在 validateUnitMeasureExists(updateReqVO.getId()); // 校验数据 validateUnitMeasureSaveData(updateReqVO); // 更新 MdmUnitMeasureDO updateObj = BeanUtils.toBean(updateReqVO, MdmUnitMeasureDO.class); unitMeasureMapper.updateById(updateObj); } @Override public void updateUnitMeasureStatus(Long id, Integer status) { // 校验存在 validateUnitMeasureExists(id); // 更新状态 unitMeasureMapper.updateById(new MdmUnitMeasureDO().setId(id).setStatus(status)); } @Override public void deleteUnitMeasure(Long id) { // 校验存在 validateUnitMeasureExists(id); // 校验是否被物料使用(直接使用 Mapper 避免循环依赖) if (itemMapper.selectCountByUnitMeasureId(id) > 0) { throw exception(MDM_UNIT_MEASURE_EXISTS_ITEM); } // 删除 unitMeasureMapper.deleteById(id); } @Override public MdmUnitMeasureDO validateUnitMeasureExists(Long id) { MdmUnitMeasureDO unitMeasure = unitMeasureMapper.selectById(id); if (unitMeasure == null) { throw exception(MDM_UNIT_MEASURE_NOT_EXISTS); } return unitMeasure; } private void validateUnitMeasureSaveData(MdmUnitMeasureSaveReqVO reqVO) { // 校验编码唯一 MdmUnitMeasureDO unit = unitMeasureMapper.selectByCode(reqVO.getCode()); if (unit != null && ObjUtil.notEqual(unit.getId(), reqVO.getId())) { throw exception(MDM_UNIT_MEASURE_CODE_DUPLICATE); } // 校验名称唯一 MdmUnitMeasureDO sameName = unitMeasureMapper.selectByName(reqVO.getName()); if (sameName != null && ObjUtil.notEqual(sameName.getId(), reqVO.getId())) { throw exception(MDM_UNIT_MEASURE_NAME_DUPLICATE); } } @Override public MdmUnitMeasureDO getUnitMeasure(Long id) { return unitMeasureMapper.selectById(id); } @Override public PageResult getUnitMeasurePage(MdmUnitMeasurePageReqVO pageReqVO) { return unitMeasureMapper.selectPage(pageReqVO); } @Override public List getUnitMeasureList(Collection ids) { if (CollUtil.isEmpty(ids)) { return Collections.emptyList(); } return unitMeasureMapper.selectBatchIds(ids); } @Override public MdmUnitMeasureDO getUnitMeasureByCode(String code) { return unitMeasureMapper.selectByCode(code); } }