package cn.iocoder.yudao.module.mes.service.wm.barcode;
|
|
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.mes.controller.admin.wm.barcode.vo.config.MesWmBarcodeConfigImportExcelVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.wm.barcode.vo.config.MesWmBarcodeConfigImportRespVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.wm.barcode.vo.config.MesWmBarcodeConfigPageReqVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.wm.barcode.vo.config.MesWmBarcodeConfigSaveReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.barcode.MesWmBarcodeConfigDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.barcode.MesWmBarcodeConfigMapper;
|
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.*;
|
|
/**
|
* MES 条码配置 Service 实现类
|
*
|
* @author 超级管理员
|
*/
|
@Service
|
@Validated
|
public class MesWmBarcodeConfigServiceImpl implements MesWmBarcodeConfigService {
|
|
@Resource
|
private MesWmBarcodeConfigMapper barcodeConfigMapper;
|
|
@Resource
|
@Lazy
|
private MesWmBarcodeService barcodeService;
|
|
@Override
|
public Long createBarcodeConfig(MesWmBarcodeConfigSaveReqVO createReqVO) {
|
// 校验业务类型唯一
|
validateBarcodeConfigBizTypeUnique(null, createReqVO.getBizType());
|
|
// 插入
|
MesWmBarcodeConfigDO config = BeanUtils.toBean(createReqVO, MesWmBarcodeConfigDO.class);
|
barcodeConfigMapper.insert(config);
|
return config.getId();
|
}
|
|
@Override
|
public void updateBarcodeConfig(MesWmBarcodeConfigSaveReqVO updateReqVO) {
|
// 校验存在
|
validateBarcodeConfigExists(updateReqVO.getId());
|
// 校验业务类型唯一
|
validateBarcodeConfigBizTypeUnique(updateReqVO.getId(), updateReqVO.getBizType());
|
|
// 更新
|
MesWmBarcodeConfigDO updateObj = BeanUtils.toBean(updateReqVO, MesWmBarcodeConfigDO.class);
|
barcodeConfigMapper.updateById(updateObj);
|
}
|
|
@Override
|
public void deleteBarcodeConfig(Long id) {
|
// 校验存在
|
validateBarcodeConfigExists(id);
|
// 校验是否有关联的条码记录
|
if (barcodeService.getBarcodeCountByConfigId(id) > 0) {
|
throw exception(WM_BARCODE_CONFIG_HAS_BARCODE);
|
}
|
|
// 删除
|
barcodeConfigMapper.deleteById(id);
|
}
|
|
private MesWmBarcodeConfigDO validateBarcodeConfigExists(Long id) {
|
MesWmBarcodeConfigDO config = barcodeConfigMapper.selectById(id);
|
if (config == null) {
|
throw exception(WM_BARCODE_CONFIG_NOT_EXISTS);
|
}
|
return config;
|
}
|
|
private void validateBarcodeConfigBizTypeUnique(Long id, Integer bizType) {
|
MesWmBarcodeConfigDO config = barcodeConfigMapper.selectByBizType(bizType);
|
if (config == null) {
|
return;
|
}
|
if (ObjUtil.notEqual(config.getId(), id)) {
|
throw exception(WM_BARCODE_CONFIG_BIZ_TYPE_DUPLICATE);
|
}
|
}
|
|
@Override
|
public MesWmBarcodeConfigDO getBarcodeConfig(Long id) {
|
return barcodeConfigMapper.selectById(id);
|
}
|
|
@Override
|
public PageResult<MesWmBarcodeConfigDO> getBarcodeConfigPage(MesWmBarcodeConfigPageReqVO pageReqVO) {
|
return barcodeConfigMapper.selectPage(pageReqVO);
|
}
|
|
@Override
|
public MesWmBarcodeConfigDO getBarcodeConfigByBizType(Integer bizType) {
|
return barcodeConfigMapper.selectByBizType(bizType);
|
}
|
|
@Override
|
public MesWmBarcodeConfigDO validateBarcodeConfigByBizType(Integer bizType) {
|
MesWmBarcodeConfigDO config = barcodeConfigMapper.selectByBizType(bizType);
|
if (config == null) {
|
throw exception(WM_BARCODE_CONFIG_NOT_EXISTS);
|
}
|
return config;
|
}
|
|
@Override
|
public List<MesWmBarcodeConfigDO> getEnableBarcodeConfigList() {
|
return barcodeConfigMapper.selectEnableList();
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public MesWmBarcodeConfigImportRespVO importBarcodeConfigList(List<MesWmBarcodeConfigImportExcelVO> importList, boolean updateSupport) {
|
// 校验导入数据不能为空
|
if (cn.hutool.core.collection.CollUtil.isEmpty(importList)) {
|
throw exception(WM_BARCODE_CONFIG_IMPORT_LIST_IS_EMPTY);
|
}
|
MesWmBarcodeConfigImportRespVO respVO = MesWmBarcodeConfigImportRespVO.builder()
|
.createCodes(new ArrayList<>()).updateCodes(new ArrayList<>())
|
.failureCodes(new LinkedHashMap<>()).build();
|
// 索引,用于错误提示
|
AtomicInteger index = new AtomicInteger(1);
|
importList.forEach(importItem -> {
|
int currentIndex = index.getAndIncrement();
|
Integer bizType = importItem.getBizType();
|
String key = bizType != null ? String.valueOf(bizType) : "第 " + currentIndex + " 行";
|
// 校验业务类型必填
|
if (bizType == null) {
|
respVO.getFailureCodes().put(key, "业务类型不能为空");
|
return;
|
}
|
// 校验条码格式必填
|
if (importItem.getFormat() == null) {
|
respVO.getFailureCodes().put(key, "条码格式不能为空");
|
return;
|
}
|
// 校验内容格式模板必填
|
if (StrUtil.isBlank(importItem.getContentFormat())) {
|
respVO.getFailureCodes().put(key, "内容格式模板不能为空");
|
return;
|
}
|
MesWmBarcodeConfigDO existing = barcodeConfigMapper.selectByBizType(bizType);
|
if (existing != null && updateSupport) {
|
// 更新
|
MesWmBarcodeConfigDO updateObj = new MesWmBarcodeConfigDO();
|
updateObj.setId(existing.getId());
|
updateObj.setFormat(importItem.getFormat());
|
updateObj.setContentFormat(importItem.getContentFormat());
|
updateObj.setContentExample(importItem.getContentExample());
|
updateObj.setAutoGenerateFlag(importItem.getAutoGenerateFlag());
|
updateObj.setDefaultTemplate(importItem.getDefaultTemplate());
|
updateObj.setStatus(importItem.getStatus());
|
updateObj.setRemark(importItem.getRemark());
|
barcodeConfigMapper.updateById(updateObj);
|
respVO.getUpdateCodes().add(String.valueOf(bizType));
|
} else if (existing != null) {
|
respVO.getFailureCodes().put(key, "该业务类型的条码配置已存在:" + bizType);
|
} else {
|
// 创建
|
MesWmBarcodeConfigDO createObj = new MesWmBarcodeConfigDO();
|
createObj.setId(null);
|
createObj.setBizType(bizType);
|
createObj.setFormat(importItem.getFormat());
|
createObj.setContentFormat(importItem.getContentFormat());
|
createObj.setContentExample(importItem.getContentExample());
|
createObj.setAutoGenerateFlag(ObjUtil.defaultIfNull(importItem.getAutoGenerateFlag(), Boolean.TRUE));
|
createObj.setDefaultTemplate(importItem.getDefaultTemplate());
|
createObj.setStatus(ObjUtil.defaultIfNull(importItem.getStatus(), CommonStatusEnum.ENABLE.getStatus()));
|
createObj.setRemark(importItem.getRemark());
|
barcodeConfigMapper.insert(createObj);
|
respVO.getCreateCodes().add(String.valueOf(bizType));
|
}
|
});
|
return respVO;
|
}
|
|
}
|