|
@@ -8,23 +8,21 @@ import com.ruoyi.common.datascope.context.DataScopeContextHolder;
|
|
import com.usky.common.core.bean.CommonPage;
|
|
import com.usky.common.core.bean.CommonPage;
|
|
import com.usky.common.core.exception.BusinessException;
|
|
import com.usky.common.core.exception.BusinessException;
|
|
import com.usky.common.security.utils.SecurityUtils;
|
|
import com.usky.common.security.utils.SecurityUtils;
|
|
|
|
+import com.usky.oa.domain.OaDocument;
|
|
import com.usky.oa.domain.OaFormDefinition;
|
|
import com.usky.oa.domain.OaFormDefinition;
|
|
|
|
+import com.usky.oa.mapper.OaDocumentMapper;
|
|
import com.usky.oa.mapper.OaFormDefinitionMapper;
|
|
import com.usky.oa.mapper.OaFormDefinitionMapper;
|
|
|
|
+import com.usky.oa.service.OaDocumentService;
|
|
import com.usky.oa.service.OaFormDefinitionService;
|
|
import com.usky.oa.service.OaFormDefinitionService;
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
-import com.usky.oa.service.enums.OaBuiltInDocument;
|
|
|
|
|
|
+import com.usky.oa.service.vo.OaFormNameResponseVO;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
-import org.bouncycastle.util.Arrays;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.nio.charset.StandardCharsets;
|
|
|
|
-
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
-import java.util.List;
|
|
|
|
-import java.util.Objects;
|
|
|
|
-import java.util.Queue;
|
|
|
|
|
|
+import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -35,13 +33,15 @@ import java.util.stream.Collectors;
|
|
* @author fu
|
|
* @author fu
|
|
* @since 2024-12-10
|
|
* @since 2024-12-10
|
|
*/
|
|
*/
|
|
-@Slf4j
|
|
|
|
@Service
|
|
@Service
|
|
public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefinitionMapper, OaFormDefinition> implements OaFormDefinitionService {
|
|
public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefinitionMapper, OaFormDefinition> implements OaFormDefinitionService {
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private OaFormDefinitionMapper oaFormDefinitionMapper;
|
|
private OaFormDefinitionMapper oaFormDefinitionMapper;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private OaDocumentMapper oaDocumentMapper;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 新增/更新 表单
|
|
* 新增/更新 表单
|
|
* 此方法负责验证表单定义的合法性,包括表单名称和标识的唯一性、长度限制,并最终保存合法的表单定义
|
|
* 此方法负责验证表单定义的合法性,包括表单名称和标识的唯一性、长度限制,并最终保存合法的表单定义
|
|
@@ -87,15 +87,16 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
|
|
oaFormDefinition.setTenantId(tenantId);
|
|
oaFormDefinition.setTenantId(tenantId);
|
|
oaFormDefinition.setCreateTime(now);
|
|
oaFormDefinition.setCreateTime(now);
|
|
oaFormDefinition.setFormVersion(1);
|
|
oaFormDefinition.setFormVersion(1);
|
|
- oaFormDefinition.setFormStatus(0);
|
|
|
|
|
|
+ oaFormDefinition.setFormStatus(2);
|
|
oaFormDefinitionMapper.insert(oaFormDefinition);
|
|
oaFormDefinitionMapper.insert(oaFormDefinition);
|
|
} else {
|
|
} else {
|
|
oaFormDefinition.setUpdateBy(username);
|
|
oaFormDefinition.setUpdateBy(username);
|
|
oaFormDefinition.setUpdateTime(now);
|
|
oaFormDefinition.setUpdateTime(now);
|
|
|
|
|
|
|
|
+ OaFormDefinition oaFormDefinition1 = oaFormDefinitionMapper.selectById(oaFormDefinition.getId());
|
|
// 判断表单版本号是否需要更新
|
|
// 判断表单版本号是否需要更新
|
|
if (versionUpdateValid(oaFormDefinition)) {
|
|
if (versionUpdateValid(oaFormDefinition)) {
|
|
- oaFormDefinition.setFormVersion(oaFormDefinition.getFormVersion() + 1);
|
|
|
|
|
|
+ oaFormDefinition.setFormVersion(oaFormDefinition1.getFormVersion() + 1);
|
|
}
|
|
}
|
|
|
|
|
|
oaFormDefinitionMapper.updateById(oaFormDefinition);
|
|
oaFormDefinitionMapper.updateById(oaFormDefinition);
|
|
@@ -113,15 +114,20 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
|
|
if (oaFormDefinition == null) {
|
|
if (oaFormDefinition == null) {
|
|
throw new BusinessException("表单不存在!");
|
|
throw new BusinessException("表单不存在!");
|
|
}
|
|
}
|
|
|
|
+ if (!validDelete(formId).isEmpty()) {
|
|
|
|
+ throw new BusinessException("当前表单下已生成单据,不可删除!");
|
|
|
|
+ }
|
|
oaFormDefinitionMapper.deleteById(oaFormDefinition);
|
|
oaFormDefinitionMapper.deleteById(oaFormDefinition);
|
|
} else {
|
|
} else {
|
|
throw new BusinessException("表单ID不能为空或者小于0");
|
|
throw new BusinessException("表单ID不能为空或者小于0");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- //判断表单下是否存在已生成单据
|
|
|
|
- private void validDelete(Integer formId) {
|
|
|
|
-
|
|
|
|
|
|
+ // 判断表单下是否存在已生成单据
|
|
|
|
+ private List<OaDocument> validDelete(Integer formId) {
|
|
|
|
+ LambdaQueryWrapper<OaDocument> queryWrapper = Wrappers.lambdaQuery();
|
|
|
|
+ queryWrapper.eq(OaDocument::getFormId, formId);
|
|
|
|
+ return oaDocumentMapper.selectList(queryWrapper);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -158,6 +164,56 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
|
|
oaFormDefinitionMapper.updateById(oaFormDefinition);
|
|
oaFormDefinitionMapper.updateById(oaFormDefinition);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 我的申请-根据权限查询表单
|
|
|
|
+ @Override
|
|
|
|
+ public List<OaFormDefinition> selectByScope(String formSign) {
|
|
|
|
+ Long userId = SecurityUtils.getUserId();
|
|
|
|
+ Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
|
|
|
|
+ Integer tenantId = SecurityUtils.getTenantId();
|
|
|
|
+
|
|
|
|
+ List<OaFormDefinition> oaFormDefinitions = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ LambdaQueryWrapper<OaFormDefinition> queryWrapper = Wrappers.lambdaQuery();
|
|
|
|
+ queryWrapper.eq(OaFormDefinition::getTenantId, tenantId);
|
|
|
|
+
|
|
|
|
+ if (StringUtils.isNotBlank(formSign)) {
|
|
|
|
+ queryWrapper.eq(OaFormDefinition::getFormSign, formSign);
|
|
|
|
+ OaFormDefinition oaFormDefinition = oaFormDefinitionMapper.selectOne(queryWrapper);
|
|
|
|
+ if (oaFormDefinition != null) {
|
|
|
|
+ oaFormDefinitions.add(oaFormDefinition);
|
|
|
|
+ }
|
|
|
|
+ return oaFormDefinitions;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ queryWrapper.eq(OaFormDefinition::getFormStatus, 1)
|
|
|
|
+ .and(qw -> qw
|
|
|
|
+ .eq(OaFormDefinition::getFormScope, 1)
|
|
|
|
+ .or()
|
|
|
|
+ .apply("FIND_IN_SET('" + deptId + "', dept_ids) > 0")
|
|
|
|
+ .or()
|
|
|
|
+ .apply("FIND_IN_SET('" + userId + "', user_ids) > 0"));
|
|
|
|
+ oaFormDefinitions = oaFormDefinitionMapper.selectList(queryWrapper);
|
|
|
|
+ return oaFormDefinitions;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<OaFormNameResponseVO> getFormName() {
|
|
|
|
+ LambdaQueryWrapper<OaFormDefinition> queryWrapper = Wrappers.lambdaQuery();
|
|
|
|
+ queryWrapper.eq(OaFormDefinition::getTenantId, SecurityUtils.getTenantId())
|
|
|
|
+ .select(OaFormDefinition::getId, OaFormDefinition::getFormName);
|
|
|
|
+ List<OaFormDefinition> oaFormDefinitions = oaFormDefinitionMapper.selectList(queryWrapper);
|
|
|
|
+
|
|
|
|
+ List<OaFormNameResponseVO> formNameList = new ArrayList<>();
|
|
|
|
+ for (OaFormDefinition oaFormDefinition : oaFormDefinitions) {
|
|
|
|
+ OaFormNameResponseVO oaFormNameResponseVO = new OaFormNameResponseVO();
|
|
|
|
+ oaFormNameResponseVO.setFormId(oaFormDefinition.getId());
|
|
|
|
+ oaFormNameResponseVO.setFormName(oaFormDefinition.getFormName());
|
|
|
|
+ formNameList.add(oaFormNameResponseVO);
|
|
|
|
+ }
|
|
|
|
+ return formNameList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
// 表单版本更新验证
|
|
// 表单版本更新验证
|
|
private Boolean versionUpdateValid(OaFormDefinition oaFormDefinition) {
|
|
private Boolean versionUpdateValid(OaFormDefinition oaFormDefinition) {
|
|
boolean update = false;
|
|
boolean update = false;
|
|
@@ -199,8 +255,8 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
|
|
// 判断表单标识是否为空或者超长
|
|
// 判断表单标识是否为空或者超长
|
|
if (StringUtils.isBlank(formSign)) {
|
|
if (StringUtils.isBlank(formSign)) {
|
|
throw new BusinessException("表单标识不能为空");
|
|
throw new BusinessException("表单标识不能为空");
|
|
- } else if (formSign.length() > 4) {
|
|
|
|
- throw new BusinessException("表单标识长度不能超过4个字符");
|
|
|
|
|
|
+ } else if (formSign.length() < 3 || formSign.length() > 4) {
|
|
|
|
+ throw new BusinessException("表单标识长度不能少于3个字符或超过4个字符");
|
|
} else if (!formSign.matches("^[A-Z]+$")) {
|
|
} else if (!formSign.matches("^[A-Z]+$")) {
|
|
throw new BusinessException("表单标识只能包含大写字母!");
|
|
throw new BusinessException("表单标识只能包含大写字母!");
|
|
}
|
|
}
|