package com.iailab.module.bpm.service.definition; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.module.bpm.controller.admin.definition.vo.category.BpmCategoryPageReqVO; import com.iailab.module.bpm.controller.admin.definition.vo.category.BpmCategorySaveReqVO; import com.iailab.module.bpm.dal.dataobject.definition.BpmCategoryDO; import com.iailab.module.bpm.dal.mysql.category.BpmCategoryMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; import static com.iailab.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.iailab.module.bpm.enums.ErrorCodeConstants.*; /** * BPM 流程分类 Service 实现类 * * @author iailab */ @Service @Validated public class BpmCategoryServiceImpl implements BpmCategoryService { @Resource private BpmCategoryMapper bpmCategoryMapper; @Override public Long createCategory(BpmCategorySaveReqVO createReqVO) { // 校验唯一 validateCategoryNameUnique(createReqVO); validateCategoryCodeUnique(createReqVO); // 插入 BpmCategoryDO category = BeanUtils.toBean(createReqVO, BpmCategoryDO.class); bpmCategoryMapper.insert(category); return category.getId(); } @Override public void updateCategory(BpmCategorySaveReqVO updateReqVO) { // 校验存在 validateCategoryExists(updateReqVO.getId()); validateCategoryNameUnique(updateReqVO); validateCategoryCodeUnique(updateReqVO); // 更新 BpmCategoryDO updateObj = BeanUtils.toBean(updateReqVO, BpmCategoryDO.class); bpmCategoryMapper.updateById(updateObj); } private void validateCategoryNameUnique(BpmCategorySaveReqVO updateReqVO) { BpmCategoryDO category = bpmCategoryMapper.selectByName(updateReqVO.getName()); if (category == null || ObjUtil.equal(category.getId(), updateReqVO.getId())) { return; } throw exception(CATEGORY_NAME_DUPLICATE, updateReqVO.getName()); } private void validateCategoryCodeUnique(BpmCategorySaveReqVO updateReqVO) { BpmCategoryDO category = bpmCategoryMapper.selectByCode(updateReqVO.getCode()); if (category == null || ObjUtil.equal(category.getId(), updateReqVO.getId())) { return; } throw exception(CATEGORY_CODE_DUPLICATE, updateReqVO.getCode()); } @Override public void deleteCategory(Long id) { // 校验存在 validateCategoryExists(id); // 删除 bpmCategoryMapper.deleteById(id); } private void validateCategoryExists(Long id) { if (bpmCategoryMapper.selectById(id) == null) { throw exception(CATEGORY_NOT_EXISTS); } } @Override public BpmCategoryDO getCategory(Long id) { return bpmCategoryMapper.selectById(id); } @Override public PageResult getCategoryPage(BpmCategoryPageReqVO pageReqVO) { return bpmCategoryMapper.selectPage(pageReqVO); } @Override public List getCategoryListByCode(Collection codes) { if (CollUtil.isEmpty(codes)) { return Collections.emptyList(); } return bpmCategoryMapper.selectListByCode(codes); } @Override public List getCategoryListByStatus(Integer status) { return bpmCategoryMapper.selectListByStatus(status); } @Override @Transactional(rollbackFor = Exception.class) public void updateCategorySortBatch(List ids) { // 校验分类都存在 List categories = bpmCategoryMapper.selectBatchIds(ids); if (categories.size() != ids.size()) { throw exception(CATEGORY_NOT_EXISTS); } // 批量更新排序 List updateList = IntStream.range(0, ids.size()) .mapToObj(index -> new BpmCategoryDO().setId(ids.get(index)).setSort(index)) .collect(Collectors.toList()); bpmCategoryMapper.updateBatch(updateList); } }