feat: 在线编辑文件接收改为后端主动下载

This commit is contained in:
2024-10-10 10:14:30 +08:00
parent cd39e13752
commit bc42bfbbe1
10 changed files with 744 additions and 20 deletions
@@ -365,7 +365,6 @@ public class OSSFileServiceImpl extends ServiceImpl<OSSFileMapper, OSSFile> impl
@Override
public Result<OSSFile> outUpload(HttpServletRequest request) {
Result<OSSFile> result = new Result<>();
String savePath = "";
String bizPath = request.getParameter("biz");
//sys/common/upload接口存在任意文件上传漏洞
@@ -21,7 +21,11 @@ public enum ProcessType {
DOMESTIC_VEHICLE_CONTROL_PUBLISH("国内整车型号和VIN前八位管控流程", "8", "domestic_vehicle_control_publish", "ProcessVehicleDomesticReleaseServiceImpl"),
PLAN_CHANGE("企业标准计划变更流程", "9", "process-plan-change", "ProcessPlanChangeService"),
INTERNATIONAL_VEHICLE_CONTROL_PUBLISH("国际整车型号和VIN前八位管控流程", "10", "international_vehicle_control_publish", "ProcessVehicleInternationalReleaseServiceImpl"),
PART_TYPE_APPLY("关键零部件型号申请流程", "11", "part_type_apply","ProcessPartTypeApplyServiceImpl")
PART_TYPE_APPLY("关键零部件型号申请流程", "11", "part_type_apply","ProcessPartTypeApplyServiceImpl"),
SPECIAL_ES_APPROVAL("专业技术企业标准报批流程", "12", "special_es_approval", "ProcessSpecialEsApprovalServiceImpl"),
MACHINE_ES_APPROVAL("产品标准-整车企业标准报批流程", "13", "machine_es_approval", "ProcessMachineEsApprovalServiceImpl"),
ES_CAR_APPROVAL("产品标准-整机企业标准报批流程", "14", "es_car_approval", "ProcessEsCarApprovalServiceImpl"),
ES_RECHECK("企标复审流程", "15", "es_recheck", "ProcessEsRecheckServiceImpl"),
;
private final String name;
@@ -0,0 +1,25 @@
package com.jero.modules.activiti.process.specialEsApproval.common;
/**
* @author: Mzaxd
* @Date: 2023/12/19 15:14
*/
public class SpecialEsApprovalTaskNodeIdConstant {
/** 法规工程师确认是否开启征求意见 */
public static final String CONFIRM_ADVISE = "Activity_1siuksf";
/** 设计工程师填写意见 */
public static final String ADVICE = "Activity_04m430n";
/** 法规工程师汇总数据 */
public static final String ADVICE_COLLECT = "Activity_1riqzkp";
/** 法规工程师派号 */
public static final String SET_STANDARD_NUMBER = "Activity_11uuyg0";
/** 主起草人 */
public static final String MAIN_DRAFT_USER = "mainDraftUser";
/** 法规工程师 */
public static final String STANDARD_ENGINEER = "standardEngineer";
/** 征求意见人员 */
public static final String ADVICE_USER_LIST = "adviceUserList";
/** 开启征求意见 */
public static final String OPEN = "open";
}
@@ -0,0 +1,73 @@
package com.jero.modules.activiti.process.specialEsApproval.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.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.specialEsApproval.entity.ProcessSpecialEsApproval;
import com.jero.modules.activiti.process.specialEsApproval.service.SpecialEsApprovalService;
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/specialEsApproval")
public class SpecialEsApprovalController {
@Resource
private SpecialEsApprovalService revisionService;
@Resource
private ActFlowCommonService actFlowCommonService;
/**
* 企标制修订流程
*
* @param processInfoVO
*/
@AutoLog(value = "企标制修订流程-发起流程")
@ApiOperation(value="企标制修订流程-发起流程", notes="企标制修订流程-发起流程")
@PostMapping("/start")
public Result<?> startProcess(@RequestBody ProcessInfoVO<ProcessSpecialEsApproval> processInfoVO) {
revisionService.startProcess(processInfoVO);
return Result.OK();
}
@AutoLog(value = "企标制修订流程-提交")
@ApiOperation(value = "企标制修订流程-提交", notes = "企标制修订流程-提交")
@PostMapping("/submit")
public Result<T> submit(@RequestBody ProcessInfoVO<ProcessSpecialEsApproval> 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));
}
}
@@ -0,0 +1,127 @@
package com.jero.modules.activiti.process.specialEsApproval.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 io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
*
* @TableName process_es_revision
*/
@TableName(value ="process_es_revision")
@Data
public class ProcessSpecialEsApproval 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;
/**
* 征求意见截止日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "征求意见截止日期")
private Date adviceDeadline;
/**
* 在线编辑文件id
*/
@ApiModelProperty(value = "在线编辑文件id")
private String onEditFile;
/**
* 业务json数据
*/
@ApiModelProperty(value = "业务JSON数据")
private String businessJson;
/**
* 主起草人
*/
@TableField(exist = false)
@ApiModelProperty(value = "主起草人")
private String mainDraftUser;
/**
* 法规工程师
*/
@TableField(exist = false)
@ApiModelProperty(value = "法规工程师")
private String standardEngineer;
/**
* 设计工程师
*/
@TableField(exist = false)
@ApiModelProperty(value = "设计工程师")
private String adviceUsers;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
@@ -0,0 +1,90 @@
package com.jero.modules.activiti.process.specialEsApproval.listener;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService;
import com.jero.modules.activiti.process.specialEsApproval.entity.ProcessSpecialEsApproval;
import com.jero.modules.activiti.process.specialEsApproval.service.SpecialEsApprovalService;
import com.jero.modules.laws.common.constant.FieldCommon;
import com.jero.modules.laws.common.service.ILawsCommonService;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.tag.enums.TableNameEnum;
import lombok.SneakyThrows;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Map;
/**
* @author: Mzaxd
* @Date: 2023/12/19 11:59
*/
@Component
public class ProcessSpecialEsApprovalEndListener implements ExecutionListener {
@Resource
private SpecialEsApprovalService esRevisionService;
@Resource
private EsRevisionAdviceService esAdviceService;
@Resource
private ILawsCommonService lawsCommonService;
@Resource
private IOSSFileService ossFileService;
@Resource
private EsRevisionAdviceService revisionAdviceService;
@Value(value = "${jero.uploadType}")
private String uploadType;
@SneakyThrows
@Override
public void notify(DelegateExecution delegateExecution) {
// // 获取流程实例Id
// String processInstanceId = delegateExecution.getProcessInstanceId();
// // 根据流程Id获取业务数据
// LambdaQueryWrapper<ProcessSpecialEsApproval> revisionWrapper = new LambdaQueryWrapper<>();
// revisionWrapper.eq(ProcessSpecialEsApproval::getProcessInstanceId, processInstanceId);
// // 获取企标相关数据
// ProcessSpecialEsApproval data = esRevisionService.getOne(revisionWrapper);
// // 将数据转换为Map
// Map<String, Object> variables = transMap(data);
// Date adviceDeadline = data.getAdviceDeadline();
// if (adviceDeadline != null) {
// // 制作征求意见稿
// String draftFileId = this.makeDraftFile(data);
// variables.put(FieldCommon.FILE_DRAFT_FOR_COMMENT, draftFileId);
// }
// // 发布企标
// String esId = lawsCommonService.commonAdd(variables);
// // 所有意见设置标准Id
// LambdaQueryWrapper<EsRevisionAdvice> adviceWrapper = new LambdaQueryWrapper<>();
// adviceWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId);
// List<EsRevisionAdvice> list = esAdviceService.list(adviceWrapper);
// if (!list.isEmpty()) {
// list.forEach(item -> item.setStandardId(esId));
// esAdviceService.updateBatchById(list);
// }
// // 更改企标计划状态
}
private Map<String, Object> transMap(ProcessSpecialEsApproval data) {
Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
variables.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue());
// 标准状态
variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.SEEK_FOR_OPINIONS.getStateValue());
String standardId = IdWorker.getIdStr();
variables.put(FieldCommon.ID, standardId);
String onEditFile = data.getOnEditFile();
// 发布稿
variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, onEditFile);
return variables;
}
}
@@ -0,0 +1,18 @@
package com.jero.modules.activiti.process.specialEsApproval.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.specialEsApproval.entity.ProcessSpecialEsApproval;
/**
* @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 ProcessSpecialEsApprovalMapper extends BaseMapper<ProcessSpecialEsApproval> {
}
@@ -0,0 +1,21 @@
package com.jero.modules.activiti.process.specialEsApproval.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.specialEsApproval.entity.ProcessSpecialEsApproval;
/**
* @author ThinkBook
* @description 针对表【process_es_revision】的数据库操作Service
* @createDate 2023-12-19 11:58:59
*/
public interface SpecialEsApprovalService extends IService<ProcessSpecialEsApproval> {
ProcessInfoVO<ProcessSpecialEsApproval> getHandleData(String taskId);
void startProcess(ProcessInfoVO<ProcessSpecialEsApproval> processInfoVO);
void submit(ProcessInfoVO<ProcessSpecialEsApproval> processInfoVO);
}
@@ -0,0 +1,310 @@
package com.jero.modules.activiti.process.specialEsApproval.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.SendMessageAPI;
import com.jero.common.api.dto.message.SendMessageDTO;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
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.esRevisionAdvice.entity.EsRevisionAdvice;
import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService;
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.process.specialEsApproval.entity.ProcessSpecialEsApproval;
import com.jero.modules.activiti.process.specialEsApproval.mapper.ProcessSpecialEsApprovalMapper;
import com.jero.modules.activiti.process.specialEsApproval.service.SpecialEsApprovalService;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.common.constant.MessageTemplateCodeCommon;
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.enterprise.util.EnterpriseStandardUtil;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.sys.utils.UserUtils;
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.HashMap;
import java.util.List;
import java.util.Map;
import static com.jero.modules.activiti.process.esRevisionAdvice.common.RevisionTaskNodeIdConstant.*;
/**
* @author ThinkBook
* @description 针对表【process_es_revision】的数据库操作Service实现
* @createDate 2023-12-19 11:58:59
*/
@Service
@Slf4j
@Transactional(rollbackFor = JeroBootException.class)
public class SpecialEsApprovalServiceImpl extends ServiceImpl<ProcessSpecialEsApprovalMapper, ProcessSpecialEsApproval>
implements SpecialEsApprovalService {
@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 SendMessageAPI sendMessageAPI;
@Resource
private ILawsEnterpriseStandardService esService;
@Resource
private EnterpriseStandardPlanService planService;
@Resource
private EnterpriseStandardUtil esUtil;
@Override
public void startProcess(ProcessInfoVO<ProcessSpecialEsApproval> 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<ProcessSpecialEsApproval> processInfoVO) {
String processInstanceId = processInfoVO.getBasicProcessInfoDTO().getProcessInstanceId();
ProcessSpecialEsApproval processInfo = processInfoVO.getBusinessInfoDTO();
// 修改企标计划状态
// 检查企标计划是否已被删除
String espId = processInfo.getEspId();
EnterpriseStandardPlan esp = espService.getById(espId);
if (esp == null) {
throw new JeroBootException(ResultCommon.INVALID_ESP);
}
// 设置状态为运行中
espService.updateProjectStatus(espId, ESPProjectStatus.IN_PROGRESS.getValue());
// 保存数据
processInfo.setProcessInstanceId(processInstanceId);
save(processInfo);
}
private Map<String, Object> setVariables(ProcessInfoVO<ProcessSpecialEsApproval> processInfoVO) {
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 获取分发人
return new HashMap<>(userInfoMap);
}
@Override
public ProcessInfoVO<ProcessSpecialEsApproval> getHandleData(String taskId) {
if (!actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException(ResultCommon.TASK_NOT_EXISTS);
}
ProcessInfoVO<ProcessSpecialEsApproval> result = new ProcessInfoVO<>();
ProcessSpecialEsApproval processVo = new ProcessSpecialEsApproval();
// 使用流程引擎根据taskId找到流程实例Id
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
result.setBasicProcessInfoDTO(actFlowCommonService.getProcessInfo(processInstanceId));
// 获取流程通用数据
ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
// 获取当前流程数据
LambdaQueryWrapper<ProcessSpecialEsApproval> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessSpecialEsApproval::getProcessInstanceId, processInstanceId);
ProcessSpecialEsApproval data = getOne(queryWrapper);
// 获取当前流程
String xmlNodeId = record.getNodeId();
// 设置流程信息
switch (xmlNodeId) {
case CONFIRM_ADVISE:
case ADVICE:
case SET_STANDARD_NUMBER:
break;
}
// 设置流程变量等相关信息
// processVo.setProcessInfo(data);
result.setBusinessInfoDTO(processVo);
return result;
}
@Override
public void submit(ProcessInfoVO<ProcessSpecialEsApproval> processInfoVO) {
// BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
// String taskId = processTask.getTaskId();
// // 校验是否有权限操作此待办
// processHandleService.validTask(taskId);
// // 获取当前节点的id
// ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
// String xmlNodeId = record.getNodeId();
// String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
// BasicProcessInfoDTO processInfo = new BasicProcessInfoDTO();
// // 使用流程引擎根据taskId找到流程实例Id
// String mainInstanceId = (String) taskService.getVariable(taskId, MAIN_INSTANCE_ID);
// processInfo.setProcessInstanceId(mainInstanceId);
// processInfoVO.setBasicProcessInfoDTO(processInfo);
// // 更新审批表为完成,填充数据
// actFlowCommonService.updateApprovalInfo(processTask, taskId);
// String curUserId = UserUtils.getUserId();
// ProcessSpecialEsApproval businessInfoDTO = processInfoVO.getBusinessInfoDTO();
//// ProcessSpecialEsApproval data = businessInfoDTO.getProcessInfo();
//// List<EsRevisionAdvice> adviceList = businessInfoDTO.getAdviceList();
// // 根据流程实例Id获取流程定义ID
// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
// // 获取数据库中的流程信息
// LambdaQueryWrapper<ProcessSpecialEsApproval> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(ProcessSpecialEsApproval::getProcessInstanceId, processInstanceId);
// ProcessSpecialEsApproval dataFromDb = getOne(queryWrapper);
// if (dataFromDb != null) {
// data.setId(dataFromDb.getId());
// }
// // 获取流程实例ID
// String processDefinitionId = processInstance.getProcessDefinitionId();
// Map<String, Object> userMap = new HashMap<>();
// LambdaQueryWrapper<EsRevisionAdvice> detailQueryWrapper = new LambdaQueryWrapper<>();
// detailQueryWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId);
// List<EsRevisionAdvice> dbAdviceList = adviceService.list(detailQueryWrapper);
// // 筛选出最新一轮
// Integer maxBatchNum = this.calculateAdviceBatchNum(dbAdviceList);
// switch (xmlNodeId) {
// case CONFIRM_ADVISE:
// // 判断是否开启征求意见子流程 设置流程变量
// boolean adviceFlag = !data.getAdviceFlag().equals(YesOrNoEnum.NO.getValue());
// if (adviceFlag) {
// List<String> adviceUserList = Arrays.asList(data.getAdviceUsers().split(","));
// taskService.setVariable(taskId, ADVICE_USER_LIST, adviceUserList);
// taskService.setVariable(taskId, STANDARD_ENGINEER, curUserId);
// taskService.setVariable(taskId, OPEN, true);
// // 保存流程数据
// saveOrUpdate(data);
// userMap.put(STANDARD_ENGINEER, curUserId);
// userMap.put(ADVICE_USER_LIST, data.getAdviceUsers());
// processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap);
// } else {
// taskService.setVariable(taskId, OPEN, false);
// }
// break;
// case SET_STANDARD_NUMBER:
// // 判断标准编号是否重复
// Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
// // 根据派号字段重新生成标准编号
// String standardNumberTmp = (String) variables.get(FieldCommon.STANDARD_NUMBER_TEMP);
// String standardNumber = "";
// if (StringUtils.isNotBlank(standardNumberTmp)) {
// // 组合企标编号
// standardNumber = esUtil.combineStandardNumber(variables);
// } else {
// // 生成企标编号
// standardNumber = esUtil.generateStandardNumber(variables);
// standardNumberTmp = EnterpriseStandardUtil.getSequenceNoFromStandardNo(standardNumber);
// }
// variables.put(FieldCommon.STANDARD_NUMBER, standardNumber);
// variables.put(FieldCommon.STANDARD_NUMBER_TEMP, standardNumberTmp);
// // 重新序列化为json
// data.setBusinessJson(JSON.toJSONString(variables));
// // 校验重复
// LambdaQueryWrapper<LawsEnterpriseStandard> esQueryWrapper = new LambdaQueryWrapper<>();
// esQueryWrapper.eq(LawsEnterpriseStandard::getStandardNumber, standardNumber);
// LawsEnterpriseStandard es = esService.getOne(esQueryWrapper);
// if (Objects.nonNull(es)) {
// throw new JeroBootException(ResultCommon.STANDARD_NUMBER_ALREADY_EXISTS);
// }
// LambdaQueryWrapper<EnterpriseStandardPlan> planQueryWrapper = new LambdaQueryWrapper<>();
// planQueryWrapper.eq(EnterpriseStandardPlan::getStandardNumber, standardNumber);
// EnterpriseStandardPlan plan = planService.getOne(planQueryWrapper);
// if (Objects.nonNull(plan)) {
// throw new JeroBootException(ResultCommon.STANDARD_NUMBER_ALREADY_EXISTS);
// }
// // 保存数据
// updateById(data);
// break;
// }
// 审批节点
// actFlowCommonService.completeTask(taskId, curUserId);
// // 更新审批表为完成,填充数据
// actFlowCommonService.updateApprovalInfo(processTask, taskId);
// // 删除草稿
// actFlowCommonService.removeDraft(curUserId, taskId, processInstanceId);
// // 保存快照
// processHandleService.saveToSnapshot(processInfoVO, curUserId);
}
private Integer calculateAdviceBatchNum(List<EsRevisionAdvice> adviceList) {
return adviceList.stream().mapToInt(EsRevisionAdvice::getBatchNum).max().orElse(0);
}
private void sendMessageToMainDraftUser(String mainDraftUser, String processInstanceId, Integer maxBatchNum) {
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
SendMessageDTO sendMessageDTO = new SendMessageDTO();
sendMessageDTO.setTemplateCode(MessageTemplateCodeCommon.ES_REVISION_ADVICE);
sendMessageDTO.setToUserId(mainDraftUser);
Map<String, String> sendMap = new HashMap<>();
sendMap.put("prcNum", processAll.getPrcNum());
sendMap.put("batchNum", maxBatchNum.toString());
sendMessageDTO.setMap(sendMap);
sendMessageAPI.sendMessage(sendMessageDTO);
}
}
@@ -4,6 +4,7 @@ import cn.hutool.core.io.IoUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.util.IntekeyUtils;
import com.jero.common.util.MessageUtils;
import com.jero.common.util.obs.ObsBootUtil;
import com.jero.modules.onlyoffice.entity.ProcessFile;
@@ -16,15 +17,16 @@ import com.sini.com.spire.doc.documents.PageOrientation;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mock.web.MockMultipartHttpServletRequest;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.text.SimpleDateFormat;
@@ -46,32 +48,87 @@ public class OnlyOfficeController {
@Resource
private IOSSFileService ossFileService;
@Value("${file.path}")
private String filePath;//文件存储路径
@ApiOperation(value = "|onlyOffice接收文件")
@ApiOperation(value = "onlyOffice接收文件")
@PostMapping("/receiveFile")
public void receiveFile(HttpServletRequest request, String fileId) {
public void receiveFileBefore(HttpServletRequest request, HttpServletResponse response, String fileId, String fileNm) throws IOException {
log.info("**********进入receiveFile接收文档接口************");
log.info("**********fileId************" + fileId + "=======");
try {
request.setAttribute("biz", "onlyOffice");
Result<OSSFile> result = ossFileService.outUpload(request);
PrintWriter writer = response.getWriter();
String body = "";
try {
Scanner scanner = new Scanner(request.getInputStream());
scanner.useDelimiter("\\A");
body = scanner.hasNext() ? scanner.next() : "";
scanner.close();
} catch (Exception ex) {
writer.write("get request.getInputStream error:" + ex.getMessage());
return;
}
if (body.isEmpty()) {
writer.write("empty request.getInputStream");
return;
}
net.sf.json.JSONObject jsonObj = net.sf.json.JSONObject.fromObject(body);
log.info("**********onlyoffice接收文档接口获得结果body************" + body);
String downloadUri = (String) jsonObj.get("url");
log.info("**********onlyoffice接收文档接口获得downloadUri************" + downloadUri);
// 创建临时文件
File file = File.createTempFile("onlyoffice", ".docx");
downloadNetFile(downloadUri, file);
// 将file转换为MultiPartFile
// 创建一个 MockMultipartHttpServletRequest 对象
MockMultipartHttpServletRequest mockRequest = new MockMultipartHttpServletRequest();
// 将文件转换为 InputStream
InputStream inputStream = Files.newInputStream(file.toPath());
// 使用工具类转换 InputStream 到 MultipartFile 对象
MultipartFile multipartFile = IntekeyUtils.convertMultipart(inputStream, fileNm);
// 将 MultipartFile 添加到 MockMultipartHttpServletRequest 中
mockRequest.addFile(multipartFile);
mockRequest.setParameter("biz", "onlyOffice");
Result<OSSFile> result = ossFileService.outUpload(mockRequest);
// 将文件名字改成和原始文件一样
OSSFile file = ossFileService.getById(fileId);
OSSFile dbFile = ossFileService.getById(fileId);
if (result.isSuccess()) {
OSSFile ossFile = result.getResult();
ossFile.setFileName(file.getFileName());
ossFile.setStandardId(file.getStandardId());
ossFile.setStandardNo(file.getStandardNo());
ossFile.setStandardFileType(file.getStandardFileType());
ossFile.setOnlId(file.getOnlId());
ossFile.setFileName(dbFile.getFileName());
ossFile.setStandardId(dbFile.getStandardId());
ossFile.setStandardNo(dbFile.getStandardNo());
ossFile.setStandardFileType(dbFile.getStandardFileType());
ossFile.setOnlId(dbFile.getOnlId());
ossFileService.updateById(ossFile);
}
} catch (Exception e) {
log.error("**********onlyoffice接收文档接口异常************" + e.getMessage());
log.error("onlyOffice接收文档接口异常", e);
}
}
public void downloadNetFile(String downloadUrl, File file) {
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
URL url = new URL(downloadUrl);
URLConnection connection = url.openConnection();
InputStream inputStream = connection.getInputStream();
int length = 0;
byte[] bytes = new byte[1024];
while ((length = inputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, length);
}
fileOutputStream.close();
inputStream.close();
} catch (IOException e) {
log.error("download error ! url :{}", downloadUrl);
log.error(e.getMessage());
}
}
@GetMapping("/processEditFile")
public ProcessFile processEditFile(String id) {
return ProcessFileService.processEditFile(id);