package cn.iocoder.yudao.module.mdm.service.item;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
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.item.vo.MdmItemModelPageReqVO;
|
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelSaveReqVO;
|
import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO;
|
import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO;
|
import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO;
|
import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemModelMapper;
|
import cn.iocoder.yudao.module.mdm.service.unit.MdmUnitMeasureService;
|
import jakarta.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.validation.annotation.Validated;
|
|
import java.math.BigDecimal;
|
import java.util.Collection;
|
import java.util.Collections;
|
import java.util.List;
|
|
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 MdmItemModelServiceImpl implements MdmItemModelService {
|
|
@Resource
|
private MdmItemModelMapper itemModelMapper;
|
|
@Resource
|
private MdmItemService itemService;
|
@Resource
|
private MdmUnitMeasureService unitMeasureService;
|
|
@Override
|
public Long createItemModel(MdmItemModelSaveReqVO createReqVO) {
|
validateItemModelSaveData(null, createReqVO);
|
|
MdmItemModelDO itemModel = BeanUtils.toBean(createReqVO, MdmItemModelDO.class);
|
if (itemModel.getStatus() == null) {
|
itemModel.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
}
|
itemModelMapper.insert(itemModel);
|
return itemModel.getId();
|
}
|
|
@Override
|
public void updateItemModel(MdmItemModelSaveReqVO updateReqVO) {
|
validateItemModelExists(updateReqVO.getId());
|
validateItemModelSaveData(updateReqVO.getId(), updateReqVO);
|
|
itemModelMapper.updateById(BeanUtils.toBean(updateReqVO, MdmItemModelDO.class));
|
}
|
|
private void validateItemModelSaveData(Long id, MdmItemModelSaveReqVO reqVO) {
|
// 校验物料存在
|
MdmItemDO item = itemService.validateItemExists(reqVO.getItemId());
|
// 校验型号单位存在
|
unitMeasureService.validateUnitMeasureExists(reqVO.getUnitMeasureId());
|
// 校验换算比率大于 0
|
if (reqVO.getUnitMeasureRate() == null
|
|| reqVO.getUnitMeasureRate().compareTo(BigDecimal.ZERO) <= 0) {
|
throw exception(MDM_ITEM_MODEL_RATE_INVALID, reqVO.getModel(), reqVO.getUnitMeasureRate());
|
}
|
// 校验同一物料下型号名称唯一
|
if (StrUtil.isNotBlank(reqVO.getModel())) {
|
MdmItemModelDO exists = itemModelMapper.selectByItemIdAndModel(reqVO.getItemId(), reqVO.getModel());
|
if (exists != null && ObjUtil.notEqual(exists.getId(), id)) {
|
throw exception(MDM_ITEM_MODEL_NAME_DUPLICATE, reqVO.getModel());
|
}
|
}
|
// 型号单位与物料主单位一致时,比率必须为 1(否则换算无意义且易误配)
|
if (ObjUtil.equal(item.getUnitMeasureId(), reqVO.getUnitMeasureId())
|
&& reqVO.getUnitMeasureRate().compareTo(BigDecimal.ONE) != 0) {
|
throw exception(MDM_ITEM_MODEL_RATE_MUST_BE_ONE, reqVO.getModel(),
|
unitName(reqVO.getUnitMeasureId()), unitName(item.getUnitMeasureId()));
|
}
|
}
|
|
private String unitName(Long unitMeasureId) {
|
MdmUnitMeasureDO unit = unitMeasureService.getUnitMeasure(unitMeasureId);
|
return unit != null ? unit.getName() : "ID=" + unitMeasureId;
|
}
|
|
@Override
|
public void deleteItemModel(Long id) {
|
validateItemModelExists(id);
|
itemModelMapper.deleteById(id);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void saveItemModelList(Long itemId, List<MdmItemModelSaveReqVO> modelList) {
|
itemService.validateItemExists(itemId);
|
// 第一步,删除旧的型号
|
itemModelMapper.deleteByItemId(itemId);
|
if (CollUtil.isEmpty(modelList)) {
|
return;
|
}
|
// 第二步,插入新的型号
|
for (MdmItemModelSaveReqVO reqVO : modelList) {
|
reqVO.setItemId(itemId);
|
reqVO.setId(null);
|
createItemModel(reqVO);
|
}
|
}
|
|
@Override
|
public MdmItemModelDO getItemModel(Long id) {
|
return itemModelMapper.selectById(id);
|
}
|
|
@Override
|
public List<MdmItemModelDO> getItemModelList(Collection<Long> ids) {
|
if (CollUtil.isEmpty(ids)) {
|
return Collections.emptyList();
|
}
|
return itemModelMapper.selectBatchIds(ids);
|
}
|
|
@Override
|
public List<MdmItemModelDO> getItemModelListByItemId(Long itemId) {
|
return itemModelMapper.selectListByItemId(itemId);
|
}
|
|
@Override
|
public List<MdmItemModelDO> getItemModelListByItemIds(Collection<Long> itemIds) {
|
if (CollUtil.isEmpty(itemIds)) {
|
return Collections.emptyList();
|
}
|
return itemModelMapper.selectListByItemIds(itemIds);
|
}
|
|
@Override
|
public PageResult<MdmItemModelDO> getItemModelPage(MdmItemModelPageReqVO pageReqVO) {
|
return itemModelMapper.selectPage(pageReqVO);
|
}
|
|
@Override
|
public MdmItemModelDO validateItemModelExists(Long id) {
|
MdmItemModelDO itemModel = itemModelMapper.selectById(id);
|
if (itemModel == null) {
|
throw exception(MDM_ITEM_MODEL_NOT_EXISTS);
|
}
|
return itemModel;
|
}
|
|
@Override
|
public MdmItemModelDO validateItemModelExistsAndEnable(Long id) {
|
MdmItemModelDO itemModel = validateItemModelExists(id);
|
if (CommonStatusEnum.isDisable(itemModel.getStatus())) {
|
throw exception(MDM_ITEM_MODEL_IS_DISABLE);
|
}
|
return itemModel;
|
}
|
|
@Override
|
public void deleteItemModelListByItemId(Long itemId) {
|
itemModelMapper.deleteByItemId(itemId);
|
}
|
|
}
|