Commit 1379b23f by jx-art

Merge remote-tracking branch 'origin/feature-changeFlow-221110' into feature-changeFlow-221110

parents b585bdd9 aa467044
......@@ -378,6 +378,17 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.netease.mail.yanxuan</groupId>
<artifactId>dschedule-boot-starter</artifactId>
<version>1.0.6-RELEASE</version>
<exclusions>
<exclusion>
<artifactId>fastjson</artifactId>
<groupId>com.alibaba</groupId>
</exclusion>
</exclusions>
</dependency>
<!--qc -->
<!-- <dependency>-->
<!-- <groupId>com.netease.yanxuan</groupId>-->
......
dschedule.enable=true
dschedule.env=test
dschedule.app-id=yanxuan-sc-ehc
dschedule.job-group=235
dschedule.app-id=yanxuan-qc-change-system
dschedule.job-group=736
dschedule.enable-auto-register=true
dschedule.executor-fail-strategy=fail_alarm
dschedule.alarm-email=wb.tanglongwei@mesg.corp.netease.com
......
......@@ -8,6 +8,7 @@ package com.netease.mail.yanxuan.change.biz.biz;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -232,7 +233,7 @@ public class ChangeFlowBiz {
}
}
private FlowDataDTO flowDetail(String flowId) {
public FlowDataDTO flowDetail(String flowId) {
// 查询工单详情,根据详情提交
FlowDataDTO flowDataDTO;
AjaxResponse<FlowDataDTO> flowDetailResponse = flowRpcService.getDetail(CommonConstants.FLOWX_PRODUCT, flowId);
......@@ -258,7 +259,7 @@ public class ChangeFlowBiz {
return flowCreateReqDTO;
}
private String submitFlow(String flowId, FlowDataDTO flowDataDTO, String uid, String topoId, String content) {
public String submitFlow(String flowId, FlowDataDTO flowDataDTO, String uid, String topoId, String content) {
NodeSubmitReqDTO nodeSubmitReqDTO = new NodeSubmitReqDTO();
nodeSubmitReqDTO.setFlowId(flowId);
nodeSubmitReqDTO.setNodeId(flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId());
......@@ -661,15 +662,25 @@ public class ChangeFlowBiz {
// 根据工单flowId获取审批人,创建工单时设置,唯一
String flowId = interfaceInput.getPublicFieldDTO().getFlowMeta().getFlowId();
String nodeId = interfaceInput.getPublicFieldDTO().getFlowMeta().getCurrNodeDataList().get(0).getNodeId();
ChangeRecord changeRecord = changeFlowService.getByFlowId(Long.valueOf(flowId));
String changeCommander = changeRecord.getChangeCommander();
if (null == changeCommander) {
throw ExceptionFactory.createBiz(ResponseCode.OPERATOR_NOT_EXIST, ResponseCode.OPERATOR_NOT_EXIST.getMsg());
log.info("[getOperator] flowId:{}, nodeId:{}", flowId, nodeId);
ChangeRecord changeRecord;
changeRecord = changeFlowService.getByFlowId(Long.valueOf(flowId));
log.info("[getOperator] first time get changeCommander:{}", changeRecord);
// 创建工单后落库,此时审批人还未落库,工单平台无法查询到审批人,方法休眠500ms
if (changeRecord == null) {
try {
Thread.sleep(500);
changeRecord = changeFlowService.getByFlowId(Long.valueOf(flowId));
log.info("[getOperator] second time get changeCommander:{}", changeRecord);
} catch (Exception e) {
log.info("[getOperator] flowId:{}, nodeId:{}, e={}", flowId, nodeId, e);
}
}
String changeCommander = changeRecord.getChangeCommander();
UserReachDTO userReachDTO = new UserReachDTO();
userReachDTO.setUserName(changeCommander);
userReachDTO.setUid(changeCommander);
List<UserReachDTO> totalUserList = Arrays.asList(userReachDTO);
List<UserReachDTO> totalUserList = Collections.singletonList(userReachDTO);
UserBaseContainerDTO userBaseContainer = new UserBaseContainerDTO();
userBaseContainer.setUserList(totalUserList);
return userBaseContainer;
......
......@@ -50,4 +50,15 @@ public interface ChangeFlowService {
* @return
*/
ChangeRecord getById(Long id);
/**
* 根据状态及时间获取数据
*
* @param entityId
* @param nodeId1
* @param nodeId2
* @param currentTime
* @return
*/
List<ChangeRecord> getByStatusAndTime(Long entityId, String nodeId1, String nodeId2, long currentTime);
}
\ No newline at end of file
......@@ -6,6 +6,8 @@
*/
package com.netease.mail.yanxuan.change.biz.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -52,4 +54,9 @@ public class ChangeFlowServiceImpl implements ChangeFlowService {
public ChangeRecord getById(Long id) {
return changeRecordMapper.selectByPrimaryKey(id);
}
@Override
public List<ChangeRecord> getByStatusAndTime(Long entityId, String nodeId1, String nodeId2, long currentTime) {
return changeRecordMapper.getByStatusAndTime(entityId, nodeId1, nodeId2, currentTime);
}
}
\ No newline at end of file
/**
* @(#)AutoSubmit.java, 2022/11/24.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.biz.task;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz;
import com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.common.bean.CommonConstants;
import com.netease.mail.yanxuan.change.common.bean.ResponseCode;
import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeStatusEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum;
import com.netease.mail.yanxuan.change.common.util.DateUtils;
import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import com.netease.mail.yanxuan.dschedule.core.biz.model.ReturnT;
import com.netease.mail.yanxuan.dschedule.core.handler.IJobHandler;
import com.netease.mail.yanxuan.dschedule.core.handler.annotation.JobHandler;
import com.netease.yanxuan.flowx.sdk.meta.dto.base.FlowDataDTO;
import lombok.extern.slf4j.Slf4j;
/**
* @Author zcwang
* @Date 2022/11/24
*/
@Component
@Slf4j
@JobHandler("AutoSubmit")
public class AutoSubmit extends IJobHandler {
@Autowired
private ChangeFlowService changeFlowService;
@Autowired
private ChangeFlowBiz changeFlowBiz;
@Override
public ReturnT<String> execute(String... strings) throws Exception {
log.info("AutoSubmit start");
// 查询今天时间之前的数据
long currentTime = DateUtils.getCurrentTime();
Long entityId = 0L;
while (true) {
List<ChangeRecord> records = changeFlowService.getByStatusAndTime(entityId, ChangeFlowEnum.CHANGE_FLOW_EXE.getNodeId(),
ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getNodeId(), currentTime);
if (CollectionUtils.isEmpty(records)) {
break;
}
records.forEach(this::progressRecord);
List<Long> idList = records.stream().map(ChangeRecord::getId).collect(Collectors.toList());
entityId = idList.stream().max(Long::compare).get();
}
return null;
}
private void progressRecord(ChangeRecord changeRecord) {
Long flowId = changeRecord.getFlowId();
String flowNode = changeRecord.getFlowNode();
String uid = changeRecord.getChangeCommander();
// 执行变更节点,提交节点
if (ChangeFlowEnum.CHANGE_FLOW_EXE.getNodeId().equals(flowNode)) {
// 获取工单详情
FlowDataDTO flowDataDTO = changeFlowBiz.flowDetail(flowId.toString());
if (flowDataDTO == null) {
log.debug("[progressRecord] get flowDataDTO error, flowId{}", flowId);
}
// 工单流传
Map<String, Object> content = new HashMap<>(CommonConstants.INIT_HASH_MAP_SIZE);
content.put("updateTime", System.currentTimeMillis());
content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.PASS.getValue());
try {
String execNode = changeFlowBiz.submitFlow(flowId.toString(), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_EXE.getTopoId(), JSON.toJSONString(content));
// 更新工单数据
changeRecord.setFlowNode(execNode);
changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord);
// todo: 发送邮件
} catch (Exception e) {
log.debug("[progressRecord] submit error, flowId{}", flowId);
}
} else if (ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getNodeId().equals(flowNode)) {
// todo: 发送邮件
}
}
}
\ No newline at end of file
......@@ -26,4 +26,7 @@ public interface ChangeRecordMapper extends tk.mybatis.mapper.common.Mapper<Chan
ChangeRecord selectByFlowId(@Param("flowId") Long flowId);
List<ChangeRecord> selectByCondition(ChangeFlowListQueryReq changeFlowListQueryReq);
@Select("select * from TB_YX_QC_CHANGE_RECORD where id > #{entityId} and `flowNode` in (#{nodeId1}, #{nodeId2}) and changeConfirmResultTime <= #{currentTime} limit 200")
List<ChangeRecord> getByStatusAndTime(Long entityId, String nodeId1, String nodeId2, long currentTime);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment