package cn.iocoder.yudao.module.mes.service.pd.reel;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.mes.controller.admin.pd.reel.vo.ProductCtcReelImportExcelVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.pd.reel.vo.ProductCtcReelImportRespVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.pd.reel.vo.ProductCtcReelPageReqVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.pd.reel.vo.ProductCtcReelSaveReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.ctc.ProductCtcDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.reel.ProductCtcReelDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.pd.reel.ProductCtcReelMapper;
|
import cn.iocoder.yudao.module.mes.service.pd.ctc.ProductCtcService;
|
import jakarta.annotation.Resource;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.validation.annotation.Validated;
|
|
import java.util.ArrayList;
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_CTC_NOT_EXISTS;
|
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_CTC_REEL_IMPORT_LIST_IS_EMPTY;
|
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_CTC_REEL_NOT_EXISTS;
|
|
/**
|
* MES 换位导线盘具计算 Service 实现类
|
*
|
* @author 超级管理员
|
*/
|
@Service
|
@Validated
|
public class ProductCtcReelServiceImpl implements ProductCtcReelService {
|
|
@Resource
|
private ProductCtcReelMapper reelMapper;
|
|
@Resource
|
@Lazy
|
private ProductCtcService ctcService;
|
|
@Override
|
public Long createReel(ProductCtcReelSaveReqVO createReqVO) {
|
// 校验换位导线产品存在
|
validateCtcExists(createReqVO.getCtcId());
|
// 插入
|
ProductCtcReelDO reel = BeanUtils.toBean(createReqVO, ProductCtcReelDO.class);
|
reelMapper.insert(reel);
|
return reel.getId();
|
}
|
|
@Override
|
public void updateReel(ProductCtcReelSaveReqVO updateReqVO) {
|
// 校验存在
|
validateReelExists(updateReqVO.getId());
|
// 校验换位导线产品存在
|
validateCtcExists(updateReqVO.getCtcId());
|
// 更新
|
ProductCtcReelDO updateObj = BeanUtils.toBean(updateReqVO, ProductCtcReelDO.class);
|
reelMapper.updateById(updateObj);
|
}
|
|
@Override
|
public void deleteReel(Long id) {
|
// 校验存在
|
validateReelExists(id);
|
// 删除
|
reelMapper.deleteById(id);
|
}
|
|
@Override
|
public ProductCtcReelDO getReel(Long id) {
|
return reelMapper.selectById(id);
|
}
|
|
@Override
|
public PageResult<ProductCtcReelDO> getReelPage(ProductCtcReelPageReqVO pageReqVO) {
|
return reelMapper.selectPage(pageReqVO);
|
}
|
|
@Override
|
public List<ProductCtcReelDO> getReelListByCtcId(Long ctcId) {
|
return reelMapper.selectListByCtcId(ctcId);
|
}
|
|
@Override
|
public void deleteByCtcId(Long ctcId) {
|
reelMapper.deleteByCtcId(ctcId);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public ProductCtcReelImportRespVO importReelList(List<ProductCtcReelImportExcelVO> importList, boolean updateSupport) {
|
if (CollUtil.isEmpty(importList)) {
|
throw exception(PD_CTC_REEL_IMPORT_LIST_IS_EMPTY);
|
}
|
ProductCtcReelImportRespVO respVO = ProductCtcReelImportRespVO.builder()
|
.createCodes(new ArrayList<>()).updateCodes(new ArrayList<>())
|
.failureCodes(new LinkedHashMap<>()).build();
|
AtomicInteger index = new AtomicInteger(1);
|
importList.forEach(importItem -> {
|
int currentIndex = index.getAndIncrement();
|
String key = StrUtil.blankToDefault(importItem.getCtcOrderSpec(), "第 " + currentIndex + " 行");
|
if (StrUtil.isBlank(importItem.getCtcOrderSpec())) {
|
respVO.getFailureCodes().put(key, "订货规格不能为空");
|
return;
|
}
|
ProductCtcDO ctc = ctcService.getCtcByOrderSpec(importItem.getCtcOrderSpec().trim());
|
if (ctc == null) {
|
respVO.getFailureCodes().put(key, "订货规格[" + importItem.getCtcOrderSpec() + "]不存在");
|
return;
|
}
|
ProductCtcReelSaveReqVO reqVO = BeanUtils.toBean(importItem, ProductCtcReelSaveReqVO.class);
|
reqVO.setCtcId(ctc.getId());
|
String resultKey = importItem.getCtcOrderSpec() + "/" + StrUtil.blankToDefault(importItem.getReelType(), "无类型");
|
ProductCtcReelDO existReel = reelMapper.selectByCtcIdAndReelType(ctc.getId(), importItem.getReelType());
|
try {
|
if (existReel == null) {
|
reqVO.setId(null);
|
createReel(reqVO);
|
respVO.getCreateCodes().add(resultKey);
|
} else if (updateSupport) {
|
reqVO.setId(existReel.getId());
|
updateReel(reqVO);
|
respVO.getUpdateCodes().add(resultKey);
|
} else {
|
respVO.getFailureCodes().put(key, "订货规格+盘具类型已存在");
|
}
|
} catch (ServiceException e) {
|
respVO.getFailureCodes().put(key, e.getMessage());
|
}
|
});
|
return respVO;
|
}
|
|
private void validateCtcExists(Long ctcId) {
|
ProductCtcDO ctc = ctcService.getCtc(ctcId);
|
if (ctc == null) {
|
throw exception(PD_CTC_NOT_EXISTS);
|
}
|
}
|
|
private ProductCtcReelDO validateReelExists(Long id) {
|
ProductCtcReelDO reel = reelMapper.selectById(id);
|
if (reel == null) {
|
throw exception(PD_CTC_REEL_NOT_EXISTS);
|
}
|
return reel;
|
}
|
|
}
|