Commit 1379b23f by jx-art

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

parents b585bdd9 aa467044
...@@ -378,6 +378,17 @@ ...@@ -378,6 +378,17 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </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 --> <!--qc -->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>com.netease.yanxuan</groupId>--> <!-- <groupId>com.netease.yanxuan</groupId>-->
......
dschedule.enable=true dschedule.enable=true
dschedule.env=test dschedule.env=test
dschedule.app-id=yanxuan-sc-ehc dschedule.app-id=yanxuan-qc-change-system
dschedule.job-group=235 dschedule.job-group=736
dschedule.enable-auto-register=true dschedule.enable-auto-register=true
dschedule.executor-fail-strategy=fail_alarm dschedule.executor-fail-strategy=fail_alarm
dschedule.alarm-email=wb.tanglongwei@mesg.corp.netease.com dschedule.alarm-email=wb.tanglongwei@mesg.corp.netease.com
......
...@@ -8,6 +8,7 @@ package com.netease.mail.yanxuan.change.biz.biz; ...@@ -8,6 +8,7 @@ package com.netease.mail.yanxuan.change.biz.biz;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -232,7 +233,7 @@ public class ChangeFlowBiz { ...@@ -232,7 +233,7 @@ public class ChangeFlowBiz {
} }
} }
private FlowDataDTO flowDetail(String flowId) { public FlowDataDTO flowDetail(String flowId) {
// 查询工单详情,根据详情提交 // 查询工单详情,根据详情提交
FlowDataDTO flowDataDTO; FlowDataDTO flowDataDTO;
AjaxResponse<FlowDataDTO> flowDetailResponse = flowRpcService.getDetail(CommonConstants.FLOWX_PRODUCT, flowId); AjaxResponse<FlowDataDTO> flowDetailResponse = flowRpcService.getDetail(CommonConstants.FLOWX_PRODUCT, flowId);
...@@ -258,7 +259,7 @@ public class ChangeFlowBiz { ...@@ -258,7 +259,7 @@ public class ChangeFlowBiz {
return flowCreateReqDTO; 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 nodeSubmitReqDTO = new NodeSubmitReqDTO();
nodeSubmitReqDTO.setFlowId(flowId); nodeSubmitReqDTO.setFlowId(flowId);
nodeSubmitReqDTO.setNodeId(flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId()); nodeSubmitReqDTO.setNodeId(flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId());
...@@ -661,15 +662,25 @@ public class ChangeFlowBiz { ...@@ -661,15 +662,25 @@ public class ChangeFlowBiz {
// 根据工单flowId获取审批人,创建工单时设置,唯一 // 根据工单flowId获取审批人,创建工单时设置,唯一
String flowId = interfaceInput.getPublicFieldDTO().getFlowMeta().getFlowId(); String flowId = interfaceInput.getPublicFieldDTO().getFlowMeta().getFlowId();
String nodeId = interfaceInput.getPublicFieldDTO().getFlowMeta().getCurrNodeDataList().get(0).getNodeId(); String nodeId = interfaceInput.getPublicFieldDTO().getFlowMeta().getCurrNodeDataList().get(0).getNodeId();
ChangeRecord changeRecord = changeFlowService.getByFlowId(Long.valueOf(flowId)); log.info("[getOperator] flowId:{}, nodeId:{}", flowId, nodeId);
String changeCommander = changeRecord.getChangeCommander(); ChangeRecord changeRecord;
if (null == changeCommander) { changeRecord = changeFlowService.getByFlowId(Long.valueOf(flowId));
throw ExceptionFactory.createBiz(ResponseCode.OPERATOR_NOT_EXIST, ResponseCode.OPERATOR_NOT_EXIST.getMsg()); 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 userReachDTO = new UserReachDTO();
userReachDTO.setUserName(changeCommander); userReachDTO.setUserName(changeCommander);
userReachDTO.setUid(changeCommander); userReachDTO.setUid(changeCommander);
List<UserReachDTO> totalUserList = Arrays.asList(userReachDTO); List<UserReachDTO> totalUserList = Collections.singletonList(userReachDTO);
UserBaseContainerDTO userBaseContainer = new UserBaseContainerDTO(); UserBaseContainerDTO userBaseContainer = new UserBaseContainerDTO();
userBaseContainer.setUserList(totalUserList); userBaseContainer.setUserList(totalUserList);
return userBaseContainer; return userBaseContainer;
......
...@@ -50,4 +50,15 @@ public interface ChangeFlowService { ...@@ -50,4 +50,15 @@ public interface ChangeFlowService {
* @return * @return
*/ */
ChangeRecord getById(Long id); 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 @@ ...@@ -6,6 +6,8 @@
*/ */
package com.netease.mail.yanxuan.change.biz.service.impl; package com.netease.mail.yanxuan.change.biz.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -52,4 +54,9 @@ public class ChangeFlowServiceImpl implements ChangeFlowService { ...@@ -52,4 +54,9 @@ public class ChangeFlowServiceImpl implements ChangeFlowService {
public ChangeRecord getById(Long id) { public ChangeRecord getById(Long id) {
return changeRecordMapper.selectByPrimaryKey(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 ...@@ -26,4 +26,7 @@ public interface ChangeRecordMapper extends tk.mybatis.mapper.common.Mapper<Chan
ChangeRecord selectByFlowId(@Param("flowId") Long flowId); ChangeRecord selectByFlowId(@Param("flowId") Long flowId);
List<ChangeRecord> selectByCondition(ChangeFlowListQueryReq changeFlowListQueryReq); List<ChangeRecord> selectByCondition(ChangeFlowListQueryReq changeFlowListQueryReq);
}
\ No newline at end of file @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