package org.jeecg.modules.activiti.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.activiti.entity.ActivitiDefinition; import org.jeecg.modules.activiti.mapper.ActivitiDefinitionMapper; import org.jeecg.modules.activiti.request.ActivitiDefinitionRequest; import org.jeecg.modules.activiti.service.IActivitiDefinitionService; import org.jeecg.modules.dnc.exception.ExceptionCast; import org.jeecg.modules.dnc.mapper.DepartmentMapper; import org.jeecg.modules.dnc.response.ActivitiDefinitionCode; import org.jeecg.modules.dnc.response.CommonCode; import org.jeecg.modules.dnc.response.QueryPageResponseResult; import org.jeecg.modules.dnc.ucenter.Department; import org.jeecg.modules.dnc.utils.ValidateUtil; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; @Service public class ActivitiDefinitionServiceImpl extends ServiceImpl implements IActivitiDefinitionService { @Autowired private DepartmentMapper departmentMapper; @Autowired private ISysUserService userService; @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDefinition(ActivitiDefinition definition) { if(definition == null || !ValidateUtil.validateString(definition.getDepartId()) || !ValidateUtil.validateString(definition.getActName()) || !ValidateUtil.validateString(definition.getApproveUsers())) ExceptionCast.cast(CommonCode.INVALID_PARAM); ActivitiDefinition en = getByDepartId(definition.getDepartId()); if(en != null) ExceptionCast.cast(ActivitiDefinitionCode.DEF_IS_EXIST); Department department = departmentMapper.selectById(definition.getDepartId()); if(department == null) ExceptionCast.cast(ActivitiDefinitionCode.DEF_DEPART_NONE); String[] userIds = definition.getApproveUsers().split(","); if(userIds == null|| userIds.length < 1) ExceptionCast.cast(ActivitiDefinitionCode.DEF_USER_NONE); List userIdList = new ArrayList<>(userIds.length); Collections.addAll(userIdList, userIds); Collection userList = userService.listByIds(userIdList); if(userList == null || userList.isEmpty() || userList.size() != userIds.length) ExceptionCast.cast(ActivitiDefinitionCode.DEF_USER_NONE); return super.save(definition); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean editDefinition(String id, ActivitiDefinition definition) { if(!ValidateUtil.validateString(id) || definition == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); ActivitiDefinition en = super.getById(id); if(en == null) ExceptionCast.cast(ActivitiDefinitionCode.DEF_NOT_EXIST); String[] userIds = definition.getApproveUsers().split(","); if(userIds == null|| userIds.length < 1) ExceptionCast.cast(ActivitiDefinitionCode.DEF_USER_NONE); List userIdList = new ArrayList<>(userIds.length); Collections.addAll(userIdList, userIds); Collection userList = userService.listByIds(userIdList); if(userList == null || userList.isEmpty() || userList.size() != userIds.length) ExceptionCast.cast(ActivitiDefinitionCode.DEF_USER_NONE); definition.setId(id); definition.setDepartId(null); return super.updateById(definition); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteDefinition(String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); ActivitiDefinition en = super.getById(id); if(en == null) ExceptionCast.cast(ActivitiDefinitionCode.DEF_NOT_EXIST); return super.removeById(id); } @Override public ActivitiDefinition getByDepartId(String departId) { if(!ValidateUtil.validateString(departId)) return null; List list = super.lambdaQuery().eq(ActivitiDefinition::getDepartId, departId).list(); if(list == null || list.isEmpty()) return null; return list.get(0); } @Override public Result findPageList(int page, int size, ActivitiDefinitionRequest request) { if(page < 1 || size < 1) { ExceptionCast.cast(CommonCode.INVALID_PAGE); } IPage pageData = new Page<>(page, size); LambdaQueryChainWrapper lambdaQuery = super.lambdaQuery(); if(request != null) { if(ValidateUtil.validateString(request.getActName())) { lambdaQuery.like(ActivitiDefinition::getActName, request.getActName()); } } lambdaQuery.orderByDesc(ActivitiDefinition::getCreateTime); IPage definitionIPage = lambdaQuery.page(pageData); return Result.ok(definitionIPage); } @Override public List getByDepartIds(List departIds) { if(departIds == null || departIds.isEmpty()) return null; List list = super.lambdaQuery().in(ActivitiDefinition::getDepartId, departIds).list(); if(list == null || list.isEmpty()) return null; Map userIdMap = new HashMap<>(); list.forEach(item -> { if(ValidateUtil.validateString(item.getApproveUsers())) { String[] arr = item.getApproveUsers().split(","); if(arr != null && arr.length > 0) { for (String s : arr) { userIdMap.put(s, s); } } } }); if(userIdMap.isEmpty()) return null; List userIds = new ArrayList<>(); userIdMap.forEach((key, value) -> { userIds.add(key); }); return userIds; } @Override public List findByUserId(String userId) { return super.lambdaQuery().like(ActivitiDefinition::getApproveUsers, userId).list(); } }