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 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 dataList = flowDeployMapper.selectDeployListWithConfig(query); // // 根据 processDefId 分组,并取每组中 版本号 最大的那一个 // Map groupedByProcessDefId = dataList.stream() // .collect(Collectors.toMap( // FlowProcDefWithConfigDto::getProcessDefId, // keyMapper: 提取 processDefId 作为键 // Function.identity(), // valueMapper: 直接使用对象作为值 // BinaryOperator.maxBy(Comparator.comparingInt(FlowProcDefWithConfigDto::getProcessDefVersion)) // mergeFunction: 比较 processDefVersion,取最大的 // )); // List resultList = new ArrayList<>(groupedByProcessDefId.values()); // 加载挂表单 for (FlowProcDefWithConfigDto procDef : dataList) { // 排除暂停的 SysForm sysForm = sysDeployFormService.selectSysDeployFormByDeployId(procDef.getDeploymentId()); if (Objects.nonNull(sysForm)) { procDef.setFormName(sysForm.getFormName()); procDef.setFormId(sysForm.getFormId()); } } return Result.ok().data(dataList); } }