package com.ycl.service.impl;
|
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
import com.github.pagehelper.PageInfo;
|
import com.ycl.domain.dto.FlowProcDefDto;
|
import com.ycl.domain.dto.FlowProcDefWithConfigDto;
|
import com.ycl.domain.entity.ProcessConfigInfo;
|
import com.ycl.domain.entity.SysForm;
|
import com.ycl.domain.query.ProcessConfigInfoQuery;
|
import com.ycl.mapper.FlowDeployMapper;
|
import com.ycl.mapper.ProcessConfigInfoMapper;
|
import com.ycl.service.ISysDeployFormService;
|
import com.ycl.service.ProcessConfigInfoService;
|
import com.ycl.common.base.Result;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.domain.form.ProcessConfigInfoForm;
|
import com.ycl.domain.vo.ProcessConfigInfoVO;
|
import org.springframework.stereotype.Service;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.beans.BeanUtils;
|
|
import java.util.*;
|
import java.util.function.BinaryOperator;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
/**
|
* 流程类型配置信息表 服务实现类
|
*
|
* @author xp
|
* @since 2024-11-26
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class ProcessConfigInfoServiceImpl extends ServiceImpl<ProcessConfigInfoMapper, ProcessConfigInfo> implements ProcessConfigInfoService {
|
|
private final ProcessConfigInfoMapper processConfigInfoMapper;
|
private final ISysDeployFormService sysDeployFormService;
|
private final FlowDeployMapper flowDeployMapper;
|
|
/**
|
* 添加
|
* @param form
|
* @return
|
*/
|
@Override
|
public Result save(ProcessConfigInfoForm form) {
|
// 根据部署id和版本号查询是否保存过,有就修改,没有就新增
|
ProcessConfigInfo entity = new LambdaQueryChainWrapper<>(baseMapper)
|
.eq(ProcessConfigInfo::getProcessDefId, form.getProcessDefId())
|
.eq(ProcessConfigInfo::getProcessDefVersion, form.getProcessDefVersion())
|
.one();
|
if (Objects.isNull(entity)) {
|
entity = ProcessConfigInfoForm.getEntityByForm(form, null);
|
baseMapper.insert(entity);
|
} else {
|
new LambdaUpdateChainWrapper<>(baseMapper)
|
.eq(ProcessConfigInfo::getProcessDefId, form.getProcessDefId())
|
.eq(ProcessConfigInfo::getProcessDefVersion, form.getProcessDefVersion())
|
.set(ProcessConfigInfo::getProjectType, form.getProjectType())
|
.set(ProcessConfigInfo::getFundType, form.getFundType())
|
.set(ProcessConfigInfo::getInvestType, form.getInvestType())
|
.set(ProcessConfigInfo::getImportanceType, form.getImportanceType())
|
.update();
|
}
|
return Result.ok("保存成功");
|
}
|
|
/**
|
* 根据id查找
|
* @return
|
*/
|
@Override
|
public Result detail(String processDefId, Integer processDefVersion) {
|
ProcessConfigInfo entity = new LambdaQueryChainWrapper<>(baseMapper)
|
.eq(ProcessConfigInfo::getProcessDefId, processDefId)
|
.eq(ProcessConfigInfo::getProcessDefVersion, processDefVersion)
|
.one();
|
ProcessConfigInfoVO vo = new ProcessConfigInfoVO();
|
if (Objects.isNull(entity)) {
|
return Result.ok().data(entity);
|
} else {
|
BeanUtils.copyProperties(entity, vo);
|
}
|
return Result.ok().data(vo);
|
}
|
|
|
@Override
|
public Result list(ProcessConfigInfoQuery query) {
|
List<FlowProcDefWithConfigDto> dataList = flowDeployMapper.selectDeployListWithConfig(query);
|
|
// 根据 processDefId 分组,并取每组中 版本号 最大的那一个
|
Map<String, FlowProcDefWithConfigDto> groupedByProcessDefId = dataList.stream()
|
.collect(Collectors.toMap(
|
FlowProcDefWithConfigDto::getProcessDefId, // keyMapper: 提取 processDefId 作为键
|
Function.identity(), // valueMapper: 直接使用对象作为值
|
BinaryOperator.maxBy(Comparator.comparingInt(FlowProcDefWithConfigDto::getProcessDefVersion)) // mergeFunction: 比较 processDefVersion,取最大的
|
));
|
List<FlowProcDefWithConfigDto> resultList = new ArrayList<>(groupedByProcessDefId.values());
|
|
// 加载挂表单
|
for (FlowProcDefWithConfigDto procDef : resultList) {
|
SysForm sysForm = sysDeployFormService.selectSysDeployFormByDeployId(procDef.getDeploymentId());
|
if (Objects.nonNull(sysForm)) {
|
procDef.setFormName(sysForm.getFormName());
|
procDef.setFormId(sysForm.getFormId());
|
}
|
}
|
return Result.ok().data(resultList);
|
}
|
}
|