feat: 企标制修订征求意见流程初步准备

This commit is contained in:
2024-09-23 16:56:38 +08:00
parent a7516d5b95
commit e4d0e6b601
18 changed files with 1457 additions and 4 deletions
@@ -16,6 +16,7 @@ public enum ProcessTypeEnum {
STANDARD_COMPLIANCE_CHECK("法规符合性排查流程", 3, "com.jero.modules.activiti.process.standardComplianceCheck.service.StandardComplianceCheckFlow", "/workCenter/RegulatoryComplianceCheckProcess", "/workCenter/RegulatoryComplianceCheckProcess"),
MARKET_STANDARD_PUBLISH("市场清单发布流程", 4, "com.jero.modules.activiti.process.ms.service.impl.ProcessMarketStandardReleaseServiceImpl", "/workCenter/MarketListReleaseProcess", "/workCenter/MarketListReleaseProcess"),
ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", 5, "com.jero.modules.activiti.process.abolish.service.impl.ProcessAbolishReleaseServiceImpl", "/workCenter/AbolishReleaseProcess", "/workCenter/AbolishReleaseProcess"),
ES_REVISION_ADVICE("企业标准制修订及征求意见流程", 6, "com.jero.modules.activiti.process.esRevisionAdvice.service.impl.EsRevisionServiceImpl","/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow","/workCenter/enterpriseStandardRevision")
;
private final String name;
@@ -16,6 +16,7 @@ public enum ProcessType {
STANDARD_COMPLIANCE_CHECK("法规符合性评估流程", "3", "laws-evaluation-main", "ProcessStandardComplianceCheckServiceImpl"),
MARKET_STANDARD_PUBLISH("市场清单发布流程", "4", "market_standard_publish", "ProcessNewStandardImportServiceImpl"),
ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", "5", "enterprise_standard_abolish_publish", "ProcessAbolishReleaseServiceImpl"),
ES_REVISION_ADVICE("企标制修订征求意见流程", "6", "es-revision-advice", "ProcessEsRevisionServiceImpl")
;
private final String name;
@@ -0,0 +1,101 @@
package com.jero.modules.activiti.process.esRevisionAdvice.controller;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.aspect.annotation.Translation;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO;
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ProcessSccVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @author: Mzaxd
* @Date: 2023/10/18 10:44
*/
@Slf4j
@RestController
@Api(tags = "企标制修订流程")
@RequestMapping("/process/es/revision")
public class ESRevisionController {
@Resource
private EsRevisionService revisionService;
@Resource
private ActFlowCommonService actFlowCommonService;
/**
* 企标制修订流程
*
* @param processInfoVO
*/
@AutoLog(value = "企标制修订流程-发起流程")
@ApiOperation(value="企标制修订流程-发起流程", notes="企标制修订流程-发起流程")
@PostMapping("/start")
public Result<?> startProcess(@RequestBody ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
revisionService.startProcess(processInfoVO);
return Result.OK();
}
@AutoLog(value = "法规符合性排查流程-提交")
@ApiOperation(value = "法规符合性排查流程-提交", notes = "法规符合性排查流程-提交")
@PostMapping("/submit")
public Result<T> submit(@RequestBody ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
revisionService.submit(processInfoVO);
return Result.OK();
}
/**
* 保存到待办
* @param taskId
*/
@AutoLog(value = "企标制修订流程-办理")
@ApiOperation(value="企标制修订流程-办理", notes="企标制修订流程-办理")
@GetMapping("/handle/{taskId}")
@Translation
public Result<?> handle(@PathVariable("taskId") String taskId) {
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.ES_REVISION_ADVICE);
if (draft != null) {
return Result.OK(draft);
}
return Result.OK(revisionService.getHandleData(taskId));
}
/**
* 同意
*
* @param processInfoVO
*/
@AutoLog(value = "企标制修订流程-同意")
@ApiOperation(value="企标制修订流程-同意", notes="企标制修订流程-同意")
@PostMapping("/agree")
public Result<?> agree(@RequestBody ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
revisionService.approval(processInfoVO, true);
return Result.OK();
}
/**
* 驳回
*
* @param processInfoVO
*/
@AutoLog(value = "企标制修订流程-驳回")
@ApiOperation(value="企标制修订流程-驳回", notes="企标制修订流程-驳回")
@PostMapping("/reject")
public Result<?> reject(@RequestBody ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
revisionService.approval(processInfoVO, false);
return Result.OK();
}
}
@@ -0,0 +1,121 @@
package com.jero.modules.activiti.process.esRevisionAdvice.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
*
* @TableName process_es_revision_advice
*/
@TableName(value ="process_es_revision_advice")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EsRevisionAdvice implements Serializable {
/**
* 主键ID
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键ID")
private String id;
/**
* 创建人
*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新人
*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
private Date updateTime;
/**
* 所属部门
*/
@ApiModelProperty(value = "所属部门")
private String orgCode;
/**
* 流程实例Id
*/
@ApiModelProperty(value = "流程实例Id")
private String processInstanceId;
/**
* 执行id
*/
@ApiModelProperty(value = "执行id")
private String executionId;
/**
* 条款号
*/
@ApiModelProperty(value = "条款号")
private String clauseNum;
/**
* 条款名称
*/
@ApiModelProperty(value = "条款名称")
private String clauseName;
/**
* 修改意见内容(包括修改理由和依据)
*/
@ApiModelProperty(value = "修改意见内容(包括修改理由和依据)")
private String editAdvice;
/**
* 意见提出人
*/
@Dict(dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')", dicCode = "id")
@ApiModelProperty(value = "意见提出人")
private String createUserId;
/**
* 1采纳 2部分采纳 3不采纳
*/
@ApiModelProperty(value = "1采纳 2部分采纳 3不采纳")
@Dict(dicCode = "consultation_opinion")
private String handleAdvice;
/**
* 0无意见 1有意见
*/
@ApiModelProperty(value = "0无意见 1有意见")
@Dict(dicCode = "yn")
private String haveNoOpinion;
/**
* 理由
*/
@ApiModelProperty(value = "理由")
private String reason;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
@@ -0,0 +1,38 @@
package com.jero.modules.activiti.process.esRevisionAdvice.entity;
import lombok.Getter;
/**
* @author: Mzaxd
* @Date: 2024/1/28 17:36
*/
@Getter
public enum HandleAdviceEnum {
/**
* 1:采纳
*/
AGREE("同意", "1"),
/**
* 2:部分采纳
*/
PART_DISAGREE("部分采纳", "2"),
/**
* 3:不采纳
*/
DISAGREE("不采纳", "3"),
;
private final String name;
private final String value;
HandleAdviceEnum(String name, String value) {
this.name = name;
this.value = value;
}
}
@@ -0,0 +1,134 @@
package com.jero.modules.activiti.process.esRevisionAdvice.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
*
* @TableName process_es_revision
*/
@TableName(value ="process_es_revision")
@Data
public class ProcessEsRevision implements Serializable {
/**
* 主键ID
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键ID")
private String id;
/**
* 创建人
*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新人
*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
private Date updateTime;
/**
* 所属部门
*/
@ApiModelProperty(value = "所属部门")
private String orgCode;
/**
* 0表示未删除,1表示删除
*/
@ApiModelProperty(value = "0表示未删除,1表示删除")
private Integer delFlag;
/**
* 企标计划Id
*/
@ApiModelProperty(value = "企标计划Id")
private String espId;
/**
* 流程实例Id
*/
@ApiModelProperty(value = "流程实例Id")
private String processInstanceId;
/**
* 是否开启征求意见 0不征求 1征求
*/
@TableField(exist = false)
@ApiModelProperty(value = "是否开启征求意见 0不征求 1征求")
private String adviceFlag;
/**
* 发布日期
*/
@ApiModelProperty(value = "发布日期")
private String releaseDate;
/**
* 实施日期
*/
@ApiModelProperty(value = "实施日期")
private String implementDate;
/**
* 征求意见截止日期
*/
@TableField(exist = false)
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "征求意见截止日期")
private Date adviceDeadline;
/**
* 主起草人
*/
@ApiModelProperty(value = "主起草人")
private String mainDraftUser;
@TableField(exist = false)
@ApiModelProperty(value = "意见列表")
private List<EsRevisionAdvice> advices;
/**
* 在线编辑文件id
*/
@ApiModelProperty(value = "在线编辑文件id")
private String onEditFile;
/**
* 0无意见 1有意见
*/
@ApiModelProperty(value = "0无意见 1有意见")
@TableField(exist = false)
@Dict(dicCode = "yn")
private String haveNoOpinion;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
@@ -0,0 +1,46 @@
package com.jero.modules.activiti.process.esRevisionAdvice.entity;
/**
* @author: Mzaxd
* @Date: 2023/12/19 15:14
*/
public class RevisionTaskNodeIdConstant {
/** 主起草人分发 */
public static final String MAIN_DRAFT_USER_DISTRIBUTE = "Activity_0v98tow";
/** 其他起草人上传企标 */
public static final String OTHER_DRAFT_USER_UPLOAD = "Activity_1d2la4l";
/** 主起草人汇总 */
public static final String MAIN_DRAFT_USER_COLLECT_FIRST = "Activity_1dz3u0m";
/** 标准化审批 */
public static final String STANDARDIZATION_CHECK = "Activity_0m576ex";
/** 评分人评分 */
public static final String RATER_RATE = "Activity_1qhpnpa";
/** 标准化确认是否开启征求意见 */
public static final String CONFIRM_ADVISE = "Activity_1siuksf";
/** 部门联络人下发 */
public static final String CONTACT_USER_DISTRIBUTE = "Activity_1ns6olf";
/** 征求意见对象填写意见 */
public static final String ADVICE = "Activity_04m430n";
/** 部门联络人汇总数据 */
public static final String CONTACT_USER_COLLECT = "Activity_1riqzkp";
/** 部所联络人主管级领导审批 */
public static final String CONTACT_USER_LEADER_APPROVAL = "Activity_1ralk8e";
/** 主起草人汇总 */
public static final String MAIN_DRAFT_USER_COLLECT_SECOND = "Activity_1hb9aun";
/** 主起草人上传会议纪要 */
public static final String MAIN_DRAFT_USER_UPLOAD = "Activity_11uuyg0";
/** 其它起草人校对 */
public static final String OTHER_DRAFT_USER_CHECK = "Activity_1seways";
/** 主管级领导审批 */
public static final String LEADER_APPROVAL = "Activity_1l028rz";
/** 标准化审批 */
public static final String STANDARDIZATION_APPROVAL = "Activity_0uxua0b";
/** 相关部门领导会签 */
public static final String RELATED_LEADER_APPROVAL = "Activity_05pybsc";
/** 总工程师审批 */
public static final String CHIEF_ENGINEER_APPROVAL = "Activity_1yr56ac";
/** 主起草人发布 */
public static final String MAIN_DRAFT_USER_RELEASE = "Activity_0n0h60s";
}
@@ -0,0 +1,15 @@
package com.jero.modules.activiti.process.esRevisionAdvice.entity.vo;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
import lombok.Data;
import java.util.List;
@Data
public class ProcessRevisionVO {
ProcessEsRevision processInfo;
List<EsRevisionAdvice> adviceList;
}
@@ -0,0 +1,115 @@
package com.jero.modules.activiti.process.esRevisionAdvice.job;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.Execution;
import org.jetbrains.annotations.NotNull;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author: Mzaxd
* @Date: 2023/12/28 18:40
*/
@Slf4j
public class AdviceDeadlineJob implements Job {
@Resource
private EsRevisionService revisionService;
@Resource
private ProcessApprovalRecordService approvalRecordService;
@Resource
private RuntimeService runtimeService;
@Resource
private TaskService taskService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("开始执行征求意见截止日期每日定时任务");
LambdaQueryWrapper<ProcessEsRevision> revisionLambdaQueryWrapper = new LambdaQueryWrapper<>();
revisionLambdaQueryWrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue());
revisionLambdaQueryWrapper.isNotNull(ProcessEsRevision::getProcessInstanceId);
List<ProcessEsRevision> revisionList = revisionService.list(revisionLambdaQueryWrapper);
if (revisionList == null || revisionList.isEmpty()) {
return;
}
Map<String, ProcessEsRevision> revisionMap = revisionList.stream()
.collect(Collectors.toMap(ProcessEsRevision::getProcessInstanceId, revision -> revision));
// 找到所有征求意见的未完成的待办
LambdaQueryWrapper<ProcessApprovalRecord> arWrapper = new LambdaQueryWrapper<>();
arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue());
arWrapper.in(ProcessApprovalRecord::getProcessInstanceId, revisionMap.keySet());
arWrapper.eq(ProcessApprovalRecord::getTaskName, "征求意见对象填写意见");
arWrapper.isNotNull(ProcessApprovalRecord::getTaskId);
List<ProcessApprovalRecord> arList = approvalRecordService.list(arWrapper);
Date curDate = new Date();
for (ProcessApprovalRecord record : arList) {
String taskId = record.getTaskId();
// 根据record获取每一个任务的deadline
// 获取Task
taskService.createTaskQuery().taskId(record.getTaskId()).singleResult();
// 根据Task获取其父级executionId
String executionId = taskService.createTaskQuery()
.taskId(record.getTaskId()).singleResult().getExecutionId();
// 获取Execution
Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult();
String parentExecutionId = execution.getParentId();
// 根据executionId获取流程变量
Date adviceDeadline = (Date) taskService.getVariable(taskId, parentExecutionId + "-adviceDeadline");
if (adviceDeadline == null) {
continue;
}
adviceDeadline = getDeadlineDate(adviceDeadline);
// 如果当前日期大于该条数据的截止日期 则自动完成任务
// if (curDate.after(adviceDeadline)) {
// ESRevisionDataVO handleData = revisionService.getHandleData(taskId);
// handleData.getCommon().setTaskId(taskId);
//// ProcessEsRevision data = handleData.getData();
// EsRevisionAdvice esRevisionAdvice = new EsRevisionAdvice();
// esRevisionAdvice.setClauseName("无");
// esRevisionAdvice.setClauseNum("无");
// esRevisionAdvice.setEditAdvice("到期自动提交");
//// data.setAdvices(new ArrayList<>(Collections.singletonList(esRevisionAdvice)));
// revisionService.approval(handleData, true);
// }
}
log.info("征求意见截止日期每日定时任务执行结束");
}
@NotNull
private static Date getDeadlineDate(Date deadline) {
// 设置deadline为今天的最后一秒
// 创建一个 Calendar 对象
Calendar calendar = Calendar.getInstance();
// 获取当前日期和时间
calendar.setTime(deadline);
// 设置时间部分为当天的最后一秒
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
// 将修改后的日期和时间设置回原始的 Date 对象
deadline = calendar.getTime();
return deadline;
}
}
@@ -0,0 +1,107 @@
package com.jero.modules.activiti.process.esRevisionAdvice.listener;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author: Mzaxd
* @Date: 2023/12/19 11:59
*/
@Component
public class ProcessESRevisionEndListener implements ExecutionListener {
@Resource
private EnterpriseStandardPlanService espService;
// @Resource
// private EsRevisionService esRevisionService;
//
// @Resource
// private EnterpriseStandardReviewMeetingRecordService rmrService;
//
// @Resource
// private EnterpriseStandardRmrEvaluateDetailService rmrDetailService;
//
// @Resource
// private ILawsCommonService lawsCommonService;
//
// @Resource
// private IBusProcessModelHisService busProcessModelHisService;
@Override
public void notify(DelegateExecution delegateExecution) {
// 获取流程实例Id
String processInstanceId = delegateExecution.getProcessInstanceId();
// 根据流程Id获取业务数据
// LambdaQueryWrapper<ProcessEsRevision> revisionWrapper = new LambdaQueryWrapper<>();
// revisionWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
// // 获取企标相关数据
// ProcessEsRevision data = esRevisionService.getOne(revisionWrapper);
// Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
// String inspectContentJson = data.getInspectContentJson();
// List<LinkedHashMap<String, Object>> inspectContentList;
// if (StrUtil.isNotBlank(inspectContentJson)) {
// inspectContentList =
// JSON.parseObject(inspectContentJson, new TypeReference<List<LinkedHashMap<String, Object>>>() {});
// variables.put(FieldCommon.CHECK_LIST, inspectContentList);
// }
// // 将标准号进行拆分后填充字段
// String standardNumber = (String) variables.get(FieldCommon.STANDARD_NUMBER);
// if (StringUtils.isNotBlank(standardNumber)) {
// Map<String, String> map = EnterpriseStandardUtil.splitStandardNumber(standardNumber);
// variables.putAll(map);
// // 如果没有主起草人,则需要填充主起草人
// }
// // 主起草人
// String mainDraftUser = (String) variables.get(FieldCommon.MAIN_DRAFTING_USER);
// if (StringUtils.isBlank(mainDraftUser)) {
// variables.put(FieldCommon.MAIN_DRAFTING_USER, data.getMainDraftUser());
// }
// // 标准状态
// variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.RELEASE.getStateValue());
// String tryFlag = (String) variables.get(FieldCommon.TRY_FLAG);
// if (tryFlag != null) {
// if (tryFlag.equals(YesOrNoEnum.YES.getValue())) {
// variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.TRIAL_OPERATION.getStateValue());
// }
// }
// variables.put(FieldCommon.RELEASE_DATE, data.getReleaseDate());
// variables.put(FieldCommon.IMPLEMENTATION_DATE, data.getImplementDate());
// variables.put(FieldCommon.MAIN_DRAFTING_UNIT_RESPONSIBLE_PERSON, data.getApprovalUser());
// variables.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue());
// variables.put(FieldCommon.AUTH_DEPT, data.getAuthDept());
// String standardId = IdWorker.getIdStr();
// variables.put(FieldCommon.ID, standardId);
// // minio上传在线编辑文件
// String onEditFile = data.getOnEditFile();
// if (StringUtils.isNotBlank(onEditFile)) {
// String fileId = busProcessModelHisService.saveProcessFileToOss(onEditFile);
// variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, fileId);
// }
// // 发布企标
// lawsCommonService.commonAdd(variables);
// String espId = data.getEspId();
// EnterpriseStandardPlan esp = espService.getById(espId);
// // 保存评审会记录
// EnterpriseStandardReviewMeetingRecord esRmr = new EnterpriseStandardReviewMeetingRecord();
// esRmr.setStandardId(standardId);
// esRmr.setPlanId(esp.getId());
// esRmr.setReviewDate(data.getReviewDate());
// esRmr.setReviewUser(data.getReviewUser());
// rmrService.save(esRmr);
// // 保存评审会评审结果
// List<ReviewMeetingDetailVO> reviewMeetingDetailVOS = data.parseReviewMeetingDetails();
// List<EnterpriseStandardRmrEvaluateDetail> rmrEvaluateDetails =
// BeanCopyUtils.copyBeanList(reviewMeetingDetailVOS, EnterpriseStandardRmrEvaluateDetail.class);
// rmrEvaluateDetails.forEach(r -> r.setReviewMeetingId(esRmr.getId()));
// rmrDetailService.saveBatch(rmrEvaluateDetails);
// // 更新企标计划状态
// espService.updateById(esp);
}
}
@@ -0,0 +1,18 @@
package com.jero.modules.activiti.process.esRevisionAdvice.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
/**
* @author ThinkBook
* @description 针对表【process_es_revision_advice】的数据库操作Mapper
* @createDate 2023-12-20 17:17:56
* @Entity com.jero.modules.activiti.process.esRevision.entity.EsRevisionAdvice
*/
public interface EsRevisionAdviceMapper extends BaseMapper<EsRevisionAdvice> {
}
@@ -0,0 +1,18 @@
package com.jero.modules.activiti.process.esRevisionAdvice.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
/**
* @author ThinkBook
* @description 针对表【process_es_revision】的数据库操作Mapper
* @createDate 2023-12-19 11:58:59
* @Entity com.jero.modules.activiti.process.esRevision.entity.EsRevision
*/
public interface EsRevisionMapper extends BaseMapper<ProcessEsRevision> {
}
@@ -0,0 +1,13 @@
package com.jero.modules.activiti.process.esRevisionAdvice.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
/**
* @author ThinkBook
* @description 针对表【process_es_revision_advice】的数据库操作Service
* @createDate 2023-12-20 17:17:56
*/
public interface EsRevisionAdviceService extends IService<EsRevisionAdvice> {
}
@@ -0,0 +1,24 @@
package com.jero.modules.activiti.process.esRevisionAdvice.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
/**
* @author ThinkBook
* @description 针对表【process_es_revision】的数据库操作Service
* @createDate 2023-12-19 11:58:59
*/
public interface EsRevisionService extends IService<ProcessEsRevision> {
ProcessInfoVO<ProcessRevisionVO> getHandleData(String taskId);
void startProcess(ProcessInfoVO<ProcessRevisionVO> processInfoVO);
void approval(ProcessInfoVO<ProcessRevisionVO> processInfoVO, boolean pass);
void submit(ProcessInfoVO<ProcessRevisionVO> processInfoVO);
}
@@ -0,0 +1,22 @@
package com.jero.modules.activiti.process.esRevisionAdvice.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
import com.jero.modules.activiti.process.esRevisionAdvice.mapper.EsRevisionAdviceMapper;
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService;
import org.springframework.stereotype.Service;
/**
* @author ThinkBook
* @description 针对表【process_es_revision_advice】的数据库操作Service实现
* @createDate 2023-12-20 17:17:56
*/
@Service
public class EsRevisionAdviceServiceImpl extends ServiceImpl<EsRevisionAdviceMapper, EsRevisionAdvice>
implements EsRevisionAdviceService{
}
@@ -0,0 +1,644 @@
package com.jero.modules.activiti.process.esRevisionAdvice.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.dto.message.SendMessageDTO;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.aspect.TranslationAspect;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.HandleAdviceEnum;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision;
import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO;
import com.jero.modules.activiti.process.esRevisionAdvice.mapper.EsRevisionMapper;
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService;
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.enterprise.entity.ESPProjectStatus;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import com.jero.modules.laws.system.service.ILawsContactManageService;
import com.jero.modules.sys.utils.UserUtils;
import com.jero.modules.system.service.ISysUserDepartService;
import com.jero.modules.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author ThinkBook
* @description 针对表【process_es_revision】的数据库操作Service实现
* @createDate 2023-12-19 11:58:59
*/
@Service
@Slf4j
@Transactional(rollbackFor = JeroBootException.class)
public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, ProcessEsRevision>
implements EsRevisionService {
@Resource
private ActFlowCommonService actFlowCommonService;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@Resource
private RuntimeService runtimeService;
@Resource
private IProcessHandleService processHandleService;
@Resource
private ProcessAllService processAllService;
@Resource
private TaskService taskService;
@Resource
private EnterpriseStandardPlanService espService;
@Resource
private EsRevisionAdviceService adviceService;
@Resource
private TranslationAspect translationAspect;
@Resource
private ISysUserDepartService sysUserDepartService;
// @Resource
// private SendMessageAPI sendMessageAPI;
@Resource
private ILawsContactManageService contactManageService;
@Resource
private ProcessApprovalRecordService parService;
@Resource
private ISysUserService userService;
@Resource
private ProcessDraftService prcDraftService;
@Resource
private CurrentUserUtil currentUserUtil;
@Override
public void startProcess(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
// 流程Key
String processDefinitionKey = ProcessType.ES_REVISION_ADVICE.getProcessKey();
// 流程信息
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
// 任务信息
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
// 人员信息
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 当前用户Id
String userId = UserUtils.getUserId();
// 设置流程变量
Map<String, Object> actVariables = this.setVariables(processInfoVO);
// 删除草稿
actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId());
// 启动流程
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
// 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId();
String processInstanceId = processInstance.getId();
processInfo.setProcessInstanceId(processInstanceId);
processInfo.setProcessDefinitionId(processDefinitionId);
processInfo.setProcessType(ProcessTypeEnum.ES_REVISION_ADVICE.getValue());
// 第一个节点业务数据处理
this.startNodeBusProcess(processInfoVO);
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userInfoMap);
// 获取第一个任务的taskId
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
processTask.setTaskId(taskId);
// 保存第一个节点的草稿
processHandleService.saveToDraft(processInfoVO, userId);
// 保存第一个节点的快照
processHandleService.saveToSnapshot(processInfoVO, userId);
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
// 根据流程实例id更新流程总表
actFlowCommonService.updateProcessAll(processInfo);
// 自动完成第一个任务
actFlowCommonService.completeTask(taskId, userId);
}
private void startNodeBusProcess(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
// 保存数据
ProcessRevisionVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
ProcessEsRevision processInfo = businessInfoDTO.getProcessInfo();
save(processInfo);
// 修改企标计划状态
// 检查企标计划是否已被删除
String espId = processInfo.getEspId();
EnterpriseStandardPlan esp = espService.getById(espId);
if (esp == null) {
throw new JeroBootException(ResultCommon.INVALID_ESP);
}
// 设置状态为运行中
espService.changeProjectStatus(espId, ESPProjectStatus.IN_PROGRESS);
}
private Map<String, Object> setVariables(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 获取分发人
return new HashMap<>(userInfoMap);
}
private Map<String, Object> getUserMap(Map<String, Object> variables) {
// 转成逗号拼接
variables.put("otherDraftUserList", Optional.ofNullable((ArrayList<String>) variables.get("otherDraftUserList"))
.map(list -> String.join(",", list))
.orElse(""));
variables.remove("distribute");
return variables;
}
public void startRunTask(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
// 检查企标计划是否已被删除
// String espId = revisionData.getData().getEspId();
// EnterpriseStandardPlan esp = espService.getById(espId);
// if (esp == null) {
// throw new JeroBootException(ResultCommon.INVALID_ESP);
// }
// // 设置状态为运行中
// espService.changeProjectStatus(espId, ESPProjectStatus.IN_PROGRESS);
}
@Override
public ProcessInfoVO<ProcessRevisionVO> getHandleData(String taskId) {
if (!actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("任务不存在");
}
// String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
// String executionId = taskService.createTaskQuery().taskId(taskId).singleResult().getExecutionId();
// // 根据当前执行Id获取所有子执行Id
// List<String> executionIdList = actFlowCommonService.getAllChildExecutionIds(executionId);
// executionIdList.add(executionId);
// ESRevisionDataVO revisionDataVO = new ESRevisionDataVO();
// // 使用流程引擎根据taskId找到流程实例Id
// String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
// // 获取流程通用数据
// ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
// CommonVO commonVO = new CommonVO();
// commonVO.setPrcName(process.getPrcName());
// commonVO.setTaskId(process.getTaskId());
// commonVO.setPrcMes(process.getPrcMes());
// commonVO.setDueTime(process.getDueTime());
// commonVO.setNodeId(process.getNodeId());
// revisionDataVO.setCommon(commonVO);
// ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
// // 获取流程实例数据
// LambdaQueryWrapper<ProcessEsRevision> wrapper = new LambdaQueryWrapper<>();
// LambdaQueryWrapper<EsRevisionAdvice> advicesWrapper = new LambdaQueryWrapper<>();
// advicesWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId);
// wrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
// ProcessEsRevision data = getOne(wrapper);
// List<EsRevisionAdvice> adviceList = new ArrayList<>();
// List<OtherDraftUserVO> otherDraftUserVOS = data.parseOtherDraftUserVOS();
// List<InspectContentVO> inspectContentVOS = data.parseInspectContents();
// String xmlNodeId = record.getNodeId();
// Object passObject = taskService.getVariable(taskId, "pass");
// boolean pass = true;
// if (passObject != null) {
// pass = (boolean) passObject;
// }
// // 某些节点需要对数据进行特殊处理
// switch (xmlNodeId) {
// case OTHER_DRAFT_USER_UPLOAD:
// otherDraftUserVOS = otherDraftUserVOS.stream()
// .filter(o -> o.getTaskId().equals(taskId)).collect(Collectors.toList());
// break;
// case CONTACT_USER_DISTRIBUTE:
// if (pass) {
// data.setWorkGroup(null);
// data.setAuthDept(null);
// data.setReviewUser(null);
// }
// case CONTACT_USER_COLLECT:
// // 根据联络人找到部门联络人主管级领导
// LambdaQueryWrapper<LawsContactManage> contactWrapper = new LambdaQueryWrapper<>();
// advicesWrapper.eq(EsRevisionAdvice::getExecutionId, executionId);
// contactWrapper.eq(LawsContactManage::getContactId, userId);
// List<LawsContactManage> list = contactManageService.list(contactWrapper);
// if (list != null && list.size() == 1) {
// data.setContactUserLeader(list.get(0).getLeaderId());
// }
// case CONTACT_USER_LEADER_APPROVAL:
// advicesWrapper.eq(EsRevisionAdvice::getExecutionId, executionId);
// adviceList = adviceService.list(advicesWrapper);
// break;
// case MAIN_DRAFT_USER_COLLECT_SECOND:
// adviceList = adviceService.list(advicesWrapper);
// break;
// }
// data.setAdvices(adviceList);
// data.setOtherDraftUserVOS(otherDraftUserVOS);
// data.setInspectContents(inspectContentVOS);
// revisionDataVO.setData(data);
// return revisionDataVO;
return null;
}
@Override
public void approval(ProcessInfoVO<ProcessRevisionVO> processInfoVO, boolean pass) {
// CommonVO commonVO = revisionData.getCommon();
// String taskId = commonVO.getTaskId();
// 获取task
// if (StrUtil.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) {
// throw new JeroBootException("taskId为空或任务不存在");
// }
// String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
// Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// // 获取执行id
// String executionId = task.getExecutionId();
// // 获取当前节点的id
// ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
// String xmlNodeId = record.getNodeId();
// String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
// LambdaQueryWrapper<ProcessEsRevision> wrapper = new LambdaQueryWrapper<>();
// LambdaUpdateWrapper<ProcessEsRevision> updateWrapper = new LambdaUpdateWrapper<>();
// LambdaUpdateWrapper<EsRevisionAdvice> adviceWrapper = new LambdaUpdateWrapper<>();
// wrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
// wrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue());
// adviceWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId);
// ProcessEsRevision dataDb = getOne(wrapper);
// updateWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
// updateWrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue());
// // 获取当前流程
// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
// String processDefinitionId = processInstance.getProcessDefinitionId();
// Map<String, Object> userMap = new HashMap<>();
// List<EsRevisionAdvice> advices;
// ProcessEsRevision data;
// Map<String, Object> flowUser;
// 更新审批表为完成,填充数据
// actFlowCommonService.updateApprovalInfo(commonVO, taskId, pass);
// String curUserId;
// switch (xmlNodeId) {
// case MAIN_DRAFT_USER_DISTRIBUTE:
// // 判断是否分发 设置流程变量
// data = revisionData.getData();
// flowUser = revisionData.getFlowUser();
// List<OtherDraftUserVO> otherDraftUserVOS = data.getOtherDraftUserVOS();
// if (otherDraftUserVOS == null || otherDraftUserVOS.isEmpty()) {
// taskService.setVariable(taskId, "distribute", false);
// } else {
// taskService.setVariable(taskId, "distribute", true);
// taskService.setVariable(taskId, "otherDraftUserList", otherDraftUserVOS.stream().map(OtherDraftUserVO::getUser)
// .collect(Collectors.toList()));
// otherDraftUserVOS.forEach(o -> o.setFinishFlag(YesOrNoEnum.NO.getValue()));
// data.setProofreader(otherDraftUserVOS.stream()
// .map(OtherDraftUserVO::getUser)
// .distinct()
// .collect(Collectors.joining(",")));
// data.setOtherDraftUserVOS(otherDraftUserVOS);
// data.setOtherDrafterUploadFileJson(otherDraftUserVOS);
// }
// saveOrUpdate(data);
// String standardizationUser = (String) flowUser.get("standardizationUser");
// taskService.setVariable(taskId, "standardizationUser", standardizationUser);
// // 保存人员信息
// Map<String, Object> actVariables = this.setVariables(revisionData);
// processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(actVariables));
// // 替换草稿数据
// this.replaceAutoStartDraft(revisionData, processInstanceId);
// break;
// case OTHER_DRAFT_USER_UPLOAD:
// List<OtherDraftUserVO> otherDraftUserVODbList = dataDb.parseOtherDraftUserVOS();
// data = revisionData.getData();
// List<OtherDraftUserVO> otherDraftUserVOList = data.getOtherDraftUserVOS();
// otherDraftUserVODbList.forEach(o -> {
// if (o.getTaskId().equals(taskId)) {
// o.setFileId(otherDraftUserVOList.get(0).getFileId());
// }
// });
// dataDb.setOtherDrafterUploadFileJson(otherDraftUserVODbList);
// saveOrUpdate(dataDb);
// break;
// case MAIN_DRAFT_USER_COLLECT_FIRST:
// // 判断是否需要稽查 设置流程变量 保存稽查列表
// data = revisionData.getData();
// boolean inspectFlag = !data.getInspectFlag().equals(YesOrNoEnum.NO.getValue());
// if (inspectFlag) {
// List<InspectContentVO> inspectContents = data.getInspectContents();
// data.setInspectContentJson(inspectContents);
// }
// // 保存流程数据
// saveOrUpdate(data);
// break;
// case STANDARDIZATION_CHECK:
// // 判断是否可以评审
// if (pass) {
// data = revisionData.getData();
// List<String> raterList = Arrays.asList(data.getRaters().split(","));
// taskService.setVariable(taskId, "raterList", raterList);
// // 保存流程数据
// saveOrUpdate(data);
// userMap.put("raterList", data.getRaters());
// processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap);
// }
// break;
// case RATER_RATE:
// // 保存打分记录
// data = revisionData.getData();
// List<ReviewMeetingDetailVO> reviewMeetingDetails = data.getReviewMeetingDetails();
// // 设置当前评分人
// curUserId = UserUtils.getUserId();
// String finalCurUserId = curUserId;
// reviewMeetingDetails.forEach(reviewMeetingDetail -> reviewMeetingDetail.setAdjudicatorId(finalCurUserId));
// ProcessEsRevision revisionDb = getById(dataDb.getId());
// List<ReviewMeetingDetailVO> reviewMeetingDetailsDb = revisionDb.parseReviewMeetingDetails();
// if (reviewMeetingDetailsDb == null) {
// reviewMeetingDetailsDb = new ArrayList<>();
// }
// reviewMeetingDetailsDb.addAll(reviewMeetingDetails);
// revisionDb.setReviewMeetingDetailJson(reviewMeetingDetailsDb);
// saveOrUpdate(revisionDb);
// break;
// case CONFIRM_ADVISE:
// // 判断是否开启征求意见子流程 设置流程变量
// data = revisionData.getData();
// boolean adviceFlag = !data.getAdviceFlag().equals("0");
// if (adviceFlag) {
// // 保存征求意见截止时间
// saveOrUpdate(data);
// List<String> contactUserList = Arrays.asList(data.getContactUser().split(","));
// taskService.setVariable(taskId, "contactUserList", contactUserList);
// taskService.setVariable(taskId, "open", true);
// String mainDraftUser = (String) taskService.getVariable(taskId, "mainDraftUser");
// // 保存流程数据
// saveOrUpdate(data);
// userMap.put("mainDraftCollectUser", mainDraftUser);
// userMap.put("contactUser", data.getContactUser());
// processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap);
// } else {
// taskService.setVariable(taskId, "open", false);
// }
// break;
// case CONTACT_USER_DISTRIBUTE:
// data = revisionData.getData();
// Date totalAdviceDeadline = data.getTotalAdviceDeadline();
// Date adviceDeadline = data.getAdviceDeadline();
// // 征求意见截至日期不能晚于总截止时间
// if (totalAdviceDeadline != null) {
// if (adviceDeadline.getTime() > totalAdviceDeadline.getTime()) {
// log.error("总截止时间:{} 当前提交征求意见截止时间{}", totalAdviceDeadline, adviceDeadline);
// throw new JeroBootException("各部门联络人设置的截止时间不能晚于标准化设置的征求意见截止时间!");
// }
// }
// String workGroup = data.getWorkGroup();
// List<String> adviceUserList = Arrays.asList(workGroup.split(","));
// // 如果人员超过600则提示
// if (adviceUserList.size() > 600) {
// log.error("当前提交人员超过600人");
// throw new JeroBootException("当前提交人员超过600人,请重新选择!");
// }
// runtimeService.setVariableLocal(executionId, "adviceUserList", adviceUserList);
// runtimeService.setVariable(executionId, executionId + "-adviceDeadline", adviceDeadline);
// runtimeService.setVariable(executionId, "contactExecutionId", executionId);
// userMap.put("adviceUserList", workGroup);
// processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap);
// // 设置截止时间
// saveOrUpdate(data);
// break;
// case ADVICE:
// data = revisionData.getData();
// String haveNoOpinion = data.getHaveNoOpinion();
// advices = data.getAdvices();
// if (YesOrNoEnum.NO.getValue().equals(data.getHaveNoOpinion())) {
// EsRevisionAdvice advice = new EsRevisionAdvice();
// advice.setClauseName("无");
// advice.setClauseNum("无");
// advice.setEditAdvice("无");
// advices = new ArrayList<>(Collections.singletonList(advice));
// }
// String contactUserExecutionId = (String) runtimeService.getVariable(executionId, executionId + "-ContactExecutionId");
// advices.forEach(advice -> {
// advice.setCreateUserId(userId);
// advice.setProcessInstanceId(processInstanceId);
// advice.setExecutionId(contactUserExecutionId);
// advice.setHaveNoOpinion(haveNoOpinion);
// });
// adviceService.saveBatch(advices);
// break;
// case CONTACT_USER_COLLECT:
// data = revisionData.getData();
// // 先删后增
// String contactUserLeader = data.getContactUserLeader();
// runtimeService.setVariable(executionId, "contactUserLeader", contactUserLeader);
// runtimeService.setVariable(executionId, executionId + "-ContactUserLeader", contactUserLeader);
// userMap.put("contactUserLeader", data.getContactUserLeader());
// advices = data.getAdvices();
// adviceWrapper.eq(EsRevisionAdvice::getExecutionId, executionId);
// adviceService.remove(adviceWrapper);
// advices.forEach(advice -> {
// advice.setProcessInstanceId(processInstanceId);
// advice.setExecutionId(executionId);
// if (StrUtil.isBlank(advice.getCreateUserId())) {
// advice.setCreateUserId(UserUtils.getUserId());
// }
// });
// adviceService.saveBatch(advices);
// processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap);
// break;
// case CONTACT_USER_LEADER_APPROVAL:
// // 保存流程数据
// if (pass) {
// data = revisionData.getData();
// // 保存征求意见记录 先删后增
// adviceService.remove(new LambdaQueryWrapper<EsRevisionAdvice>()
// .eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId)
// .eq(EsRevisionAdvice::getExecutionId, executionId));
// advices = data.getAdvices();
// adviceWrapper.eq(EsRevisionAdvice::getExecutionId, executionId);
// adviceService.remove(adviceWrapper);
// advices.forEach(advice -> advice.setProcessInstanceId(processInstanceId));
// advices.forEach(advice -> advice.setExecutionId(executionId));
// advices.forEach(advice -> {
// if (StrUtil.isBlank(advice.getCreateUserId())) {
// advice.setCreateUserId(UserUtils.getUserId());
// }
// });
// adviceService.saveBatch(advices);
// }
// break;
// case MAIN_DRAFT_USER_COLLECT_SECOND:
// // 保存流程数据
// data = revisionData.getData();
// // 更改保存征求意见记录
// advices = data.getAdvices();
// // 如果没有创建人的记录说明是主起草人新增的 需要设置创建人
// advices.forEach(advice -> {
// if (StrUtil.isBlank(advice.getCreateUserId())) {
// advice.setCreateUserId(UserUtils.getUserId());
// }
// });
// adviceService.saveOrUpdateBatch(advices);
// if (StrUtil.isNotBlank(data.getId())) {
// updateById(data);
// }
// // 给所有意见提出人发送意见反馈消息
// this.sendMessageToAdviceUser(data, processInstanceId);
// break;
// case MAIN_DRAFT_USER_UPLOAD:
// // 设置后续节点的办理人
// data = revisionData.getData();
// List<String> proofreaderList = Arrays.asList(data.getProofreader().split(","));
// List<String> approvalUserList = Arrays.asList(data.getApprovalUser().split(","));
// String approvalUserStandard = data.getApprovalUserStandard();
// List<String> relatedLeaderList = Arrays.asList(data.getRelatedLeader().split(","));
// String chiefEngineer = data.getChiefEngineer();
// flowUser = new HashMap<>();
// flowUser.put("otherDraftCheckUserList", proofreaderList);
// flowUser.put("mainDraftUserLeaderList", approvalUserList);
// flowUser.put("standardizationUser", approvalUserStandard);
// flowUser.put("relatedDeptLeaderList", relatedLeaderList);
// flowUser.put("chiefEngineer", chiefEngineer);
// taskService.setVariables(taskId, flowUser);
// userMap.put("otherDraftCheckUserList", data.getProofreader());
// userMap.put("mainDraftUserLeaderList", data.getApprovalUser());
// userMap.put("standardizationUserFinal", approvalUserStandard);
// userMap.put("relatedDeptLeaderList", data.getRelatedLeader());
// userMap.put("chiefEngineer", chiefEngineer);
// saveOrUpdate(data);
// processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap);
// break;
// case MAIN_DRAFT_USER_RELEASE:
// data = revisionData.getData();
// curUserId = UserUtils.getUserId();
// data.setMainDraftUser(curUserId);
// saveOrUpdate(data);
// // 给授权部门的所有人员发送消息
// this.sendMessageToAuthDeptUser(processInstanceId);
// break;
// }
// // 转办修改流程变量逻辑
// switch (xmlNodeId) {
// case MAIN_DRAFT_USER_COLLECT_FIRST:
// case MAIN_DRAFT_USER_COLLECT_SECOND:
// case MAIN_DRAFT_USER_UPLOAD:
// // 获取当前节点的id
// curUserId = UserUtils.getUserId();
// taskService.setVariable(taskId, "mainDraftUser", curUserId);
// break;
// case STANDARDIZATION_CHECK:
// case CONFIRM_ADVISE:
// // 获取当前节点的id
// curUserId = UserUtils.getUserId();
// taskService.setVariable(taskId, "standardizationUser", curUserId);
// break;
// case CONTACT_USER_DISTRIBUTE:
// case CONTACT_USER_COLLECT:
// // 获取当前节点的id
// curUserId = UserUtils.getUserId();
// runtimeService.setVariable(executionId, "contactUser", curUserId);
// runtimeService.setVariable(executionId, curUserId + "-ExecutionId", executionId);
// break;
// case CONTACT_USER_LEADER_APPROVAL:
// // 获取当前节点的id
// curUserId = UserUtils.getUserId();
// runtimeService.setVariable(executionId, "contactUserLeader", curUserId);
// runtimeService.setVariable(executionId, executionId + "-ContactUserLeader", curUserId);
// break;
// case LEADER_APPROVAL:
// // 根据流程实例Id修改审批人字段
// // 获取当前节点的id
// curUserId = UserUtils.getUserId();
// runtimeService.setVariable(executionId, "contactUserLeader", curUserId);
// }
// runtimeService.setVariable(processInstanceId, "pass", pass);
// // 审批节点
// actFlowCommonService.completeTask(taskId, userId);
// if (xmlNodeId.equals(MAIN_DRAFT_USER_DISTRIBUTE)) {
// this.processOtherDraftUploadTask(processInstanceId);
// }
}
@Override
public void submit(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
}
private void sendMessageToMainDraftUser(ProcessEsRevision revision, String processInstanceId) {
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
List<EsRevisionAdvice> advices = revision.getAdvices();
Map<String, List<EsRevisionAdvice>> adviceMap = advices.stream()
.collect(Collectors.groupingBy(EsRevisionAdvice::getCreateUserId));
// 按照Map的Key遍历
for (String userId : adviceMap.keySet()) {
List<EsRevisionAdvice> adviceList = adviceMap.get(userId);
// 只有未被采纳和部分采纳才发消息
if (adviceList.stream().allMatch(advice -> HandleAdviceEnum.AGREE.getValue().equals(advice.getHandleAdvice()))) {
continue;
}
SendMessageDTO sendMessageDTO = new SendMessageDTO();
// sendMessageDTO.setTemplateCode(MessageTemplateCodeCommon.ES_REVISION_ADVICE);
sendMessageDTO.setToUserId(userId);
Map<String, String> sendMap = new HashMap<>();
sendMap.put("prcNum", processAll.getPrcNum());
sendMap.put("prcName", processAll.getPrcName());
StringBuilder msg = new StringBuilder();
for (EsRevisionAdvice advice : adviceList) {
// 采纳的不发消息
if (HandleAdviceEnum.AGREE.getValue().equals(advice.getHandleAdvice())) {
continue;
}
msg.append(advice.getClauseNum()).append(" ").append(advice.getClauseName());
if (HandleAdviceEnum.DISAGREE.getValue().equals(advice.getHandleAdvice())) {
msg.append(" 未被采纳,");
} else {
msg.append(" 被部分采纳,");
}
msg.append("理由为:").append(advice.getReason()).append("");
}
// 去除最后一个分号
if (StrUtil.isNotBlank(msg)) {
msg.deleteCharAt(msg.length() - 1);
}
sendMap.put("msg", msg.toString());
sendMessageDTO.setMap(sendMap);
// sendMessageAPI.sendMessage(sendMessageDTO);
}
}
// @Override
public void updateAllPlanDate() {
// 从流程主表找到所有企标制修订流程
List<ProcessAll> processAlls = processAllService.list(new LambdaQueryWrapper<ProcessAll>()
// .eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_REVISION.getValue())
.ne(ProcessAll::getPrcStatus, ProcessStatusEnum.WITHDRAWN.getValue()));
// this.updatePlanDateByProcessInstanceId(processAlls);
}
}
@@ -0,0 +1,37 @@
package com.jero.modules.laws.enterprise.entity;
import lombok.Getter;
/**
* @author: Mzaxd
* @Date: 2023/10/13 14:17
*/
@Getter
public enum ESPProjectStatus {
NOT_STARTED("未开始", "1"),
IN_PROGRESS("进行中", "2"),
OVERDUE_COMPLETED("逾期完成", "3"),
OVERDUE("逾期", "4"),
COMPLETED("完成", "5");
private final String name;
private final String value;
ESPProjectStatus(String name, String value) {
this.name = name;
this.value = value;
}
public static String getValueByName(String name) {
for (ESPProjectStatus status : ESPProjectStatus.values()) {
if (status.getName().equals(name)) {
return status.getValue();
}
}
// 如果找不到对应的状态值,则返回“未开始”的状态值
return ESPProjectStatus.NOT_STARTED.getValue();
}
}
@@ -1,13 +1,11 @@
package com.jero.modules.laws.enterprise.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.laws.enterprise.entity.dto.ESPlanQueryDTO;
import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardPlanVo;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardPlanVo;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author ThinkBook