Files
pqs/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/ExecutionCenter.java

195 lines
8.6 KiB
Java
Raw Normal View History

2023-11-07 11:28:30 +08:00
package com.njcn.prepare;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
2023-11-07 16:34:55 +08:00
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.StrPool;
2023-11-07 11:28:30 +08:00
import cn.hutool.core.util.StrUtil;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
2023-11-10 10:37:34 +08:00
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
2023-11-07 11:28:30 +08:00
import com.njcn.prepare.bo.BaseParam;
import com.njcn.prepare.bo.CalculatedParam;
import com.njcn.prepare.harmonic.enums.PrepareResponseEnum;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
2023-11-10 10:37:34 +08:00
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
2023-11-07 11:28:30 +08:00
import com.njcn.web.controller.BaseController;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.FlowExecutor;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.flow.LiteflowResponse;
2023-11-07 16:34:55 +08:00
import com.yomahub.liteflow.flow.entity.CmpStep;
2023-11-07 11:28:30 +08:00
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.time.LocalDateTime;
2023-11-07 16:34:55 +08:00
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
2023-11-07 11:28:30 +08:00
/**
* @author hongawen
* @version 1.0.0
* @date 2023年11月01日 10:20
*/
@Slf4j
2023-11-07 16:34:55 +08:00
@Api(tags = "算法执行中心")
2023-11-07 11:28:30 +08:00
@RestController
@RequestMapping("/executor")
@RequiredArgsConstructor
public class ExecutionCenter extends BaseController {
private final CommTerminalGeneralClient commTerminalGeneralClient;
2023-11-10 10:37:34 +08:00
private final DeptFeignClient deptFeignClient;
2023-11-07 11:28:30 +08:00
@Resource
private FlowExecutor flowExecutor;
2023-11-07 16:34:55 +08:00
/***
* 1校验非全链执行时tagNames节点标签集合必须为非空否则提示---无可执行节点
* 2补招标识为true时起始日期&截止日期不可为空
* 3算法需要的索引集合
* @author hongawen
* @date 2023/11/3 11:36
* @param baseParam 执行的基础参数
*/
private CalculatedParam judgeExecuteParam(BaseParam baseParam) {
CalculatedParam calculatedParam = new CalculatedParam();
if (!baseParam.isFullChain() && CollectionUtil.isEmpty(baseParam.getTagNames())) {
throw new BusinessException(PrepareResponseEnum.NO_EXECUTOR_NODE);
}
2023-11-14 10:51:33 +08:00
if (baseParam.isRepair() && StrUtil.isAllEmpty(baseParam.getBeginTime(), baseParam.getEndTime())) {
2023-11-07 16:34:55 +08:00
throw new BusinessException(PrepareResponseEnum.NO_REPAIR_DATE);
}
BeanUtil.copyProperties(baseParam, calculatedParam);
return calculatedParam;
}
/***
*
* @author hongawen
* @date 2023/11/7 14:44
*/
private void dealResponse(CalculatedParam calculatedParam, LiteflowResponse liteflowResponse,String methodDescribe) {
if(liteflowResponse.isSuccess()){
log.info("日期{}{}执行{}成功",calculatedParam.getDataDate(),methodDescribe,calculatedParam.isFullChain()?"全链":"指定节点:".concat(String.join(StrPool.COMMA,calculatedParam.getTagNames())));
}else{
Map<String, List<CmpStep>> executeSteps = liteflowResponse.getExecuteSteps();
CmpStep failStep = null;
for (String key : executeSteps.keySet()) {
List<CmpStep> cmpSteps = executeSteps.get(key);
cmpSteps=cmpSteps.stream().filter(cmpStep -> !cmpStep.isSuccess()).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(cmpSteps)){
failStep = cmpSteps.get(0);
}
}
log.error("日期{}{}执行{}失败,在执行{}失败,失败原因:{}"
,calculatedParam.getDataDate()
,methodDescribe
,calculatedParam.isFullChain()?"全链":"指定节点:".concat(String.join(StrPool.COMMA,calculatedParam.getTagNames()))
,failStep.getNodeId().concat(Objects.isNull(failStep.getTag()) ? "" :StrPool.DASHED.concat(failStep.getTag()))
2023-11-09 09:28:06 +08:00
,Objects.isNull(failStep.getException()) ? null:failStep.getException().getMessage());
2023-11-07 16:34:55 +08:00
}
}
2023-11-07 11:28:30 +08:00
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("监测点算法执行链")
@PostMapping("/measurementPointExecutor")
public void measurementPointExecutor(@RequestBody BaseParam baseParam) {
2023-11-07 16:34:55 +08:00
String methodDescribe = getMethodDescribe("measurementPointExecutor");
2023-11-07 11:28:30 +08:00
//手动判断参数是否合法,
CalculatedParam calculatedParam = judgeExecuteParam(baseParam);
// 测点索引
if (CollectionUtils.isEmpty(calculatedParam.getIdList())) {
calculatedParam.setIdList(commTerminalGeneralClient.getRunMonitorIds().getData());
}
LiteflowResponse liteflowResponse;
if (baseParam.isRepair()) {
//补招时,起始日期、截止日期必填
DateTime startDate = DateUtil.parse(baseParam.getBeginTime(), DatePattern.NORM_DATE_FORMAT);
DateTime endDate = DateUtil.parse(baseParam.getEndTime(), DatePattern.NORM_DATE_FORMAT);
long betweenDay = DateUtil.betweenDay(startDate, endDate, true);
//递增日期执行算法链
for (int i = 0; i < betweenDay; i++) {
if (i != 0) {
startDate = DateUtil.offsetDay(startDate, 1);
}
calculatedParam.setDataDate(DateUtil.format(startDate, DatePattern.NORM_DATE_PATTERN));
liteflowResponse = flowExecutor.execute2Resp("measurement_point", calculatedParam);
2023-11-07 16:34:55 +08:00
dealResponse(calculatedParam,liteflowResponse,methodDescribe);
2023-11-07 11:28:30 +08:00
}
} else {
//非补招
liteflowResponse = flowExecutor.execute2Resp("measurement_point", calculatedParam);
2023-11-07 16:34:55 +08:00
dealResponse(calculatedParam,liteflowResponse,methodDescribe);
2023-11-07 11:28:30 +08:00
}
2023-11-10 10:37:34 +08:00
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("单位监测点算法执行链")
2023-11-10 16:06:21 +08:00
@PostMapping("/orgPointExecutor")
public void orgPointExecutor(@RequestBody BaseParam baseParam) {
2023-11-10 10:37:34 +08:00
String methodDescribe = getMethodDescribe("OrgPointExecutor");
//手动判断参数是否合法,
CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam = judgeExecuteParam(baseParam);
// 测点索引
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
2023-11-07 11:28:30 +08:00
2023-11-10 10:37:34 +08:00
if (CollectionUtils.isEmpty(calculatedParam.getIdList())) {
Dept data = deptFeignClient.getRootDept().getData();
deptGetLineParam.setDeptId(data.getId());
calculatedParam.setIdList(commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData());
}
LiteflowResponse liteflowResponse;
if (baseParam.isRepair()) {
//补招时,起始日期、截止日期必填
DateTime startDate = DateUtil.parse(baseParam.getBeginTime(), DatePattern.NORM_DATE_FORMAT);
DateTime endDate = DateUtil.parse(baseParam.getEndTime(), DatePattern.NORM_DATE_FORMAT);
long betweenDay = DateUtil.betweenDay(startDate, endDate, true);
//递增日期执行算法链
for (int i = 0; i < betweenDay; i++) {
if (i != 0) {
startDate = DateUtil.offsetDay(startDate, 1);
}
calculatedParam.setDataDate(DateUtil.format(startDate, DatePattern.NORM_DATE_PATTERN));
2023-11-10 16:06:21 +08:00
liteflowResponse = flowExecutor.execute2Resp("org_point", calculatedParam);
2023-11-10 10:37:34 +08:00
dealResponse(calculatedParam, liteflowResponse, methodDescribe);
}
} else {
//非补招
2023-11-10 16:06:21 +08:00
liteflowResponse = flowExecutor.execute2Resp("org_point", calculatedParam);
2023-11-10 10:37:34 +08:00
dealResponse(calculatedParam, liteflowResponse, methodDescribe);
}
}
2023-11-07 11:28:30 +08:00
}