算法提交
This commit is contained in:
@@ -15,10 +15,14 @@ import com.njcn.common.pojo.exception.BusinessException;
|
|||||||
import com.njcn.common.pojo.response.HttpResult;
|
import com.njcn.common.pojo.response.HttpResult;
|
||||||
import com.njcn.common.utils.HttpResultUtil;
|
import com.njcn.common.utils.HttpResultUtil;
|
||||||
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
|
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
|
||||||
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
|
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
|
||||||
import com.njcn.prepare.bo.BaseParam;
|
import com.njcn.prepare.bo.BaseParam;
|
||||||
import com.njcn.prepare.bo.CalculatedParam;
|
import com.njcn.prepare.bo.CalculatedParam;
|
||||||
import com.njcn.prepare.harmonic.enums.PrepareResponseEnum;
|
import com.njcn.prepare.harmonic.enums.PrepareResponseEnum;
|
||||||
import com.njcn.prepare.harmonic.pojo.param.LineParam;
|
import com.njcn.prepare.harmonic.pojo.param.LineParam;
|
||||||
|
import com.njcn.user.api.DeptFeignClient;
|
||||||
|
import com.njcn.user.pojo.po.Dept;
|
||||||
import com.njcn.web.controller.BaseController;
|
import com.njcn.web.controller.BaseController;
|
||||||
import com.yomahub.liteflow.annotation.LiteflowComponent;
|
import com.yomahub.liteflow.annotation.LiteflowComponent;
|
||||||
import com.yomahub.liteflow.core.FlowExecutor;
|
import com.yomahub.liteflow.core.FlowExecutor;
|
||||||
@@ -58,6 +62,7 @@ import java.util.stream.Collectors;
|
|||||||
public class ExecutionCenter extends BaseController {
|
public class ExecutionCenter extends BaseController {
|
||||||
|
|
||||||
private final CommTerminalGeneralClient commTerminalGeneralClient;
|
private final CommTerminalGeneralClient commTerminalGeneralClient;
|
||||||
|
private final DeptFeignClient deptFeignClient;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private FlowExecutor flowExecutor;
|
private FlowExecutor flowExecutor;
|
||||||
@@ -145,9 +150,45 @@ public class ExecutionCenter extends BaseController {
|
|||||||
liteflowResponse = flowExecutor.execute2Resp("measurement_point", calculatedParam);
|
liteflowResponse = flowExecutor.execute2Resp("measurement_point", calculatedParam);
|
||||||
dealResponse(calculatedParam,liteflowResponse,methodDescribe);
|
dealResponse(calculatedParam,liteflowResponse,methodDescribe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||||
|
@ApiOperation("单位监测点算法执行链")
|
||||||
|
@PostMapping("/OrgPointExecutor")
|
||||||
|
public void OrgPointExecutor(@RequestBody BaseParam baseParam) {
|
||||||
|
String methodDescribe = getMethodDescribe("OrgPointExecutor");
|
||||||
|
//手动判断参数是否合法,
|
||||||
|
CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam = judgeExecuteParam(baseParam);
|
||||||
|
// 测点索引
|
||||||
|
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
|
||||||
|
|
||||||
|
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));
|
||||||
|
liteflowResponse = flowExecutor.execute2Resp("measurement_point", calculatedParam);
|
||||||
|
dealResponse(calculatedParam, liteflowResponse, methodDescribe);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//非补招
|
||||||
|
liteflowResponse = flowExecutor.execute2Resp("measurement_point", calculatedParam);
|
||||||
|
dealResponse(calculatedParam, liteflowResponse, methodDescribe);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import java.util.Set;
|
|||||||
* @date 2023年11月03日 09:21
|
* @date 2023年11月03日 09:21
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class CalculatedParam implements Serializable {
|
public class CalculatedParam<T> implements Serializable {
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* 是否全链路执行算法
|
* 是否全链路执行算法
|
||||||
@@ -42,8 +42,8 @@ public class CalculatedParam implements Serializable {
|
|||||||
private String dataDate;
|
private String dataDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 待计算的对象索引集合,监测点、设备、母线、变电站、单位等等
|
* 待计算的对象索引集合,监测点、设备、母线、变电站、单位下监测点等等
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(name = "idList",value = "索引集合")
|
@ApiModelProperty(name = "idList",value = "索引集合")
|
||||||
private List<String> idList;
|
private List<T> idList;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import com.njcn.prepare.harmonic.pojo.param.LineParam;
|
|||||||
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorMService;
|
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorMService;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
|
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.apache.commons.collections4.ListUtils;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -26,6 +27,7 @@ import java.time.LocalDateTime;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,12 +82,14 @@ public class ROperatingMonitorMServiceImpl extends MppServiceImpl<ROperatingMoni
|
|||||||
DateTime beginMonth = DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
|
DateTime beginMonth = DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
|
||||||
DateTime endMonth = DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
|
DateTime endMonth = DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
|
||||||
LocalDate localDate = LocalDateTimeUtil.parseDate( DateUtil.format(beginMonth, DatePattern.NORM_DATE_PATTERN), DatePattern.NORM_DATE_PATTERN);
|
LocalDate localDate = LocalDateTimeUtil.parseDate( DateUtil.format(beginMonth, DatePattern.NORM_DATE_PATTERN), DatePattern.NORM_DATE_PATTERN);
|
||||||
|
List<String> lineIds = calculatedParam.getIdList();
|
||||||
|
//以尺寸1000分片
|
||||||
|
List<List<String>> pendingIds = ListUtils.partition(lineIds, 1000);
|
||||||
List<ROperatingMonitorMPO> rOperatingMonitorMPOList = new ArrayList<>();
|
List<ROperatingMonitorMPO> rOperatingMonitorMPOList = new ArrayList<>();
|
||||||
QueryWrapper<ROperatingMonitorDPO> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<ROperatingMonitorDPO> queryWrapper = new QueryWrapper<>();
|
||||||
calculatedParam.getIdList().forEach(temp -> {
|
pendingIds.forEach(temp -> {
|
||||||
queryWrapper.clear();
|
queryWrapper.clear();
|
||||||
queryWrapper.eq("measurement_point_id", temp)
|
queryWrapper.in("measurement_point_id", temp)
|
||||||
.between("data_date",beginMonth,endMonth);
|
.between("data_date",beginMonth,endMonth);
|
||||||
|
|
||||||
List<ROperatingMonitorDPO> list = rOperatingMonitorDMapper.selectList(queryWrapper);
|
List<ROperatingMonitorDPO> list = rOperatingMonitorDMapper.selectList(queryWrapper);
|
||||||
@@ -93,19 +97,23 @@ public class ROperatingMonitorMServiceImpl extends MppServiceImpl<ROperatingMoni
|
|||||||
if (CollectionUtils.isEmpty(list)) {
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ROperatingMonitorMPO rOperatingMonitorMPO = new ROperatingMonitorMPO();
|
Map<String, List<ROperatingMonitorDPO>> collect1 = list.stream().collect(Collectors.groupingBy(ROperatingMonitorDPO::getMeasurementPointId));
|
||||||
BigDecimal dataIntegrityRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble());
|
collect1.forEach((k,v)->{
|
||||||
BigDecimal dataRightRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getDataRightRate().doubleValue()).average().getAsDouble());
|
ROperatingMonitorMPO rOperatingMonitorMPO = new ROperatingMonitorMPO();
|
||||||
BigDecimal indexIntegrityRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble());
|
BigDecimal dataIntegrityRate = BigDecimal.valueOf(v.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble());
|
||||||
rOperatingMonitorMPO.setMeasurementPointId(temp);
|
BigDecimal dataRightRate = BigDecimal.valueOf(v.stream().mapToDouble(po -> po.getDataRightRate().doubleValue()).average().getAsDouble());
|
||||||
rOperatingMonitorMPO.setDataDate(localDate);
|
BigDecimal indexIntegrityRate = BigDecimal.valueOf(v.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble());
|
||||||
rOperatingMonitorMPO.setDataIntegrityRate(dataIntegrityRate);
|
rOperatingMonitorMPO.setMeasurementPointId(k);
|
||||||
rOperatingMonitorMPO.setDataRightRate(dataRightRate);
|
rOperatingMonitorMPO.setDataDate(localDate);
|
||||||
rOperatingMonitorMPO.setIndexIntegrityRate(indexIntegrityRate);
|
rOperatingMonitorMPO.setDataIntegrityRate(dataIntegrityRate);
|
||||||
rOperatingMonitorMPO.setDevId(list.get(0).getDevId());
|
rOperatingMonitorMPO.setDataRightRate(dataRightRate);
|
||||||
List<Integer> collect = list.stream().map(ROperatingMonitorDPO::getIsUnusual).collect(Collectors.toList());
|
rOperatingMonitorMPO.setIndexIntegrityRate(indexIntegrityRate);
|
||||||
rOperatingMonitorMPO.setIsUnusual(collect.contains(Integer.valueOf(0)) ? 0 : 1);
|
rOperatingMonitorMPO.setDevId(v.get(0).getDevId());
|
||||||
rOperatingMonitorMPOList.add(rOperatingMonitorMPO);
|
List<Integer> collect = v.stream().map(ROperatingMonitorDPO::getIsUnusual).collect(Collectors.toList());
|
||||||
|
rOperatingMonitorMPO.setIsUnusual(collect.contains(Integer.valueOf(0)) ? 0 : 1);
|
||||||
|
rOperatingMonitorMPOList.add(rOperatingMonitorMPO);
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
this.saveOrUpdateBatchByMultiId(rOperatingMonitorMPOList, 500);
|
this.saveOrUpdateBatchByMultiId(rOperatingMonitorMPOList, 500);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user