|
|
|
@ -25,32 +25,43 @@ |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
package org.springblade.desk.process.service.impl; |
|
|
|
package org.springblade.desk.process.service.impl; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil; |
|
|
|
|
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
|
|
|
|
import jakarta.annotation.Resource; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl; |
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl; |
|
|
|
import org.springblade.core.mp.support.Condition; |
|
|
|
import org.springblade.core.mp.support.Condition; |
|
|
|
import org.springblade.core.secure.BladeUser; |
|
|
|
import org.springblade.core.secure.BladeUser; |
|
|
|
import org.springblade.core.secure.utils.AuthUtil; |
|
|
|
import org.springblade.core.secure.utils.AuthUtil; |
|
|
|
import org.springblade.core.tool.utils.BeanUtil; |
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
|
|
|
|
import org.springblade.desk.common.feign.MesNotifyMessageClient; |
|
|
|
|
|
|
|
import org.springblade.desk.common.pojo.entity.MesNotifyMessageEntity; |
|
|
|
import org.springblade.desk.process.excel.FmProjectMilestoneExcel; |
|
|
|
import org.springblade.desk.process.excel.FmProjectMilestoneExcel; |
|
|
|
import org.springblade.desk.process.mapper.FmProjectMilestoneMapper; |
|
|
|
import org.springblade.desk.process.mapper.FmProjectMilestoneMapper; |
|
|
|
import org.springblade.desk.process.pojo.entity.FmProjectApplicationEntity; |
|
|
|
import org.springblade.desk.process.pojo.entity.FmProjectApplicationEntity; |
|
|
|
import org.springblade.desk.process.pojo.entity.FmProjectMilestoneEntity; |
|
|
|
import org.springblade.desk.process.pojo.entity.FmProjectMilestoneEntity; |
|
|
|
import org.springblade.desk.process.pojo.vo.FmProjectMilestoneVO; |
|
|
|
import org.springblade.desk.process.pojo.vo.FmProjectMilestoneVO; |
|
|
|
import org.springblade.desk.process.service.IFmProjectApplicationService; |
|
|
|
import org.springblade.desk.process.service.IFmProjectApplicationService; |
|
|
|
|
|
|
|
import org.springblade.desk.process.service.IFmProjectApprovalConfigService; |
|
|
|
import org.springblade.desk.process.service.IFmProjectMilestoneService; |
|
|
|
import org.springblade.desk.process.service.IFmProjectMilestoneService; |
|
|
|
import org.springblade.resource.feign.IAttachClient; |
|
|
|
import org.springblade.resource.feign.IAttachClient; |
|
|
|
import org.springblade.resource.pojo.entity.Attach; |
|
|
|
import org.springblade.resource.pojo.entity.Attach; |
|
|
|
import org.springblade.system.feign.IUserClient; |
|
|
|
import org.springblade.system.feign.IUserClient; |
|
|
|
import org.springblade.system.pojo.entity.User; |
|
|
|
import org.springblade.system.pojo.entity.User; |
|
|
|
|
|
|
|
import org.springframework.context.annotation.Lazy; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.Date; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import java.util.Objects; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 项目里程碑 服务实现类 |
|
|
|
* 项目里程碑 服务实现类 |
|
|
|
@ -58,14 +69,18 @@ import java.util.List; |
|
|
|
* @author BladeX |
|
|
|
* @author BladeX |
|
|
|
* @since 2026-01-07 |
|
|
|
* @since 2026-01-07 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
@Slf4j |
|
|
|
@Service |
|
|
|
@Service |
|
|
|
@RequiredArgsConstructor |
|
|
|
@RequiredArgsConstructor |
|
|
|
public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMilestoneMapper, FmProjectMilestoneEntity> implements IFmProjectMilestoneService { |
|
|
|
public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMilestoneMapper, FmProjectMilestoneEntity> implements IFmProjectMilestoneService { |
|
|
|
|
|
|
|
@Lazy |
|
|
|
private final IFmProjectApplicationService fmProjectApplicationService; |
|
|
|
@Resource |
|
|
|
|
|
|
|
IFmProjectApplicationService fmProjectApplicationService; |
|
|
|
|
|
|
|
|
|
|
|
private final IAttachClient attachClient; |
|
|
|
private final IAttachClient attachClient; |
|
|
|
private final IUserClient userClient; |
|
|
|
private final IUserClient userClient; |
|
|
|
|
|
|
|
private final MesNotifyMessageClient mesNotifyMessageClient; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public IPage<FmProjectMilestoneVO> selectFmProjectMilestonePage(IPage<FmProjectMilestoneVO> page, FmProjectMilestoneVO fmProjectMilestone) { |
|
|
|
public IPage<FmProjectMilestoneVO> selectFmProjectMilestonePage(IPage<FmProjectMilestoneVO> page, FmProjectMilestoneVO fmProjectMilestone) { |
|
|
|
return page.setRecords(baseMapper.selectFmProjectMilestonePage(page, fmProjectMilestone)); |
|
|
|
return page.setRecords(baseMapper.selectFmProjectMilestonePage(page, fmProjectMilestone)); |
|
|
|
@ -83,49 +98,87 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean sendCheck(FmProjectMilestoneEntity fmProjectMilestone) { |
|
|
|
public boolean sendCheck(FmProjectMilestoneEntity fmProjectMilestone) { |
|
|
|
if (fmProjectMilestone != null && fmProjectMilestone.getId() != null) { |
|
|
|
if (BeanUtil.isEmpty(fmProjectMilestone) || Objects.isNull(fmProjectMilestone.getId())) { |
|
|
|
// 如果是项目执行发送
|
|
|
|
throw new ServiceException("参数错误"); |
|
|
|
if (FmProjectMilestoneEntity.CHECK_RESULT_TREAT.equals(fmProjectMilestone.getCheckResult())) { |
|
|
|
} |
|
|
|
fmProjectMilestone.setCheckMan(String.valueOf(AuthUtil.getUser().getUserId())); |
|
|
|
// TODO: 2026/5/27 是否手动更新
|
|
|
|
if (StringUtils.isBlank(fmProjectMilestone.getMilestoneMemo())) { |
|
|
|
FmProjectMilestoneEntity entity = getById(fmProjectMilestone.getId()); |
|
|
|
throw new ServiceException("请先维护节点信息"); |
|
|
|
if (BeanUtil.isEmpty(entity)) { |
|
|
|
|
|
|
|
throw new ServiceException("里程碑信息获取失败"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (Objects.isNull(fmProjectMilestone.getCheckResult())) { |
|
|
|
|
|
|
|
throw new ServiceException("请选择核查结果"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (!FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult()) || |
|
|
|
|
|
|
|
!FmProjectMilestoneEntity.CHECK_RESULT_NO.equals(fmProjectMilestone.getCheckResult())) { |
|
|
|
|
|
|
|
throw new ServiceException("请选择核查结果"); |
|
|
|
} |
|
|
|
} |
|
|
|
// 如果是项目核查
|
|
|
|
|
|
|
|
if (FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult()) || FmProjectMilestoneEntity.CHECK_RESULT_NO.equals(fmProjectMilestone.getCheckResult())) { |
|
|
|
|
|
|
|
// fmProjectMilestone.setCheckMan(pfUserInfo);
|
|
|
|
//设置核查人为上一节点选择的审批人,校验当前登录人与上一节点所选审批人是否一致
|
|
|
|
|
|
|
|
if (!entity.getNextApproverId().equals(AuthUtil.getUserId())) { |
|
|
|
|
|
|
|
throw new ServiceException("您不是当前里程碑的核查人"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
fmProjectMilestone.setCheckMan(entity.getNextApproverId().toString()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果核查通过,需要流转到核准节点
|
|
|
|
if (FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult())) { |
|
|
|
if (FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult())) { |
|
|
|
|
|
|
|
// 检查是否选择了下一节点审批人(核准人)
|
|
|
|
|
|
|
|
if (Objects.isNull(fmProjectMilestone.getNextApproverId())) { |
|
|
|
|
|
|
|
throw new ServiceException("请选择下一节点(核准)的审批人"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
R<User> userR = userClient.userInfoById(fmProjectMilestone.getNextApproverId()); |
|
|
|
|
|
|
|
if (!userR.isSuccess() || BeanUtil.isEmpty(userR.getData())) { |
|
|
|
|
|
|
|
throw new RuntimeException("下一节点(核准)的审批人不存在"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 设置核准人为选择的审批人
|
|
|
|
|
|
|
|
fmProjectMilestone.setGradeMan(userR.getData().getRealName()); |
|
|
|
|
|
|
|
fmProjectMilestone.setGradeManId(fmProjectMilestone.getNextApproverId()); |
|
|
|
|
|
|
|
// 设置评价状态为待评价
|
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_TREAT); |
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_TREAT); |
|
|
|
fmProjectMilestone.setGradeMan(String.valueOf(AuthUtil.getUser().getUserId())); |
|
|
|
|
|
|
|
|
|
|
|
//向下一节点审批人发送消息
|
|
|
|
|
|
|
|
sendNotificationToNextApproverA(fmProjectMilestone); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fmProjectMilestone.setCheckTime(new Date()); |
|
|
|
fmProjectMilestone.setCheckTime(new Date()); |
|
|
|
} |
|
|
|
|
|
|
|
baseMapper.updateById(fmProjectMilestone); |
|
|
|
baseMapper.updateById(fmProjectMilestone); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// 与旧mes一致
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean gradeSubmit(FmProjectMilestoneEntity fmProjectMilestone) { |
|
|
|
public boolean gradeSubmit(FmProjectMilestoneEntity fmProjectMilestone) { |
|
|
|
if (fmProjectMilestone != null && fmProjectMilestone.getId() != null) { |
|
|
|
if (BeanUtil.isEmpty(fmProjectMilestone) || Objects.isNull(fmProjectMilestone.getId())) { |
|
|
|
|
|
|
|
throw new ServiceException("参数错误"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
BladeUser bladeUser = AuthUtil.getUser(); |
|
|
|
BladeUser bladeUser = AuthUtil.getUser(); |
|
|
|
User user = userClient.userInfoById(bladeUser.getUserId()).getData(); |
|
|
|
User user = userClient.userInfoById(bladeUser.getUserId()).getData(); |
|
|
|
|
|
|
|
//检查当前登录人与评价人一致
|
|
|
|
|
|
|
|
if (!user.getId().equals(fmProjectMilestone.getNextApproverId())) { |
|
|
|
|
|
|
|
throw new ServiceException("您不是当前里程碑的评价人"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fmProjectMilestone.setGradeMan(user.getRealName()); |
|
|
|
fmProjectMilestone.setGradeMan(user.getRealName()); |
|
|
|
Double score = fmProjectMilestone.getScore(); |
|
|
|
Double score = fmProjectMilestone.getScore(); |
|
|
|
fmProjectMilestone.setScore(score); |
|
|
|
fmProjectMilestone.setScore(score); |
|
|
|
|
|
|
|
|
|
|
|
if (score > 95) { |
|
|
|
if (score > 95.0) { |
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_Y); |
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_Y); |
|
|
|
} else if (score >= 85 && score <= 95) { |
|
|
|
} else if (score >= 85.0) { |
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_L); |
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_L); |
|
|
|
} else if (score >= 75 && score <= 84) { |
|
|
|
} else if (score >= 75.0 && score <= 84.0) { |
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_Z); |
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_Z); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_C); |
|
|
|
fmProjectMilestone.setGrade(FmProjectMilestoneEntity.GRADE_C); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fmProjectMilestone.setOkTime(new Date()); |
|
|
|
fmProjectMilestone.setOkTime(new Date()); |
|
|
|
fmProjectMilestone.setEvaluate(fmProjectMilestone.getEvolve()); |
|
|
|
fmProjectMilestone.setEvaluate(fmProjectMilestone.getEvolve()); |
|
|
|
|
|
|
|
|
|
|
|
// 如果评价分数在75分以上,并且执行类型不是延期。则代表本节点已经完成
|
|
|
|
// 如果评价分数在75分以上,并且执行类型不是延期。则代表本节点已经完成
|
|
|
|
if (score < 75 && !FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteResult())) { |
|
|
|
if (score < 75 && !FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteResult())) { |
|
|
|
fmProjectMilestone.setCheckResult(FmProjectMilestoneEntity.CHECK_RESULT_TREAT); |
|
|
|
fmProjectMilestone.setCheckResult(FmProjectMilestoneEntity.CHECK_RESULT_TREAT); |
|
|
|
@ -133,13 +186,14 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
baseMapper.updateById(fmProjectMilestone); |
|
|
|
baseMapper.updateById(fmProjectMilestone); |
|
|
|
|
|
|
|
|
|
|
|
// 如果选择的是延期,则生成一条新的里程碑,此里程碑关闭
|
|
|
|
// 如果选择的是延期,则生成一条新的里程碑,此里程碑关闭
|
|
|
|
if (FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteResult())) { |
|
|
|
if (FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteResult())) { |
|
|
|
FmProjectMilestoneEntity projectMilestoneClone = BeanUtil.copyProperties(fmProjectMilestone, FmProjectMilestoneEntity.class); |
|
|
|
FmProjectMilestoneEntity projectMilestoneClone = BeanUtil.copyProperties(fmProjectMilestone, FmProjectMilestoneEntity.class); |
|
|
|
projectMilestoneClone.setId(null); |
|
|
|
projectMilestoneClone.setId(null); |
|
|
|
projectMilestoneClone.setDelayDate(Boolean.TRUE); |
|
|
|
projectMilestoneClone.setDelayDate(Boolean.TRUE); |
|
|
|
String paIndex = fmProjectMilestone.getPaIndex(); |
|
|
|
String paIndex = fmProjectMilestone.getPaIndex(); |
|
|
|
Double paIndexDou = Double.valueOf(paIndex) + 0.01; |
|
|
|
Double paIndexDou = Double.parseDouble(paIndex) + 0.01; |
|
|
|
String format = "0"; |
|
|
|
String format = "0"; |
|
|
|
if (paIndexDou >= 2) { |
|
|
|
if (paIndexDou >= 2) { |
|
|
|
paIndexDou = paIndexDou + 0.001; |
|
|
|
paIndexDou = paIndexDou + 0.001; |
|
|
|
@ -166,8 +220,9 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile |
|
|
|
// 获取所有得节点信息,看是否都已经完成
|
|
|
|
// 获取所有得节点信息,看是否都已经完成
|
|
|
|
FmProjectApplicationEntity fmProjectApplication = new FmProjectApplicationEntity(); |
|
|
|
FmProjectApplicationEntity fmProjectApplication = new FmProjectApplicationEntity(); |
|
|
|
List<FmProjectMilestoneEntity> fmProjectMilestoneList = baseMapper |
|
|
|
List<FmProjectMilestoneEntity> fmProjectMilestoneList = baseMapper |
|
|
|
.selectList(new QueryWrapper<FmProjectMilestoneEntity>().lambda() |
|
|
|
.selectList(Wrappers.lambdaQuery(FmProjectMilestoneEntity.class) |
|
|
|
.eq(FmProjectMilestoneEntity::getPaId, fmProjectMilestone.getPaId())); |
|
|
|
.eq(FmProjectMilestoneEntity::getPaId, fmProjectMilestone.getPaId())); |
|
|
|
|
|
|
|
|
|
|
|
Boolean isOk = Boolean.TRUE; |
|
|
|
Boolean isOk = Boolean.TRUE; |
|
|
|
if (fmProjectMilestoneList != null && fmProjectMilestoneList.size() > 0) { |
|
|
|
if (fmProjectMilestoneList != null && fmProjectMilestoneList.size() > 0) { |
|
|
|
for (FmProjectMilestoneEntity projectMilestone : fmProjectMilestoneList) { |
|
|
|
for (FmProjectMilestoneEntity projectMilestone : fmProjectMilestoneList) { |
|
|
|
@ -184,15 +239,37 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public boolean projectExecute(FmProjectMilestoneEntity fmProjectMilestone) { |
|
|
|
public boolean projectExecute(FmProjectMilestoneEntity fmProjectMilestone) { |
|
|
|
if (fmProjectMilestone != null && fmProjectMilestone.getId() != null) { |
|
|
|
check(fmProjectMilestone); |
|
|
|
fmProjectMilestone.setUpdateTime(new Date()); |
|
|
|
|
|
|
|
baseMapper.updateById(fmProjectMilestone); |
|
|
|
// 如果执行结果为完成或延期,需要选择下一节点审批人
|
|
|
|
|
|
|
|
if (FmProjectMilestoneEntity.EXECUTE_RESULT_JXSQ.equals(fmProjectMilestone.getExecuteResult()) |
|
|
|
|
|
|
|
|| FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteResult())) { |
|
|
|
|
|
|
|
if (Objects.nonNull(fmProjectMilestone.getNextApproverId())) { |
|
|
|
|
|
|
|
R<User> userR = userClient.userInfoById(fmProjectMilestone.getNextApproverId()); |
|
|
|
|
|
|
|
if (!userR.isSuccess() || BeanUtil.isEmpty(userR.getData())) { |
|
|
|
|
|
|
|
throw new RuntimeException("请检查下一节点(核查)的审批人"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (Objects.isNull(fmProjectMilestone.getNextApproverId())) { |
|
|
|
|
|
|
|
fmProjectMilestone.setNextApproverId(AuthUtil.getUserId()); |
|
|
|
|
|
|
|
fmProjectMilestone.setNextApproverName(AuthUtil.getNickName()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FmProjectMilestoneEntity entity = getById(fmProjectMilestone.getId()); |
|
|
|
|
|
|
|
entity.setMilestoneMemo(fmProjectMilestone.getMilestoneMemo()); |
|
|
|
|
|
|
|
entity.setEvolve(fmProjectMilestone.getEvolve()); |
|
|
|
|
|
|
|
entity.setLastPlan(fmProjectMilestone.getLastPlan()); |
|
|
|
|
|
|
|
entity.setExecuteResult(fmProjectMilestone.getExecuteResult()); |
|
|
|
|
|
|
|
entity.setDelayTime(fmProjectMilestone.getDelayTime()); |
|
|
|
|
|
|
|
entity.setUpdateTime(new Date()); |
|
|
|
|
|
|
|
updateById(entity); |
|
|
|
//如果类型选择终止,则后面的里程碑就不需要继续执行
|
|
|
|
//如果类型选择终止,则后面的里程碑就不需要继续执行
|
|
|
|
if (fmProjectMilestone.getExecuteResult().equals(FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ)) { |
|
|
|
if (fmProjectMilestone.getExecuteResult().equals(FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ)) { |
|
|
|
FmProjectApplicationEntity fmProjectApplication = fmProjectMilestone.getFmProjectApplication(); |
|
|
|
FmProjectApplicationEntity fmProjectApplication = fmProjectMilestone.getFmProjectApplication(); |
|
|
|
@ -201,15 +278,86 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile |
|
|
|
.selectList(new QueryWrapper<FmProjectMilestoneEntity>().lambda() |
|
|
|
.selectList(new QueryWrapper<FmProjectMilestoneEntity>().lambda() |
|
|
|
.eq(FmProjectMilestoneEntity::getPaId, fmProjectApplication.getId())); |
|
|
|
.eq(FmProjectMilestoneEntity::getPaId, fmProjectApplication.getId())); |
|
|
|
for (FmProjectMilestoneEntity projectMilestone : fmProjectMilestoneList) { |
|
|
|
for (FmProjectMilestoneEntity projectMilestone : fmProjectMilestoneList) { |
|
|
|
if(Double.valueOf(projectMilestone.getPaIndex())>Double.valueOf(paIndex)){ |
|
|
|
if (Double.parseDouble(projectMilestone.getPaIndex()) > Double.parseDouble(paIndex)) { |
|
|
|
projectMilestone.setExecuteResult(FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ); |
|
|
|
projectMilestone.setExecuteResult(FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ); |
|
|
|
baseMapper.updateById(projectMilestone); |
|
|
|
baseMapper.updateById(projectMilestone); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//向下一节点审批人发送消息
|
|
|
|
|
|
|
|
sendNotificationToNextApprover(fmProjectMilestone); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
private void sendNotificationToNextApprover(FmProjectMilestoneEntity fmProjectMilestone) { |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
// 构建通知消息
|
|
|
|
|
|
|
|
String title = String.format("里程碑计划核查提醒 - %s", fmProjectMilestone.getMilestonePlan()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String content = String.format("里程碑计划核查详情, 里程碑计划:%s", fmProjectMilestone.getMilestonePlan()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 创建通知消息实体
|
|
|
|
|
|
|
|
MesNotifyMessageEntity notifyMessage = MesNotifyMessageEntity.builder() |
|
|
|
|
|
|
|
.title(title) |
|
|
|
|
|
|
|
.content(content) |
|
|
|
|
|
|
|
.receiveUserId(fmProjectMilestone.getNextApproverId()) |
|
|
|
|
|
|
|
.build(); |
|
|
|
|
|
|
|
mesNotifyMessageClient.save(notifyMessage); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
|
|
log.error("发送里程碑计划审批提醒异常,里程碑计划: {}", fmProjectMilestone.getMilestonePlan(), e); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void sendNotificationToNextApproverA(FmProjectMilestoneEntity fmProjectMilestone) { |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
// 构建通知消息
|
|
|
|
|
|
|
|
String title = String.format("里程碑计划核准提醒 - %s", fmProjectMilestone.getMilestonePlan()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String content = String.format("里程碑计划核准详情 , 里程碑计划:%s", fmProjectMilestone.getMilestonePlan()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 创建通知消息实体
|
|
|
|
|
|
|
|
MesNotifyMessageEntity notifyMessage = MesNotifyMessageEntity.builder() |
|
|
|
|
|
|
|
.title(title) |
|
|
|
|
|
|
|
.content(content) |
|
|
|
|
|
|
|
.receiveUserId(fmProjectMilestone.getNextApproverId()) |
|
|
|
|
|
|
|
.build(); |
|
|
|
|
|
|
|
mesNotifyMessageClient.save(notifyMessage); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
|
|
log.error("发送里程碑计划审批提醒异常,里程碑计划: {}", fmProjectMilestone.getMilestonePlan(), e); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void check(FmProjectMilestoneEntity fmProjectMilestone) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (BeanUtil.isEmpty(fmProjectMilestone) || Objects.isNull(fmProjectMilestone.getId())) { |
|
|
|
|
|
|
|
throw new RuntimeException("参数异常"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (Objects.isNull(fmProjectMilestone.getExecuteResult())) { |
|
|
|
|
|
|
|
throw new RuntimeException("请选择执行结果"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// 剔除`无`选项
|
|
|
|
|
|
|
|
if (!FmProjectMilestoneEntity.executeResultMap.containsKey(fmProjectMilestone.getExecuteResult()) && !fmProjectMilestone.getExecuteResult().equals(FmProjectMilestoneEntity.EXECUTE_RESULT_NO)) { |
|
|
|
|
|
|
|
throw new RuntimeException("请选择正确的执行结果"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (StrUtil.isEmpty(fmProjectMilestone.getMilestoneMemo())) { |
|
|
|
|
|
|
|
throw new RuntimeException("请填写里程碑描述"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (StrUtil.isEmpty(fmProjectMilestone.getEvolve())) { |
|
|
|
|
|
|
|
throw new RuntimeException("请填写进展情况"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (StrUtil.isEmpty(fmProjectMilestone.getLastPlan())) { |
|
|
|
|
|
|
|
throw new RuntimeException("请填写下一步计划"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (Objects.isNull(fmProjectMilestone.getExecuteResult())) { |
|
|
|
|
|
|
|
throw new RuntimeException("请选择执行结果"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (StrUtil.isEmpty(fmProjectMilestone.getPaIndex())) { |
|
|
|
|
|
|
|
throw new RuntimeException("请填写序号"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
FmProjectApplicationEntity fmProjectApplication = fmProjectMilestone.getFmProjectApplication(); |
|
|
|
|
|
|
|
if (BeanUtil.isEmpty(fmProjectApplication) || Objects.isNull(fmProjectApplication.getId())) { |
|
|
|
|
|
|
|
throw new RuntimeException("参数异常"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
|