Commit 164556aa authored by shulidong's avatar shulidong

二叉树完善/获取部件kks bug修复

parent dac7701f
package cn.wise.sc.energy.power.plant.business.config;
import cn.wise.sc.energy.power.plant.common.core.bean.BaseResponse;
import org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController;
import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.WebRequest;
import javax.servlet.http.HttpServletResponse;
@ControllerAdvice
@RestController
public class GlobalDefaultExceptionHandler extends AbstractErrorController {
@ExceptionHandler(value = RuntimeException.class)
@ResponseBody
public BaseResponse defaultErrorHandler(HttpServletResponse response, RuntimeException e) {
return BaseResponse.errorMsg(e.getMessage());
}
public GlobalDefaultExceptionHandler(ErrorAttributes errorAttributes) {
super(errorAttributes);
}
private static final String ERROR_PATH = "/error";
@Override
public String getErrorPath() {
return ERROR_PATH;
}
private Throwable getError(WebRequest webRequest) {
return (Throwable) this.getAttribute(webRequest, "javax.servlet.error.exception");
}
private Object getAttribute(RequestAttributes requestAttributes, String name) {
return requestAttributes.getAttribute(name, 0);
}
}
\ No newline at end of file
......@@ -7,10 +7,11 @@ import cn.wise.sc.energy.power.plant.business.domain.redisTrans.BtreeInerAct;
import cn.wise.sc.energy.power.plant.business.domain.redisTrans.BtreeInerAction;
import cn.wise.sc.energy.power.plant.business.domain.redisTrans.BtreeProcess;
import cn.wise.sc.energy.power.plant.business.jna.C2TreeAnalysis;
import cn.wise.sc.energy.power.plant.business.opentsdb.OpentsdbOkHttpClient;
import cn.wise.sc.energy.power.plant.business.repository.AutoInspectionRepository;
import cn.wise.sc.energy.power.plant.business.repository.BtreeInfoConfigRepository;
import cn.wise.sc.energy.power.plant.business.utils.BeanUtilsExt;
import cn.wise.sc.energy.power.plant.business.utils.Utils;
import cn.wise.sc.energy.power.plant.business.utils.dfs.FastDFSUtils;
import cn.wise.sc.energy.power.plant.business.utils.poi.DocxService;
import cn.wise.sc.energy.power.plant.common.core.bean.BaseResponse;
import com.alibaba.fastjson.JSON;
......@@ -26,17 +27,17 @@ import org.springframework.web.bind.annotation.CrossOrigin;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @author neo.shu
......@@ -54,6 +55,9 @@ public class BtreeInspectionController {
@Autowired
BtreeInfoConfigRepository configRepository;
@Autowired
AutoInspectionRepository autoInspectionRepository;
@ApiOperation("获取二叉树列表")
@PostMapping("/configList")
public BaseResponse<List<BtreeInfoConfig>> interaction() {
......@@ -88,14 +92,16 @@ public class BtreeInspectionController {
public BaseResponse getProcess() {
long time = System.currentTimeMillis();
Map<String, Object> result = new HashMap<>();
RBucket<String> currentIndex = redissonClient.getBucket("btreetask:"+Utils.getTaskPrefix());
if (currentIndex.get() == null) {
RBucket<String> currentIndex = redissonClient.getBucket("btreetask:" + Utils.getTaskPrefix());
if (currentIndex==null ||currentIndex.get() == null) {
result.put("status", -3);
return BaseResponse.okData(result);
}
//查询当前任务的进度
List<BtreeProcess> btreeProcesses = conventClazz("process_" + currentIndex.get(), BtreeProcess.class);
// List<BtreeProcess> btreeProcesses = conventClazz("process_C0A001_18_1602565477070", BtreeProcess.class);
int num = -1;
int grade = 0;
if (btreeProcesses != null && btreeProcesses.size() > 0) {
for (int i = 0; i < btreeProcesses.size(); i++) {
......@@ -103,8 +109,12 @@ public class BtreeInspectionController {
num = -1;
} else if (btreeProcesses.get(i).getGrade() == -2.0) {
num = -2;
} else if (btreeProcesses.get(i).getGrade() > 0) {
} else if (btreeProcesses.get(i).getIsend() == 1) {
//获取进度分数
List<AutoInspection> autoInspectionList_P = autoInspectionRepository.findAllByIdAndTypedAndDeviceid(currentIndex.get(), "P", "C0A00101");
grade = autoInspectionList_P.stream().map(AutoInspection::getGrade).collect(Collectors.toList()).stream().min(Comparator.naturalOrder()).orElse(0);
num = 0;
}
//如果有交互,查询交互
if (btreeProcesses.get(i).getGrade() == -2.0) {
......@@ -113,10 +123,49 @@ public class BtreeInspectionController {
}
}
}
if (num == 0) {
result.put("reportId", currentIndex.get());
result.put("grade", grade);
}
result.put("status", num);
result.put("data", btreeProcesses);
long endTime = System.currentTimeMillis();
System.out.println(endTime-time);
return BaseResponse.okData(result);
}
@PostMapping("/checkProcessTest")
public BaseResponse getProcesstest() {
Map<String, Object> result = new HashMap<>();
//查询当前任务的进度
String key = "C0A001_18_1602565477070";
List<BtreeProcess> btreeProcesses = conventClazz("process_"+key, BtreeProcess.class);
int num = -1;
int grade = 0;
if (btreeProcesses != null && btreeProcesses.size() > 0) {
for (int i = 0; i < btreeProcesses.size(); i++) {
if (btreeProcesses.get(i).getGrade() == -1.0) {
num = -1;
} else if (btreeProcesses.get(i).getGrade() == -2.0) {
num = -2;
} else if (btreeProcesses.get(i).getIsend() == 1) {
//获取进度分数
List<AutoInspection> autoInspectionList_P = autoInspectionRepository.findAllByIdAndTypedAndDeviceid(key, "P", "C0A00101");
grade = autoInspectionList_P.stream().map(AutoInspection::getGrade).collect(Collectors.toList()).stream().min(Comparator.naturalOrder()).orElse(0);
num = 0;
}
//如果有交互,查询交互
if (btreeProcesses.get(i).getGrade() == -2.0) {
List<BtreeInerAction> interAction = conventClazz("inter_" + key, BtreeInerAction.class);//currentIndex.get()
btreeProcesses.get(i).setBtreeInerAction(CollectionUtil.getLast(interAction));
}
}
}
if (num == 0) {
result.put("reportId", key);
result.put("grade", grade);
}
result.put("status", num);
result.put("data", btreeProcesses);
return BaseResponse.okData(result);
}
......@@ -132,7 +181,7 @@ public class BtreeInspectionController {
@PostMapping("/interaction")
public BaseResponse interaction(@RequestBody BtreeInerAct btreeInerAct) {
//存储redis
RBucket<String> currentIndex = redissonClient.getBucket("btreetask:"+Utils.getTaskPrefix());
RBucket<String> currentIndex = redissonClient.getBucket("btreetask:" + Utils.getTaskPrefix());
Map<String, Object> result = new HashMap<>();
if (currentIndex.get() == null) {
result.put("status", -3);
......@@ -152,15 +201,18 @@ public class BtreeInspectionController {
@PostMapping("/createBtree")
public BaseResponse<String> del() {
//todo 获取全场机组的最后时间点
//获取全场机组的最后时间点 选取两个点为基准点 C0A00101MKA01CE010 C0A00102MKA01CE010
Long lastTime1 = OpentsdbOkHttpClient.queryLastBykks(CollectionUtil.newArrayList("C0A00101MKA01CE010"));
Long lastTime2 = OpentsdbOkHttpClient.queryLastBykks(CollectionUtil.newArrayList("C0A00102MKA01CE010"));
//根据规则创建二叉树巡检任务,并存入redis
String taskId =Utils.getTaskPrefix()+"-"+ System.currentTimeMillis();
String taskId = Utils.getTaskPrefix() + "_" + System.currentTimeMillis();
//每次新建任务都保存一下
redissonClient.getBucket("btreetask:"+Utils.getTaskPrefix()).set(taskId, 10L, TimeUnit.MINUTES);
redissonClient.getBucket("btreetask:" + Utils.getTaskPrefix()).set(taskId);
//jna发起任务。
String taskjson = "{\"taskId\":\"" + taskId + "\",\"taskTyped\":0,\"Data\":[1599717386000,1599717386000]}";
String taskjson = "{\"taskId\":\"" + taskId + "\",\"taskTyped\":0,\"Data\":[" + lastTime1 + "," + lastTime2 + "]}";
log.error(taskjson);
try {
new Thread(()->{
new Thread(() -> {
C2TreeAnalysis.INSTANCE.C2TreeDiagnose(taskjson);
}).start();
} catch (RuntimeException e) {
......@@ -177,18 +229,20 @@ public class BtreeInspectionController {
@Autowired
DocxService docxService;
@PostMapping("/reportDownload")
public BaseResponse fileDownload(@RequestBody AutoInspection info) {
OutputStream out = null;
try {
byte[] by = docxService.fillDocx(info.getId());
response.setHeader("Content-Disposition", "attachment;filename=" + "demo1" + ".docx");
response.setContentType("application/force-download");
out = response.getOutputStream();
byte[] by = docxService.fillDocx(info.getId());
out.write(by);
out.close();
//下载完报告将二叉树任务删除。
RBucket<String> currentIndex = redissonClient.getBucket("btreetask:" + Utils.getTaskPrefix());
currentIndex.delete();
return BaseResponse.okMsg("成功");
} catch (Exception e) {
log.error(e.toString());
......
......@@ -10,6 +10,7 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.time.LocalDateTime;
/**
......@@ -114,6 +115,7 @@ public class EventInfo extends AbstractEntity<Long> {
/**
* 联表查询测点名称
*/
@Transient
private String cpname;
}
......@@ -45,5 +45,9 @@ public class BtreeProcess implements Serializable {
private String diagnosis;
private int isend;
private int index;
private int total;
private BtreeInerAction btreeInerAction;
}
......@@ -13,7 +13,7 @@ import java.util.concurrent.ScheduledFuture;
public interface C2TreeAnalysis extends Library {
//
String dllPath = "C2TreeAnalysis";
C2TreeAnalysis INSTANCE = Native.loadLibrary(dllPath, C2TreeAnalysis.class);
C2TreeAnalysis INSTANCE = Native.load(dllPath, C2TreeAnalysis.class);
/*
* "{\"taskId\":任务id,\"taskTyped\":0(固定值),\"Data\":[1599717386000,1599717386000]每个机组的最后的时间戳}"
......
......@@ -246,9 +246,8 @@ public class OpentsdbOkHttpClient {
} catch (URISyntaxException e) {
e.printStackTrace();
}*/
HbaseTemplate hbaseTemplate = (HbaseTemplate) MyApplicationContextAware.getApplicationContext().getBean("hbaseTemplate");
try {
HbaseTemplate hbaseTemplate = (HbaseTemplate) MyApplicationContextAware.getApplicationContext().getBean("hbaseTemplate");
PointDataFromHbase pointDataFromHbase = hbaseTemplate.get("thermalpower-plant-point-data", characterParamInfoVos.get(0).getKksCode(), new PointRowKeyMapper());
return pointDataFromHbase.getTimeStamp();
} catch (Exception e) {
......@@ -286,9 +285,8 @@ public class OpentsdbOkHttpClient {
e.printStackTrace();
}
return 0L;*/
HbaseTemplate hbaseTemplate = (HbaseTemplate) MyApplicationContextAware.getApplicationContext().getBean("hbaseTemplate");
try {
HbaseTemplate hbaseTemplate = (HbaseTemplate) MyApplicationContextAware.getApplicationContext().getBean("hbaseTemplate");
PointDataFromHbase pointDataFromHbase = hbaseTemplate.get("thermalpower-plant-point-data", kkscodes.get(0), new PointRowKeyMapper());
return pointDataFromHbase.getTimeStamp();
} catch (Exception e) {
......
......@@ -18,6 +18,7 @@ public interface AutoInspectionRepository extends
JpaRepository<AutoInspection, Integer>,
JpaSpecificationExecutor<AutoInspection> {
List<AutoInspection> findAutoInspectionsById(String id);
List<AutoInspection> findAllById(String id);
List<AutoInspection> findAllByIdAndTypedAndDeviceid(String id,String typed,String deviceid);
}
......@@ -20,4 +20,6 @@ public interface DeviceInfoRepository extends
@Query("select new cn.wise.sc.energy.power.plant.business.domain.vo.DeviceInfoVo(d.deviceName,p.plantName) from DeviceInfo d left join PlantInfo p on d.plantId = p.plantId where d.deviceId = ?1")
DeviceInfoVo queryOnedeviceInfo(String deviceno);
DeviceInfo findFirstByDeviceId(String deviceId);
}
......@@ -15,4 +15,6 @@ public interface PlantInfoRepository extends
JpaRepository<PlantInfo,String> ,
JpaSpecificationExecutor<PlantInfo> {
PlantInfo findFirstByPlantId(String plantId);
}
package cn.wise.sc.energy.power.plant.business.security;
import cn.wise.sc.energy.power.plant.common.core.bean.BaseResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HttpStatusLoginFailureHandler implements AuthenticationFailureHandler {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException {
response.setStatus(HttpStatus.UNAUTHORIZED.value());
response.setContentType("text/html;charset=utf-8");
BaseResponse wrapper = null;
if(exception.getMessage().equals("Bad credentials")){
wrapper = BaseResponse.errorMsg("密码错误");
}else{
wrapper =BaseResponse.errorMsg(exception.getMessage());
}
response.getWriter().write(objectMapper.writeValueAsString(wrapper));
}
}
\ No newline at end of file
......@@ -19,6 +19,7 @@ import org.springframework.security.core.userdetails.User;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
......@@ -59,6 +60,18 @@ public class JWTAuthenticationFilter extends
}
}
@Override
protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException {
String rts = JSON.toJSONString(BaseResponse.errorMsg("用户名或密码错误,请确认后登陆"));
try {
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("utf-8");
response.getWriter().write(rts);
}catch (IOException e) {
e.printStackTrace();
}
}
RedissonClient redissonClient = (RedissonClient) MyApplicationContextAware.getApplicationContext().getBean("redissonSingle");
@Override
protected void successfulAuthentication(final HttpServletRequest request,
......
......@@ -38,12 +38,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
return new SessionRegistryImpl();
}
@Bean
/*@Bean
public ConcurrentSessionFilter concurrencyFilter() {
// 定义session失效后,重定向的url
ConcurrentSessionFilter concurrentSessionFilter = new ConcurrentSessionFilter(sessionRegistry(), "/login");
return concurrentSessionFilter;
}
}*/
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
......@@ -57,7 +57,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
protected void configure(final HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/login","/**/allPlantInfo").permitAll()
.antMatchers("/login", "/**/allPlantInfo").permitAll()
.antMatchers("/admin").hasRole("ADMIN")
.antMatchers(
"/swagger-ui.html",
......@@ -79,10 +79,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterAt(concurrencyFilter(), ConcurrentSessionFilter.class);
//http.addFilterAt(concurrencyFilter(), ConcurrentSessionFilter.class);
//session管理
//session失效后跳转
http.sessionManagement().invalidSessionUrl("/login");
//http.sessionManagement().invalidSessionUrl("/login");
//只允许一个用户登录,如果同一个账户两次登录,那么第一个账户将被踢下线,跳转到登录页面
http.sessionManagement().maximumSessions(1).sessionRegistry(sessionRegistry).expiredUrl("/login");
}
......
......@@ -16,6 +16,7 @@ import org.springframework.util.StringUtils;
import javax.persistence.criteria.Predicate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
......@@ -63,11 +64,11 @@ public class CaseAnalysisInfoServiceImpl implements ICaseAnalysisInfoService {
Predicate timePredicate = cb.conjunction();
timePredicate.in();
if (page.getStartTime() != null && !page.getStartTime().trim().equals("")) {
list.add(cb.greaterThanOrEqualTo(root.get("createTime").as(LocalDateTime.class), LocalDateTime.parse(page.getStartTime())));
list.add(cb.greaterThanOrEqualTo(root.get("createTime").as(LocalDateTime.class),LocalDateTime.ofEpochSecond(Long.parseLong(page.getStartTime())/1000,0, ZoneOffset.ofHours(8))));
}
//结束日期
if (page.getEndTime() != null && !page.getEndTime().trim().equals("")) {
list.add(cb.lessThanOrEqualTo(root.get("createTime").as(LocalDateTime.class), LocalDateTime.parse(page.getEndTime())));
list.add(cb.lessThanOrEqualTo(root.get("createTime").as(LocalDateTime.class),LocalDateTime.ofEpochSecond(Long.parseLong(page.getEndTime())/1000,0, ZoneOffset.ofHours(8))));
}
return cb.and(list.toArray(new Predicate[list.size()]));
......@@ -75,5 +76,4 @@ public class CaseAnalysisInfoServiceImpl implements ICaseAnalysisInfoService {
infoPage = caseRepository.findAll(specification, pages);
return BaseResponse.okData(infoPage);
}
}
package cn.wise.sc.energy.power.plant.business.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
......@@ -26,6 +27,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.google.common.collect.Lists;
import com.spring4all.spring.boot.starter.hbase.api.HbaseTemplate;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import net.opentsdb.client.api.query.response.QueryResponse;
import net.opentsdb.client.bean.Aggregator;
......@@ -141,9 +143,14 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
});
List<CharacterParamInfo> characterParamInfos = list.stream()
.filter(arg -> arg.getIsDeriveParam() == 0)
.limit(10)
//.limit(10)
.collect(Collectors.toList());
return BaseResponse.okData(buildResult(characterParamInfos, unitInfos, getOpenTSDB(characterParamInfos)));
if (!CollectionUtil.isEmpty(characterParamInfos)) {
return BaseResponse.okData(buildResults(characterParamInfos, unitInfos, getOpenTSDB(characterParamInfos)));
} else {
return BaseResponse.okData(null);
}
}
@Override
......@@ -267,7 +274,7 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
}
@Override
public QueryResponse getRealTimeDataByKksCode(Map<String,String> kksCodes, String start, String end, String downSample) {
public QueryResponse getRealTimeDataByKksCode(Map<String, String> kksCodes, String start, String end, String downSample) {
ResponseEnum.COLLECTION_NOT_ILLEGAL.assertCollectionNotILLEGAL(kksCodes.keySet());
//去数据库匹配测点
List<CharacterParamInfo> characterParamInfos = characterParamRepository.findAll((Specification<CharacterParamInfo>) (root, query, criteriaBuilder) -> {
......@@ -366,7 +373,7 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
//如果时间传0 查最后一条 往前推30min
if (timeModelQuery.getStart() == 0 || timeModelQuery.getEnd() == 0) {
long lastTime = OpentsdbOkHttpClient.queryLastBykks(keys);
timeModelQuery.setStart(lastTime-1*3600*1000);
timeModelQuery.setStart(lastTime - 1 * 3600 * 1000);
timeModelQuery.setEnd(lastTime);
// QueryLastRequest queryLastRequest = new QueryLastRequest();
......@@ -677,7 +684,7 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
double a = 23;
double b = Double.parseDouble(a + "" + "02");
String substring = "C0A00101MKA12CY614R".substring("C0A00101MKA12CY614R".length() - 1);
System.out.println( StrUtil.swapCase(substring + "C0A00101MKA12CY614R"));
System.out.println(StrUtil.swapCase(substring + "C0A00101MKA12CY614R"));
System.out.println("C0A00101MKA12CY614R".toLowerCase());
System.out.println(b);
......@@ -731,7 +738,6 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
}
/**
* 拼装报警点
*
......@@ -802,14 +808,19 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
}
private List<QueryResult> getOpenTSDB(final List<CharacterParamInfo> list) {
//查询最后一条数据
Long lastTime = OpentsdbOkHttpClient.queryLastBykks(CollectionUtil.newArrayList(list.get(0).getKksCode()));
System.out.println("查询到hbase时间戳==============="+lastTime);
//构建QueryRequestExt
QueryRequestExt queryRequestExt = QueryRequestExt.builder()
.start("1s-ago")
.start((lastTime-1)+"")
.end(lastTime+"")
.build();
for (CharacterParamInfo characterParamInfo : list) {
String kksCode = characterParamInfo.getKksCode();
queryRequestExt.addQuery(QueryExt.builder()
.aggregator(Aggregator.AVG)
.aggregator(Aggregator.NONE)
.metric(kksCode)
.build());
}
......@@ -844,6 +855,14 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
return response;
}
/**
* 组装3D部件图测点数据
*
* @param characters
* @param unitInfos
* @param queryResults
* @return
*/
public Map<String, Map<String, HashMap<Long, Number>>> buildResult(
final List<CharacterParamInfo> characters,
final List<UnitInfo> unitInfos,
......@@ -871,6 +890,32 @@ public class CharacterParamServiceImpl extends BaseServiceImpl<String, Character
return rts;
}
/**
* 组装3D部件图测点数据
*
* @param characters
* @param unitInfos
* @param queryResults
* @return
*/
public Map<String, Map<String, HashMap<Long, Number>>> buildResults(
final List<CharacterParamInfo> characters,
final List<UnitInfo> unitInfos,
final List<QueryResult> queryResults) {
Map<String, Map<String, HashMap<Long, Number>>> rts = new HashMap<>(unitInfos.size());
//根据部件分组
Map<String, List<CharacterParamInfo>> keyList = characters.stream().collect(Collectors.groupingBy(c -> c.getUnitCodeId()));
keyList.forEach((k, value) -> {
//获取部件
UnitInfo unitInfo = unitInfos.stream().filter(u -> u.getUnitCodeId().equals(k)).findFirst().get();
//获取测点map
Map<String, HashMap<Long, Number>> vMap = value.stream().collect(Collectors.toMap(CharacterParamInfo::getCpName, v -> queryResults.stream().filter(item -> item.getMetric().equals(v.getKksCode())).findFirst().get().getDps()));
rts.put(unitInfo.getUnitName() + "|" + unitInfo.getFunction(), vMap);
});
return rts;
}
private List<EntityVo> buildCharacterVo(List<CharacterParamInfo> characterParamInfos) {
//获取父级特征值
......
package cn.wise.sc.energy.power.plant.business.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.wise.sc.energy.power.plant.business.domain.CaseAnalysisInfo;
import cn.wise.sc.energy.power.plant.business.domain.DeviceInfo;
import cn.wise.sc.energy.power.plant.business.domain.EventInfo;
......@@ -56,35 +57,38 @@ public class EventInfoServiceImpl extends BaseServiceImpl<Long, EventInfo> imple
List<Object[]> objects = eventInfoRepository.countAlert();
List<AlertCount> rts = new ArrayList<>();
Map<String,AlertCount> tendencyAlertMap =new HashMap<>();
for (Object[] objs : objects) {
//countAlert()查询2个字段 count()、alertState
if (!CollectionUtil.isEmpty(objects)) {
for (Object[] objs : objects) {
//countAlert()查询2个字段 count()、alertState
/* if (objs.length != 2) {
continue;
}*/
Long count = (long) objs[0];
Integer state = (int) objs[1];
String deviceId = (String) objs[2];
Optional<DeviceInfo> byId = deviceInfoRepository.findById(deviceId);
if (!byId.isPresent()) {
continue;
}
String deviceName = byId.get().getDeviceName();
AlertCount alertCount;
if (state == 2) {
alertCount = new AlertCount("preAlert", deviceName, count);
} else if (state == 3) {
alertCount = new AlertCount("tallAlert", deviceName, count);
} else if(state==4){
alertCount = new AlertCount("tooTallAlert", deviceName, count);
}else{
//趋势报警 5,6加和
alertCount = tendencyAlertMap.getOrDefault(deviceName, new AlertCount("tendencyAlert"));
alertCount.setCount(alertCount.getCount() + count);
alertCount.setDeviceName(deviceName);
tendencyAlertMap.put(deviceName, alertCount);
Long count = (long) objs[0];
Integer state = (int) objs[1];
String deviceId = (String) objs[2];
Optional<DeviceInfo> byId = deviceInfoRepository.findById(deviceId);
if (!byId.isPresent()) {
continue;
}
String deviceName = byId.get().getDeviceName();
AlertCount alertCount;
if (state == 2) {
alertCount = new AlertCount("preAlert", deviceName, count);
} else if (state == 3) {
alertCount = new AlertCount("tallAlert", deviceName, count);
} else if(state==4){
alertCount = new AlertCount("tooTallAlert", deviceName, count);
}else{
//趋势报警 5,6加和
alertCount = tendencyAlertMap.getOrDefault(deviceName, new AlertCount("tendencyAlert"));
alertCount.setCount(alertCount.getCount() + count);
alertCount.setDeviceName(deviceName);
tendencyAlertMap.put(deviceName, alertCount);
}
rts.add(alertCount);
}
rts.add(alertCount);
}
return rts;
}
......
......@@ -61,7 +61,7 @@ public class IndexRealTimeTask extends ScheduleTask {
"定子C相电流",
"定子CA线电压",
"定子负序电流",
//右中
//右中
"汽端座振X",
"汽端轴振X",
"励端座振X",
......@@ -82,28 +82,29 @@ public class IndexRealTimeTask extends ScheduleTask {
List<CharacterParamInfoVo> characterParamInfoList = taskCacheDataService.cacheIndexCPI();
for (String deviceId : groupMap.keySet()) {
//获取kkscode
List<CharacterParamInfoVo> characterParamInfoVos ;
//全场
Map<String, List<CharacterParamInfo>> groupByDeviceId = new HashMap<>();
List<CharacterParamInfoVo> characterParamInfoVos;
if ("total".equals(deviceId)) {
characterParamInfoVos = characterParamInfoList;
}else{
} else {
characterParamInfoVos = characterParamInfoList.stream().filter(item -> item.getDeviceId().equals(deviceId)).collect(Collectors.toList());
}
Map<String, String> KKsCodes = characterParamInfoVos.stream().filter(item ->
IS_CONTAINS(item.getCpName(), points))
.collect(Collectors.toMap(CharacterParamInfoVo::getKksCode, CharacterParamInfoVo::getCpName));
//获取最后一个数据点的最近一个时间
Long lastTime = OpentsdbOkHttpClient.queryLast(characterParamInfoVos);
QueryResponse response = iCharacterParamService
.getRealTimeDataByKksCode(new ArrayList<>(KKsCodes.keySet()), (lastTime - 1) + "", lastTime + "", "");
//获取横坐标
List<Object> xAxis = response.getResults().get(0).getDps().keySet().stream().map(item -> item.toString()).collect(Collectors.toList());
List<QueryResult> queryResults = new ArrayList<>();
List<Object> xAxis = new ArrayList<>();
Map<String, List<CharacterParamInfoVo>> groupByDeviceId = characterParamInfoVos.stream().collect(Collectors.groupingBy(item -> item.getDeviceId()));
//根据不同机组获取结果。如果是全场就依次获取
for (String key : groupByDeviceId.keySet()) {
Long lastTime = OpentsdbOkHttpClient.queryLast(groupByDeviceId.get(key));
QueryResponse response = iCharacterParamService
.getRealTimeDataByKksCode(groupByDeviceId.get(key).stream().map(item->item.getKksCode()).collect(Collectors.toList()), (lastTime - 1) + "", lastTime + "", "");
queryResults.addAll(response.getResults());
xAxis = response.getResults().get(0).getDps().keySet().stream().map(item -> item.toString()).collect(Collectors.toList());
}
//组装数据
Map<String, DataPower> map = new HashMap<>();
for (QueryResult queryResult : response.getResults()) {
for (QueryResult queryResult : queryResults) {
DataPower.PowerPoints powerPoints = new DataPower.PowerPoints();
powerPoints.setKksCode(queryResult.getMetric());
powerPoints.setName(KKsCodes.get(queryResult.getMetric()));
......@@ -119,7 +120,7 @@ public class IndexRealTimeTask extends ScheduleTask {
})) {
//右上图
//添加量程
powerPoints.setMeasuer(characterParamInfoVos.stream().filter(item->item.getKksCode().equals(queryResult.getMetric())).findFirst().get().getMeasuringrangerulemaxvalue());
powerPoints.setMeasuer(characterParamInfoVos.stream().filter(item -> item.getKksCode().equals(queryResult.getMetric())).findFirst().get().getMeasuringrangerulemaxvalue());
DataPower dataPower = map.getOrDefault("rightTop", new DataPower());
dataPower.setXAxis(xAxis);
dataPower.getDataList().add(powerPoints);
......@@ -146,7 +147,7 @@ public class IndexRealTimeTask extends ScheduleTask {
dataPower.getDataList().add(powerPoints);
map.putIfAbsent("rightBottom", dataPower);
}
if (!"total".equals(deviceId)){
if (!"total".equals(deviceId)) {
if (IS_CONTAINS(KKsCodes.get(queryResult.getMetric()), new String[]{
//左下极坐标
"层间温度",
......@@ -202,7 +203,7 @@ public class IndexRealTimeTask extends ScheduleTask {
}
}
if("total".equals(deviceId)){
if ("total".equals(deviceId)) {
//添加报警点
DataPower dataPower4 = new DataPower();
List<EventInfoServiceImpl.AlertCount> alertCounts = iEventInfoService.countAlert();
......@@ -212,38 +213,40 @@ public class IndexRealTimeTask extends ScheduleTask {
powerPoints1.setName("高报警");
DataPower.PowerPoints powerPoints2 = new DataPower.PowerPoints();
powerPoints2.setName("高高报警");
DataPower.PowerPoints powerPoints3= new DataPower.PowerPoints();
DataPower.PowerPoints powerPoints3 = new DataPower.PowerPoints();
powerPoints3.setName("趋势报警");
dataPower4.getDataList().add(powerPoints);
dataPower4.getDataList().add(powerPoints1);
dataPower4.getDataList().add(powerPoints2);
dataPower4.getDataList().add(powerPoints3);
//获取设备长度
Set<String> deviceNames = new TreeSet<>();
alertCounts.forEach(arg -> deviceNames.add(arg.getDeviceName()));
int idx = 0;
if (!CollectionUtil.isEmpty(alertCounts)) {
//获取设备长度
Set<String> deviceNames = new TreeSet<>();
alertCounts.forEach(arg -> deviceNames.add(arg.getDeviceName()));
int idx = 0;
for (String deviceName : deviceNames) {
dataPower4.getXAxis().add(deviceName);
int finalIdx = idx;
alertCounts.forEach(arg -> {
//处理名字报警
if ("preAlert".equals(arg.getAlertLevel())) {
//预报警
dataPower4.getDataList().get(0).getValue().add( arg.getCount() + "");
} else if ("tallAlert".equals(arg.getAlertLevel())) {
//高报
dataPower4.getDataList().get(1).getValue().add( arg.getCount() + "");
} else if ("tooTallAlert".equals(arg.getAlertLevel())){
//高高报
dataPower4.getDataList().get(2).getValue().add( arg.getCount() + "");
}else{
dataPower4.getDataList().get(3).getValue().add( arg.getCount() + "");
}
});
idx++;
for (String deviceName : deviceNames) {
dataPower4.getXAxis().add(deviceName);
int finalIdx = idx;
alertCounts.forEach(arg -> {
//处理名字报警
if ("preAlert".equals(arg.getAlertLevel())) {
//预报警
dataPower4.getDataList().get(0).getValue().add(arg.getCount() + "");
} else if ("tallAlert".equals(arg.getAlertLevel())) {
//高报
dataPower4.getDataList().get(1).getValue().add(arg.getCount() + "");
} else if ("tooTallAlert".equals(arg.getAlertLevel())) {
//高高报
dataPower4.getDataList().get(2).getValue().add(arg.getCount() + "");
} else {
dataPower4.getDataList().get(3).getValue().add(arg.getCount() + "");
}
});
idx++;
}
map.put("alert", dataPower4);
}
map.put("alert", dataPower4);
}
try {
List<Map.Entry<String, String>> deviceGroupMap = groupMap.get(deviceId);
......
package cn.wise.sc.energy.power.plant.business.task.async;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
......
......@@ -68,7 +68,7 @@ public class Utils {
UserInfo userDetails = (UserInfo) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (userDetails != null) {
UserInfo userInfo = Utils.getUser();
String prefix = userInfo.getPlantid() + "-" + userInfo.getId();
String prefix = userInfo.getPlantid() + "_" + userInfo.getId();
return prefix;
}
return null;
......
......@@ -6,8 +6,10 @@ import cn.wise.sc.energy.power.plant.business.domain.AutoInspection;
import cn.wise.sc.energy.power.plant.business.domain.vo.DeviceInfoVo;
import cn.wise.sc.energy.power.plant.business.repository.AutoInspectionRepository;
import cn.wise.sc.energy.power.plant.business.repository.DeviceInfoRepository;
import cn.wise.sc.energy.power.plant.business.repository.PlantInfoRepository;
import cn.wise.sc.energy.power.plant.common.core.exception.ResponseEnum;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFHeader;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
......@@ -21,15 +23,19 @@ import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author shulidong
* @since 2020/9/21 14:04
*/
@Service
@Slf4j
public class DocxService {
......@@ -40,35 +46,45 @@ public class DocxService {
@Autowired
DeviceInfoRepository deviceInfoRepository;
@Autowired
PlantInfoRepository plantInfoRepository;
private static final Logger LOGGER = LoggerFactory.getLogger(DocxService.class);
public static void main(String[] args) {
//"C0A001 - 1 - 1600756452620";
String a = "C0A001 - 1 - 1600756452620";
String[] c = a.split("- ");
System.out.println();
String[] c = a.trim().split("- ");
LocalDateTime localDateTime = LocalDateTime.parse("2020-10-05T14:02:51");
long time = localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println(time);
}
public byte[] fillDocx(String id) throws Exception {
List<AutoInspection> list = autoInspectionRepository.findAutoInspectionsById(id);
List<AutoInspection> list = autoInspectionRepository.findAllById(id);
if (CollectionUtil.isEmpty(list)) {
ResponseEnum.BUSINESS_ERROR.newException("未找到相应的报告项");
}
JSONObject allin = new JSONObject();
reportParamProcessor.paramJson(allin,list,id.split("- ")[2]);
log.error("-------------" + id);
reportParamProcessor.paramJson(allin, list, list.get(0).getBtreetime().toInstant(ZoneOffset.of("+8")).toEpochMilli() + "");
final InputStream inputStream = new ClassPathResource("templates/" + "demo1.docx").getStream();
XWPFDocument document = new XWPFDocument(inputStream);
//添加页眉 需要固定的文字(中文标点)在模板上->{{:text:date:date:}}
List<XWPFHeader> pageHeaders = document.getHeaderList();
JSONObject original = new JSONObject();
JSONObject date = new JSONObject();
date.put("date",LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
date.put("date", LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
original.put("date", date);
for (int i = 0; i < pageHeaders.size(); i++) {
XWPFHeader pageHeader = pageHeaders.get(i);
List<XWPFParagraph> headerPara = pageHeader.getParagraphs();
XWPFParagraph headerParagraph = headerPara.get(0);
if (headerParagraph.getRuns().size() > 1) {
PoiiUtiil.parseThisParagraph(headerParagraph,original);
PoiiUtiil.parseThisParagraph(headerParagraph, original);
}
}
//获取所有的段落
......@@ -76,6 +92,7 @@ public class DocxService {
//把文档groupby
List<XWPFParagraph> texts = new ArrayList<>();
List<XWPFTable> tables = new ArrayList<>();
List<XWPFTable> iterable_tables = new ArrayList<>();
for (XWPFParagraph paragraph : paragraphs) {
String text = paragraph.getText();
//只有这三种标签能够混用
......@@ -90,26 +107,46 @@ public class DocxService {
if (table.getText().contains("{{:table") || table.getText().contains("{{:text")) {
tables.add(table);
}
if (table.getText().contains("{{$fe:")) {
iterable_tables.add(table);
}
}
JSONObject reportInfo = new JSONObject();
//DeviceInfo deviceInfo = deviceInfoRepository.findFirstByDeviceId(list.get(0).getDeviceid());
DeviceInfoVo deviceInfo = deviceInfoRepository.queryOnedeviceInfo(list.get(0).getDeviceid());
//PlantInfo plantInfo = plantInfoRepository.findFirstByPlantId(deviceInfo.getPlantId());
reportInfo.put("plantName", deviceInfo.getPlangName());
reportInfo.put("deviceName", deviceInfo.getDeviceName());
reportInfo.put("score", "暂未获取");
reportInfo.put("score", allin.get("grade"));
allin.put("reportInfo", reportInfo);
log.error("------------数据组装完毕");
try {
PoiiUtiil.paragraph(texts, allin);
PoiiUtiil.table(tables, allin);
HashMap<String, Object> map = new HashMap<>(1);
List<Map<String, String>> plistMap = new ArrayList<>();
if (allin.get("plist") != null) {
plistMap = (List<Map<String, String>>) allin.get("plist");
} else {
//仿真数据
plistMap.add(new HashMap<String, String>() {{
put("unitname", "无");
put("result", "无");
put("diagnosis", "无");
}});
}
map.put("plist", plistMap);
PoiiUtiil.parseThisTable(iterable_tables,map );
//要求word在打开时提示更新域
//document.enforceUpdateFields();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
FileOutputStream fos = new FileOutputStream("D:/"+ "生成文件.docx");
//FileOutputStream fos = new FileOutputStream("D:/"+ "生成文件.docx");
document.write(byteArrayOutputStream);
fos.flush();
fos.close();
//fos.flush();
//fos.close();
return byteArrayOutputStream.toByteArray();
} catch (Exception e) {
e.printStackTrace();
......
......@@ -2,6 +2,8 @@ package cn.wise.sc.energy.power.plant.business.utils.poi;
import cn.afterturn.easypoi.entity.ImageEntity;
import cn.afterturn.easypoi.util.PoiPublicUtil;
import cn.afterturn.easypoi.word.entity.params.ExcelListEntity;
import cn.afterturn.easypoi.word.parse.excel.ExcelEntityParse;
import cn.afterturn.easypoi.word.parse.excel.ExcelMapParse;
import cn.wise.sc.energy.power.plant.business.constant.Constance;
import cn.wise.sc.energy.power.plant.common.core.exception.ResponseEnum;
......@@ -22,6 +24,7 @@ import org.springframework.util.StringUtils;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
......@@ -77,7 +80,7 @@ public class PoiiUtiil {
}
if (currentText.indexOf(END_STR) != -1) {
changeValues(paragraph, currentRun, currentText, runIndex, textSource);
currentText = "";
currentText = currentText.indexOf("{")!=-1?currentText.substring(currentText.indexOf("{")):"";
isfinde = false;
}
// 判断是不是开始,考虑单个‘{’的情况
......@@ -122,7 +125,7 @@ public class PoiiUtiil {
ExcelMapParse.addAnImage((ImageEntity) obj, currentRun);
} else {
currentText = obj.toString();
PoiPublicUtil.setWordText(currentRun, currentText);
PoiPublicUtil.setWordText(currentRun, "".equals(currentText)?"暂未获取":currentText);
}
}
......@@ -312,4 +315,116 @@ public class PoiiUtiil {
return "\\" + symbol;
}
public static void parseThisTable(List<XWPFTable> tables, Map<String, Object> map) throws Exception {
for (XWPFTable table : tables) {
for(int i = 0; i < table.getNumberOfRows(); ++i) {
XWPFTableRow row = table.getRow(i);
List<XWPFTableCell> cells = row.getTableCells();
Object listobj = checkThisTableIsNeedIterator((XWPFTableCell)cells.get(0), map);
if (listobj == null) {
parseThisRow(cells, map);
} else if (listobj instanceof ExcelListEntity) {
(new ExcelEntityParse()).parseNextRowAndAddRow(table, i, (ExcelListEntity)listobj);
i = i + ((ExcelListEntity)listobj).getList().size() - 1;
} else {
ExcelMapParse.parseNextRowAndAddRow(table, i, (List)listobj);
i = i + ((List)listobj).size() - 1;
}
}
}
}
private static void parseThisRow(List<XWPFTableCell> cells, Map<String, Object> map) throws Exception {
Iterator var3 = cells.iterator();
while(var3.hasNext()) {
XWPFTableCell cell = (XWPFTableCell)var3.next();
parseAllParagraphic(cell.getParagraphs(), map);
}
}
private static void parseAllParagraphic(List<XWPFParagraph> paragraphs, Map<String, Object> map) throws Exception {
for(int i = 0; i < paragraphs.size(); ++i) {
XWPFParagraph paragraph = (XWPFParagraph)paragraphs.get(i);
if (paragraph.getText().indexOf("{{") != -1) {
parseThisParagraph(paragraph, map);
}
}
}
public static void main(String[] args) {
String p = "fdfdf}}";
String current =p.indexOf("{")!=-1? p.substring(p.indexOf("{")):"";
System.out.println(current);
}
private static void parseThisParagraph(XWPFParagraph paragraph, Map<String, Object> map) throws Exception {
XWPFRun currentRun = null;
String currentText = "";
Boolean isfinde = false;
List<Integer> runIndex = new ArrayList();
for(int i = 0; i < paragraph.getRuns().size(); ++i) {
XWPFRun run = (XWPFRun)paragraph.getRuns().get(i);
String text = run.getText(0);
if (!org.apache.commons.lang3.StringUtils.isEmpty(text)) {
if (isfinde) {
currentText = currentText + text;
if (currentText.indexOf("{{") == -1) {
isfinde = false;
runIndex.clear();
} else {
runIndex.add(i);
}
if (currentText.indexOf("}}") != -1) {
changeValues(paragraph, currentRun, currentText, runIndex, map);
//考虑有 “:adfd}}{”的情况
currentText = currentText.indexOf("{")!=-1?currentText.substring(currentText.indexOf("{")):"";
isfinde = false;
}
} else if (text.indexOf("{{") >= 0 || text.indexOf("{")>=0) {
currentText = text;
isfinde = true;
currentRun = run;
} else {
currentText = "";
}
if (currentText.indexOf("}}") != -1) {
changeValues(paragraph, currentRun, currentText, runIndex, map);
isfinde = false;
}
}
}
}
private static void changeValues(XWPFParagraph paragraph, XWPFRun currentRun, String currentText, List<Integer> runIndex, Map<String, Object> map) throws Exception {
Object obj = PoiPublicUtil.getRealValue(currentText, map);
if (obj instanceof ImageEntity) {
currentRun.setText("", 0);
ExcelMapParse.addAnImage((ImageEntity)obj, currentRun);
} else {
currentText = obj.toString();
PoiPublicUtil.setWordText(currentRun, currentText);
}
for(int k = 0; k < runIndex.size(); ++k) {
((XWPFRun)paragraph.getRuns().get((Integer)runIndex.get(k))).setText("", 0);
}
runIndex.clear();
}
private static Object checkThisTableIsNeedIterator(XWPFTableCell cell, Map<String, Object> map) throws Exception {
String text = cell.getText().trim();
if (text != null && text.contains("fe:") && text.startsWith("{{")) {
text = text.replace("!fe:", "").replace("$fe:", "").replace("fe:", "").replace("{{", "");
String[] keys = text.replaceAll("\\s{1,}", " ").trim().split(" ");
return PoiPublicUtil.getParamsValue(keys[0], map);
} else {
return null;
}
}
}
......@@ -2,19 +2,20 @@ package cn.wise.sc.energy.power.plant.business.utils.poi;
import cn.hutool.core.collection.CollectionUtil;
import cn.wise.sc.energy.power.plant.business.domain.AutoInspection;
import cn.wise.sc.energy.power.plant.business.domain.DeviceInfo;
import cn.wise.sc.energy.power.plant.business.domain.vo.DeviceInfoVo;
import cn.wise.sc.energy.power.plant.business.service.ICharacterParamService;
import cn.wise.sc.energy.power.plant.business.task.async.ReportParamsTask;
import cn.wise.sc.energy.power.plant.business.task.async.TimeConsumingOperation;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonArray;
import lombok.extern.slf4j.Slf4j;
import net.opentsdb.client.api.query.response.QueryResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
......@@ -30,6 +31,7 @@ import static cn.wise.sc.energy.power.plant.business.task.async.TimeConsumingOpe
* @since 2020/10/7 08:22
*/
@Service
@Slf4j
public class ReportParamProcessor {
@Autowired
......@@ -104,6 +106,7 @@ public class ReportParamProcessor {
public JSONObject paramJson(JSONObject allin, List<AutoInspection> list, String endTime) {
String deviceCode = list.get(0).getDeviceid();
List<AutoInspection> newLiset = list.stream().filter(item -> item.getDeviceid().equals(deviceCode)).collect(Collectors.toList());
//辅助参数
REPORT_TASKS_MAP.put("fuzhu_subsidiary" + endTime + deviceCode, reportParamsTask.executeTimeConsumingOperation(new Subsidiaryparam(), "fuzhu", allin, subsidiaryParams, deviceCode, endTime));
//电气参数
......@@ -112,7 +115,7 @@ public class ReportParamProcessor {
REPORT_TASKS_MAP.put("huanjing_subsidiary" + endTime + deviceCode, reportParamsTask.executeTimeConsumingOperation(new Subsidiaryparam(), "huanjing", allin, environParams, deviceCode, endTime));
//总体状态
REPORT_TASKS_MAP.put("zhuangtai_subsidiary" + endTime + deviceCode, reportParamsTask.executeTimeConsumingOperation(new Subsidiaryparam(), "state", allin, stateParams, deviceCode, endTime));
REPORT_TASKS_MAP.put("resultanalysis_subsidiary" + endTime + deviceCode, reportParamsTask.executeTimeConsumingOperation(new ResultAnalysis(), allin, list));
REPORT_TASKS_MAP.put("resultanalysis_subsidiary" + endTime + deviceCode, reportParamsTask.executeTimeConsumingOperation(new ResultAnalysis(), allin, newLiset));
REPORT_TASKS_MAP.forEach((k, v) -> {
if (k.contains("_subsidiary" + endTime + deviceCode)) {
......@@ -136,6 +139,7 @@ public class ReportParamProcessor {
@Override
public void operate(Object... args) throws IOException {
log.error("-----结论开始");
JSONObject jsonObject = (JSONObject) args[0];
List<AutoInspection> list = (List<AutoInspection>) args[1];
JSONObject results = new JSONObject();
......@@ -175,12 +179,28 @@ public class ReportParamProcessor {
break;
}
jsonObject.put(name + "RunoutX", (JSONObject)diagnosis.get("RunoutX"));
jsonObject.put(name + "RunoutY", (JSONObject)diagnosis.get("RunoutY"));
jsonObject.put(name + "RunoutX", (JSONObject) diagnosis.get("RunoutX"));
jsonObject.put(name + "RunoutY", (JSONObject) diagnosis.get("RunoutY"));
}
}
if (k.equals("P")) {
ArrayList<HashMap<String, String>> plist = new ArrayList<>();
for (AutoInspection a : v) {
HashMap<String, String> temp = new HashMap<>(3);
temp.put("unitname", a.getUnitname());
temp.put("result", a.getResult().equals(0) ? "正常" : "异常");
temp.put("diagnosis", (String) JSONObject.parseObject(a.getDiagnosis()).get("diagnosis"));
plist.add(temp);
}
//获取最小值
int grade = v.stream().map(AutoInspection::getGrade).collect(Collectors.toList()).stream().min(Comparator.naturalOrder()).orElse(0);
jsonObject.put("plist", plist);
jsonObject.put("grade", grade);
}
});
jsonObject.put("result", results);
log.error("-----结论完成");
}
}
......@@ -199,6 +219,7 @@ public class ReportParamProcessor {
String[] kkscode = (String[]) args[2];
String deviceCode = (String) args[3];
String endTime = (String) args[4];
log.error(keyname + "-----开始");
//拼接kkscode
List<String> listWithDevicode = Arrays.stream(kkscode).map(item -> {
return deviceCode + item;
......@@ -218,6 +239,8 @@ public class ReportParamProcessor {
});
}
jsonObject.put(keyname, fuzhu);
log.error(keyname + "-----结束");
}
}
......
......@@ -22,7 +22,7 @@
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
<level>error</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
......
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