From dc5e5c07549b493e21c11dc7929c32ea9fd732b0 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 08 十月 2026 17:08:26 +0800
Subject: [PATCH] 协同办公系统模块优化
---
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java | 380 ++++++++++++++++++++++++++++++++++-------------------
1 files changed, 242 insertions(+), 138 deletions(-)
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
index e866bbf..938414b 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -5,14 +5,22 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.approve.enums.ApproveType;
+import com.ruoyi.approve.mapper.ApproveFlowDefinitionMapper;
+import com.ruoyi.approve.mapper.ApproveFlowNodeDefinitionMapper;
import com.ruoyi.approve.mapper.ApproveNodeMapper;
import com.ruoyi.approve.mapper.ApproveProcessMapper;
+import com.ruoyi.approve.pojo.ApproveFlowDefinition;
+import com.ruoyi.approve.pojo.ApproveFlowNodeDefinition;
import com.ruoyi.approve.pojo.ApproveNode;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.approve.service.IApproveNodeService;
import com.ruoyi.approve.service.IApproveProcessService;
import com.ruoyi.approve.utils.DailyRedisCounter;
import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
+import com.ruoyi.approve.vo.ApproveNodeVO;
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.utils.SecurityUtils;
@@ -22,12 +30,10 @@
import com.ruoyi.project.system.mapper.SysDeptMapper;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.pojo.CommonFile;
-import lombok.AllArgsConstructor;
+import com.ruoyi.sales.pojo.SalesLedger;
import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@@ -41,7 +47,9 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
@Service
@@ -49,174 +57,270 @@
public class ApproveProcessServiceImpl extends ServiceImpl<ApproveProcessMapper, ApproveProcess> implements IApproveProcessService {
private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd");
- private final StringRedisTemplate redisTemplate;
-
private final DailyRedisCounter dailyRedisCounter;
-
private final SysDeptMapper sysDeptMapper;
private final IApproveNodeService approveNodeService;
private final SysUserMapper sysUserMapper;
private final ApproveProcessMapper approveProcessMapper;
+ private final ApproveNodeMapper approveNodeMapper;
private final TempFileServiceImpl tempFileService;
private final CommonFileMapper commonFileMapper;
+ private final SalesLedgerMapper salesLedgerMapper;
+ private final ApproveFlowDefinitionMapper flowDefinitionMapper;
+ private final ApproveFlowNodeDefinitionMapper flowNodeDefinitionMapper;
+ private final ObjectMapper objectMapper;
@Override
- public void addApprove(ApproveProcessVO approveProcessVO) throws Exception {
- SysUser sysUser = sysUserMapper.selectUserById(approveProcessVO.getApproveUser());
- SysDept sysDept = sysDeptMapper.selectDeptById(approveProcessVO.getApproveDeptId());
- String[] split = approveProcessVO.getApproveUserIds().split(",");
- List<Long> longList = Arrays.stream(split)
- .map(Long::valueOf) // 灏嗘瘡涓� String 杞崲涓� Long
- .collect(Collectors.toList());
- List<SysUser> sysUsers = sysUserMapper.selectUserByIds(longList);
- if(CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("瀹℃牳鐢ㄦ埛涓嶅瓨鍦�");
- if(sysDept == null) throw new RuntimeException("閮ㄩ棬涓嶅瓨鍦�");
- if(sysUser == null) throw new RuntimeException("鐢宠浜轰笉瀛樺湪");
- String today = LocalDate.now().format(DATE_FORMAT);
- Long approveId = dailyRedisCounter.incrementAndGetByDb();
- String formattedCount = String.format("%03d", approveId);
- //娴佺▼ ID
- String approveID = today + formattedCount;
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- ApproveProcess approveProcess = new ApproveProcess();
- approveProcess.setApproveId(approveID);
- approveProcess.setApproveUser(approveProcessVO.getApproveUser());
- approveProcess.setApproveUserName(sysUser.getNickName());
- approveProcess.setApproveDeptId(approveProcessVO.getApproveDeptId());
- approveProcess.setApproveDeptName(sysDept.getDeptName());
- approveProcess.setApproveUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
- approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? null : dateFormat.parse(approveProcessVO.getApproveTime()));
- approveProcess.setApproveReason(approveProcessVO.getApproveReason());
- approveProcess.setApproveOverTime(null);
- approveProcess.setApproveStatus(0);
- approveProcess.setApproveDelete(0);
- approveProcess.setApproveType(approveProcessVO.getApproveType());
- approveProcess.setCreateTime(LocalDateTime.now());
- approveProcess.setTenantId(approveProcessVO.getApproveDeptId());
- approveProcess.setApproveUserIds(approveProcessVO.getApproveUserIds());
- approveProcess.setApproveUserCurrentId(longList.get(0));
- approveProcess.setApproveUserCurrentName(sysUsers
- .stream()
- .filter(SysUser -> SysUser.getUserId().equals(longList.get(0)))
- .collect(Collectors.toList())
- .get(0)
- .getNickName());
- // 璁剧疆鐘舵�佷负閲嶆柊鎻愪氦
- if(approveProcessVO.getId() != null){
- ApproveProcess approveProcess1 = approveProcessMapper.selectById(approveProcessVO.getId());
- approveProcess1.setApproveStatus(4);
- approveProcessMapper.updateById(approveProcess1);
+ public void addApprove(ApproveProcessVO request) throws Exception {
+ if (request == null || request.getApproveType() == null) throw new RuntimeException("瀹℃壒绫诲瀷涓嶈兘涓虹┖");
+ ApproveType type = ApproveType.fromCode(request.getApproveType());
+ Long tenantId = tenantId();
+ SysUser applicant = SecurityUtils.getLoginUser().getUser();
+ Long deptId = resolveDeptId(request.getApproveDeptId());
+ SysDept dept = sysDeptMapper.selectDeptById(deptId);
+ if (dept == null) throw new RuntimeException("鐢宠閮ㄩ棬涓嶅瓨鍦�");
+
+ List<ApproveNodeVO> nodes = resolveNodes(request, tenantId);
+ List<SysUser> approvers = validateApprovers(nodes, tenantId);
+ prepareBusinessData(request, type, tenantId);
+
+ String approveCode = LocalDate.now().format(DATE_FORMAT)
+ + String.format("%03d", dailyRedisCounter.incrementAndGetByDb());
+ ApproveProcess process = new ApproveProcess();
+ process.setApproveId(approveCode);
+ process.setApproveUser(applicant.getUserId());
+ process.setApproveUserName(applicant.getNickName());
+ process.setApproveDeptId(deptId);
+ process.setApproveDeptName(dept.getDeptName());
+ process.setApproveUserIds(nodes.stream().map(item -> String.valueOf(item.getUserId())).collect(Collectors.joining(",")));
+ process.setApproveUserNames(approvers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
+ process.setApproveTime(parseDate(request.getApproveTime()));
+ process.setApproveReason(request.getApproveReason());
+ process.setApproveStatus(0);
+ process.setApproveDelete(0);
+ process.setApproveType(type.getCode());
+ process.setTenantId(tenantId);
+ process.setBusinessId(request.getBusinessId());
+ process.setBusinessNo(request.getBusinessNo());
+ process.setBusinessTitle(request.getBusinessTitle());
+ process.setAmount(request.getAmount());
+ process.setBusinessData(request.getBusinessData());
+ process.setFlowDefinitionId(request.getFlowDefinitionId());
+ process.setCreateTime(LocalDateTime.now());
+ process.setUpdateTime(LocalDateTime.now());
+ approveProcessMapper.insert(process);
+ approveNodeService.initApproveNodes(nodes, approveCode, tenantId);
+ tempFileService.migrateTempFilesToFormal(process.getId(), request.getTempFileIds(), FileNameType.ApproveProcess.getValue());
+ }
+
+ private void prepareBusinessData(ApproveProcessVO request, ApproveType type, Long tenantId) throws JsonProcessingException {
+ if (type == ApproveType.SALES_CONTRACT) {
+ if (request.getBusinessId() == null) throw new RuntimeException("璇烽�夋嫨閿�鍞悎鍚�");
+ SalesLedger ledger = salesLedgerMapper.selectById(request.getBusinessId());
+ if (ledger == null || !tenantId.equals(ledger.getTenantId())) throw new RuntimeException("閿�鍞悎鍚屼笉瀛樺湪鎴栦笉灞炰簬褰撳墠绉熸埛");
+ Long duplicate = approveProcessMapper.selectCount(new LambdaQueryWrapper<ApproveProcess>()
+ .eq(ApproveProcess::getTenantId, tenantId)
+ .eq(ApproveProcess::getApproveType, ApproveType.SALES_CONTRACT.getCode())
+ .eq(ApproveProcess::getBusinessId, ledger.getId())
+ .in(ApproveProcess::getApproveStatus, Arrays.asList(0, 1))
+ .eq(ApproveProcess::getApproveDelete, 0));
+ if (duplicate != null && duplicate > 0) throw new RuntimeException("璇ラ攢鍞悎鍚屽凡鏈夊緟瀹℃祦绋�");
+ Map<String, Object> snapshot = new LinkedHashMap<>();
+ snapshot.put("salesLedgerId", ledger.getId());
+ snapshot.put("salesContractNo", ledger.getSalesContractNo());
+ snapshot.put("customerContractNo", ledger.getCustomerContractNo());
+ snapshot.put("customerName", ledger.getCustomerName());
+ snapshot.put("projectName", ledger.getProjectName());
+ snapshot.put("salesman", ledger.getSalesman());
+ snapshot.put("contractAmount", ledger.getContractAmount());
+ snapshot.put("executionDate", ledger.getExecutionDate());
+ snapshot.put("paymentMethod", ledger.getPaymentMethod());
+ snapshot.put("remarks", ledger.getRemarks());
+ request.setBusinessNo(ledger.getSalesContractNo());
+ request.setBusinessTitle(StringUtils.hasText(request.getBusinessTitle())
+ ? request.getBusinessTitle() : "閿�鍞悎鍚屽鎵�-" + ledger.getSalesContractNo());
+ request.setAmount(ledger.getContractAmount());
+ request.setBusinessData(objectMapper.writeValueAsString(snapshot));
+ } else if (type == ApproveType.PURCHASE_PLAN || type == ApproveType.FREE_COLLABORATION) {
+ if (!StringUtils.hasText(request.getBusinessTitle())) throw new RuntimeException("瀹℃壒鏍囬涓嶈兘涓虹┖");
+ if (type == ApproveType.PURCHASE_PLAN && request.getAmount() == null) throw new RuntimeException("閲囪喘棰勭畻閲戦涓嶈兘涓虹┖");
+ if (!StringUtils.hasText(request.getBusinessNo())) {
+ String prefix = type == ApproveType.PURCHASE_PLAN ? "CG" : "XT";
+ request.setBusinessNo(prefix + LocalDate.now().format(DATE_FORMAT)
+ + String.format("%03d", dailyRedisCounter.incrementAndGetByDb()));
+ }
}
- save(approveProcess);
- //鍒濆鍖栧鎵硅妭鐐�
- approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(),approveID,approveProcessVO.getApproveDeptId());
- // 闄勪欢缁戝畾
- tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue());
+ }
+
+ private List<ApproveNodeVO> resolveNodes(ApproveProcessVO request, Long tenantId) {
+ if (!CollectionUtils.isEmpty(request.getNodes())) return request.getNodes();
+ if (request.getFlowDefinitionId() != null) {
+ ApproveFlowDefinition definition = flowDefinitionMapper.selectOne(new LambdaQueryWrapper<ApproveFlowDefinition>()
+ .eq(ApproveFlowDefinition::getId, request.getFlowDefinitionId())
+ .eq(ApproveFlowDefinition::getTenantId, tenantId)
+ .eq(ApproveFlowDefinition::getApproveType, request.getApproveType())
+ .eq(ApproveFlowDefinition::getEnabled, 1)
+ .eq(ApproveFlowDefinition::getDeleteFlag, 0));
+ if (definition == null) throw new RuntimeException("瀹℃壒娴佺▼瀹氫箟涓嶅瓨鍦ㄦ垨宸插仠鐢�");
+ List<ApproveFlowNodeDefinition> definitions = flowNodeDefinitionMapper.selectList(
+ new LambdaQueryWrapper<ApproveFlowNodeDefinition>()
+ .eq(ApproveFlowNodeDefinition::getFlowDefinitionId, definition.getId())
+ .eq(ApproveFlowNodeDefinition::getTenantId, tenantId)
+ .eq(ApproveFlowNodeDefinition::getDeleteFlag, 0)
+ .orderByAsc(ApproveFlowNodeDefinition::getNodeOrder));
+ List<ApproveNodeVO> result = new ArrayList<>();
+ for (ApproveFlowNodeDefinition item : definitions) {
+ if (!"USER".equals(item.getApproverType()) || !StringUtils.hasText(item.getApproverValue())) {
+ throw new RuntimeException("褰撳墠棰勮娴佺▼鍖呭惈灏氭湭鎸囧畾鐨勫鎵逛汉");
+ }
+ ApproveNodeVO node = new ApproveNodeVO();
+ node.setUserId(Long.valueOf(item.getApproverValue().split(",")[0].trim()));
+ node.setNodeName(item.getNodeName());
+ node.setConditionField(item.getConditionField());
+ node.setConditionOperator(item.getConditionOperator());
+ node.setConditionValue(item.getConditionValue());
+ result.add(node);
+ }
+ if (!result.isEmpty()) return result;
+ }
+ if (!StringUtils.hasText(request.getApproveUserIds())) throw new RuntimeException("璇烽�夋嫨瀹℃壒浜�");
+ List<ApproveNodeVO> result = new ArrayList<>();
+ for (String id : request.getApproveUserIds().split(",")) {
+ ApproveNodeVO node = new ApproveNodeVO();
+ node.setUserId(Long.valueOf(id.trim()));
+ node.setConditionOperator("ALWAYS");
+ result.add(node);
+ }
+ return result;
+ }
+
+ private List<SysUser> validateApprovers(List<ApproveNodeVO> nodes, Long tenantId) {
+ List<SysUser> users = new ArrayList<>();
+ for (ApproveNodeVO node : nodes) {
+ SysUser user = sysUserMapper.selectUserById(node.getUserId());
+ if (user == null || !tenantId.equals(user.getTenantId())) throw new RuntimeException("瀹℃壒浜轰笉瀛樺湪鎴栦笉灞炰簬褰撳墠绉熸埛");
+ users.add(user);
+ }
+ return users;
}
@Override
public List<SysDept> selectDeptListByDeptIds(Long[] deptIds) {
- List<SysDept> sysDeptList =new ArrayList<SysDept>();
+ List<SysDept> departments = new ArrayList<>();
+ if (deptIds == null) return departments;
for (Long deptId : deptIds) {
- SysDept sysDept = sysDeptMapper.selectDeptById(deptId);
- sysDeptList.add(sysDept);
+ SysDept dept = sysDeptMapper.selectDeptById(deptId);
+ if (dept != null) departments.add(dept);
}
- return sysDeptList;
+ return departments;
}
@Override
- public IPage<ApproveProcess> listAll(Page page,ApproveProcess approveProcess) {
- IPage<ApproveProcess> approveProcessIPage = approveProcessMapper.listPage(page,approveProcess);
- List<ApproveProcess> records = approveProcessIPage.getRecords();
- for (ApproveProcess record : records) {
- List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
- .eq(CommonFile::getCommonId, record.getId())
- .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue()));
- record.setCommonFileList(commonFiles);
- }
- return approveProcessIPage;
+ public IPage<ApproveProcess> listAll(Page page, ApproveProcess request) {
+ request.setTenantId(tenantId());
+ IPage<ApproveProcess> result = approveProcessMapper.listPage(page, request);
+ result.getRecords().forEach(record -> record.setCommonFileList(commonFileMapper.selectList(
+ new LambdaQueryWrapper<CommonFile>()
+ .eq(CommonFile::getCommonId, record.getId())
+ .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue()))));
+ return result;
}
@Override
- public void delApprove(Long[] ids) {
- for (Long id : ids) {
- UpdateWrapper<ApproveProcess> queryWrapper = new UpdateWrapper<>();
- queryWrapper.lambda().set(ApproveProcess::getApproveDelete, 1)
- .eq(ApproveProcess::getApproveId, id);
- update(queryWrapper);
- // 鍒犻櫎鍏宠仈鐨勫鎵硅妭鐐�
- approveNodeService.delApproveNodeByApproveId(id);
+ public void delApprove(String[] ids) {
+ if (ids == null) return;
+ for (String code : ids) {
+ ApproveProcess process = findOwnedByCode(code);
+ if (!SecurityUtils.getUserId().equals(process.getApproveUser())) throw new RuntimeException("鍙兘鍒犻櫎鏈汉鐢宠");
+ if (!(Integer.valueOf(0).equals(process.getApproveStatus()) || Integer.valueOf(3).equals(process.getApproveStatus()))) {
+ throw new RuntimeException("瀹℃牳涓殑娴佺▼涓嶈兘鍒犻櫎");
+ }
+ UpdateWrapper<ApproveProcess> wrapper = new UpdateWrapper<>();
+ wrapper.lambda().set(ApproveProcess::getApproveDelete, 1)
+ .set(ApproveProcess::getUpdateTime, LocalDateTime.now())
+ .eq(ApproveProcess::getApproveId, code)
+ .eq(ApproveProcess::getTenantId, tenantId());
+ update(wrapper);
+ approveNodeService.delApproveNodeByApproveId(code);
}
-
-
}
@Override
public ApproveProcess getApproveById(String id) {
- LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(ApproveProcess::getApproveId, id);
- queryWrapper.eq(ApproveProcess::getApproveDelete, 0);
- queryWrapper.eq(ApproveProcess::getTenantId, SecurityUtils.getLoginUser().getTenantId());
- queryWrapper.last("limit 1");
- ApproveProcess one = getOne(queryWrapper);
- one.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
- .eq(CommonFile::getCommonId, one.getId())
+ ApproveProcess process = findOwnedByCode(id);
+ process.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
+ .eq(CommonFile::getCommonId, process.getId())
.eq(CommonFile::getType, FileNameType.ApproveProcess.getValue())));
- return one;
+ return process;
}
-
- private final ApproveNodeMapper approveNodeMapper;
-
@Override
- public void updateByApproveId(ApproveGetAndUpdateVo approveGetAndUpdateVo) throws IOException {
- ApproveProcess approve = approveProcessMapper.selectById(approveGetAndUpdateVo.getId());
- approve.setApproveUserIds(approveGetAndUpdateVo.getApproveUserIds());
- approve.setApproveReason(approveGetAndUpdateVo.getApproveReason());
- SysUser sysUser = sysUserMapper.selectUserById(approveGetAndUpdateVo.getApproveUser());
- String[] split = approveGetAndUpdateVo.getApproveUserIds().split(",");
- if(split.length == 0){
- throw new RuntimeException("璇烽�夋嫨瀹℃壒浜�");
+ public void updateByApproveId(ApproveGetAndUpdateVo request) throws IOException {
+ ApproveProcess process = approveProcessMapper.selectOne(new LambdaQueryWrapper<ApproveProcess>()
+ .eq(ApproveProcess::getId, request.getId())
+ .eq(ApproveProcess::getTenantId, tenantId())
+ .eq(ApproveProcess::getApproveDelete, 0));
+ if (process == null) throw new RuntimeException("瀹℃壒涓嶅瓨鍦�");
+ if (!SecurityUtils.getUserId().equals(process.getApproveUser())) throw new RuntimeException("鍙兘缂栬緫鏈汉鐢宠");
+ if (!(Integer.valueOf(0).equals(process.getApproveStatus()) || Integer.valueOf(3).equals(process.getApproveStatus()))) {
+ throw new RuntimeException("褰撳墠瀹℃壒鐘舵�佷笉鍏佽缂栬緫");
}
- List<SysUser> sysUsers = sysUserMapper.selectUserByIds(Arrays.asList(split).stream().map(Long::parseLong).collect(Collectors.toList()));
- if(CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("璇烽�夋嫨瀹℃壒浜�");
- if(sysUser == null) throw new RuntimeException("鐢宠浜轰笉瀛樺湪");
- approve.setApproveUserName(sysUser.getNickName());
- approve.setApproveUser(sysUser.getUserId());
- //瀹℃牳涓笉鍙互缂栬緫瀹℃牳浜�
- if(approve.getApproveStatus() != 1){
- approve.setApproveUserCurrentId(Long.parseLong(split[0]));
- approve.setApproveUserCurrentName(sysUsers.stream().filter(user -> user.getUserId().equals(Long.parseLong(split[0]))).collect(Collectors.toList()).get(0).getNickName());
- }
- updateById(approve);
- //淇敼瀹℃壒浜�
- // 鍏堝垹闄� 鍚庢柊澧�
- LambdaQueryWrapper<ApproveNode> approveNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
- approveNodeLambdaQueryWrapper.eq(ApproveNode::getApproveProcessId, approve.getApproveId())
- .eq(ApproveNode::getDeleteFlag, 0)
- .eq(ApproveNode::getTenantId, SecurityUtils.getLoginUser().getTenantId())
- .orderByAsc(ApproveNode::getApproveNodeOrder);
- approveNodeMapper.delete(approveNodeLambdaQueryWrapper);
- approveNodeService.initApproveNodes(approveGetAndUpdateVo.getApproveUserIds(),approve.getApproveId(),approve.getTenantId());
+ process.setApproveReason(request.getApproveReason());
+ process.setBusinessTitle(request.getBusinessTitle());
+ process.setAmount(request.getAmount());
+ process.setBusinessData(request.getBusinessData());
+ process.setUpdateTime(LocalDateTime.now());
+ process.setApproveStatus(0);
+ process.setApproveOverTime(null);
+ approveProcessMapper.updateById(process);
-// int i = 0;
-// for (ApproveNode approveNode : list) {
-// int finalI = i;
-// if(i >= split.length){
-// approveNode.setDeleteFlag(1);
-// }else{
-// List<SysUser> collect = sysUsers.stream().filter(user -> user.getUserId().equals(Long.parseLong(split[finalI]))).collect(Collectors.toList());
-// if(CollectionUtils.isEmpty(collect)){
-// throw new RuntimeException("璇烽�夋嫨姝g‘鐨勫鎵逛汉");
-// }
-// approveNode.setApproveNodeUserId(collect.get(0).getUserId());
-// approveNode.setApproveNodeUser(collect.get(0).getNickName());
-// }
-// approveNodeMapper.updateById(approveNode);
-// i++;
-// }
- tempFileService.migrateTempFilesToFormal(approve.getId(), approveGetAndUpdateVo.getTempFileIds(), FileNameType.ApproveProcess.getValue());
+ List<ApproveNodeVO> nodes = request.getNodes();
+ if (CollectionUtils.isEmpty(nodes) && StringUtils.hasText(request.getApproveUserIds())) {
+ nodes = new ArrayList<>();
+ for (String id : request.getApproveUserIds().split(",")) {
+ ApproveNodeVO node = new ApproveNodeVO();
+ node.setUserId(Long.valueOf(id.trim()));
+ node.setConditionOperator("ALWAYS");
+ nodes.add(node);
+ }
+ }
+ if (!CollectionUtils.isEmpty(nodes)) {
+ validateApprovers(nodes, tenantId());
+ UpdateWrapper<ApproveNode> oldNodes = new UpdateWrapper<>();
+ oldNodes.lambda().set(ApproveNode::getDeleteFlag, 1)
+ .set(ApproveNode::getIsCurrent, 0)
+ .eq(ApproveNode::getApproveProcessId, process.getApproveId())
+ .eq(ApproveNode::getTenantId, tenantId());
+ approveNodeMapper.update(null, oldNodes);
+ approveNodeService.initApproveNodes(nodes, process.getApproveId(), tenantId());
+ }
+ tempFileService.migrateTempFilesToFormal(process.getId(), request.getTempFileIds(), FileNameType.ApproveProcess.getValue());
}
+ private ApproveProcess findOwnedByCode(String code) {
+ ApproveProcess process = approveProcessMapper.selectOne(new LambdaQueryWrapper<ApproveProcess>()
+ .eq(ApproveProcess::getApproveId, code)
+ .eq(ApproveProcess::getApproveDelete, 0)
+ .eq(ApproveProcess::getTenantId, tenantId())
+ .last("limit 1"));
+ if (process == null) throw new RuntimeException("瀹℃壒涓嶅瓨鍦�");
+ return process;
+ }
+ private Long resolveDeptId(Long requested) {
+ Long[] allowed = SecurityUtils.getDeptId();
+ if (requested == null) return SecurityUtils.getLoginUser().getCurrentDeptId();
+ if (allowed != null && Arrays.asList(allowed).contains(requested)) return requested;
+ Long current = SecurityUtils.getLoginUser().getCurrentDeptId();
+ if (requested.equals(current)) return requested;
+ throw new RuntimeException("鏃犳潈浣跨敤璇ョ敵璇烽儴闂�");
+ }
+
+ private Date parseDate(String value) throws ParseException {
+ return StringUtils.hasText(value) ? new SimpleDateFormat("yyyy-MM-dd").parse(value) : new Date();
+ }
+
+ private Long tenantId() {
+ return SecurityUtils.getLoginUser().getTenantId();
+ }
}
--
Gitblit v1.9.3