06f69860 张雷

Merge remote-tracking branch 'origin/master' into master

2 个父辈 00d3760a e6ec9091
......@@ -159,8 +159,16 @@ public class AjhRectificationInfoController {
public Result<List<Map<String,Object>>> getDefectHandleCount(AjhRectificationInfo ajhRectificationInfo, HttpServletRequest req){
Result<List<Map<String,Object>>> result = new Result<>();
QueryWrapper<AjhRectificationInfo> queryWrapper = QueryGenerator.initQueryWrapper(ajhRectificationInfo, req.getParameterMap());
queryWrapper.select("count(id) count,handle_result handleResult");
queryWrapper.groupBy("handle_result");
/* if(StringUtils.isEmpty(ajhRectificationInfo.getDepartId())){
ajhRectificationInfo.setDepartId(BaseContextHandler.getDeparts());
}*/
if (!"1".equals(BaseContextHandler.get("userType"))) {
queryWrapper.in("depart_id",BaseContextHandler.getDeparts());
}
List<Map<String,Object>> list = ajhRectificationInfoService.listMaps(queryWrapper);
result.setSuccess(true);
result.setResult(list);
......
......@@ -18,4 +18,23 @@ public interface IAlarmLimitCustomService {
Map<String, Map<String,Double>> getAlarmLimitData(String departIds);
public Map<String, Map<String, Map<String, Double>>> riverAlarmMap(String alarmParamCodes);
/**
* 指标值报警预警
* @param value 指标值
* @param stringIntegerMap key->factoryId+_+code val->报警上下限值
* @return
*/
public String alarmValue(Double value, Map<String, Double> stringIntegerMap);
/***
* 指标值超上下限
* @param value
* @param stringIntegerMap key->factoryId+_+code val->报警上下限值
* @return
*/
public String alarmValueLimit(Double value, Map<String, Double> stringIntegerMap);
public Double riverAlarm(Map<String, Map<String, Map<String, Double>>> riverAlarmMap, String paramId,Double paramValue);
}
......
package com.skua.modules.algorithm.handle.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.skua.core.util.ConvertUtils;
import com.skua.modules.alarmtmp.entity.AlarmLevelStandardConfig;
import com.skua.modules.alarmtmp.entity.AlarmParamStandardConfig;
import com.skua.modules.alarmtmp.service.AlarmLevelStandardConfigService;
import com.skua.modules.alarmtmp.service.AlarmParamStandardConfigService;
import com.skua.modules.algorithm.handle.IAlarmLimitCustomService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
......@@ -14,10 +23,103 @@ import java.util.Map;
*/
@Component("alarmLimitCustomServiceImpl")
public class IAlarmLimitCustomServiceImpl implements IAlarmLimitCustomService {
@Autowired
private AlarmLevelStandardConfigService alarmLevelStandardConfigService;
@Autowired
private AlarmParamStandardConfigService alarmParamStandardConfigService;
/**
* 指标值报警预警
*
* @param value 指标值
* @param stringIntegerMap key->alarmUpperLimit val->报警上限值
* key->alarmLowerLimit val->报警下限值
* @author Gao Ran,
* @Description:
*/
@Override
public String alarmValue(Double value, Map<String, Double> stringIntegerMap) {
if ((stringIntegerMap != null && stringIntegerMap.get("alarmUpperLimit") != null && value > stringIntegerMap.get("alarmUpperLimit")) ||
(stringIntegerMap != null && stringIntegerMap.get("alarmLowerLimit") != null && value < stringIntegerMap.get("alarmLowerLimit"))) {
//报警
return ("2");
} else if ((stringIntegerMap != null && stringIntegerMap.get("warnUpperLimit") != null && value > stringIntegerMap.get("warnUpperLimit")) ||
(stringIntegerMap != null && stringIntegerMap.get("warnLowerLimit") != null && value < stringIntegerMap.get("warnLowerLimit"))) {
//预警
return ("1");
} else {
//正常
return ("0");
}
}
public String alarmValueLimit(Double value, Map<String, Double> stringIntegerMap) {
if ((stringIntegerMap != null && stringIntegerMap.get("alarmUpperLimit") != null && value > stringIntegerMap.get("alarmUpperLimit"))) {
//超上限
return ("2");
} else if ((stringIntegerMap != null && stringIntegerMap.get("alarmLowerLimit") != null && value < stringIntegerMap.get("alarmLowerLimit"))) {
//低于下限
return ("1");
} else {
//正常
return ("0");
}
}
@Override
public Double riverAlarm(Map<String, Map<String, Map<String, Double>>> riverAlarmMap, String paramId, Double paramValue) {
//河道地表水标准
//三类水标准
Map<String, Map<String, Double>> threeMap = riverAlarmMap.get("DBSSL");
//四类水标准
Map<String, Map<String, Double>> fourMap = riverAlarmMap.get("DBSSIL");
//五类水标准
Map<String, Map<String, Double>> fiveMap = riverAlarmMap.get("DBSWL");
Map<String, Object> paramMap = new HashMap<>();
if ((threeMap != null && threeMap.get(paramId) != null && paramValue <= threeMap.get(paramId).get("alarmUpperLimit"))
&& (paramValue > threeMap.get(paramId).get("alarmLowerLimit"))) {
paramMap.put("paramLevel", 3);
} else if ((fourMap != null && fourMap.get(paramId) != null && paramValue <= fourMap.get(paramId).get("alarmUpperLimit"))
&& (paramValue > fourMap.get(paramId).get("alarmLowerLimit"))) {
paramMap.put("paramLevel", 4);
} else if ((fiveMap != null && fiveMap.get(paramId) != null && paramValue <= fiveMap.get(paramId).get("alarmUpperLimit"))
&& (paramValue > fiveMap.get(paramId).get("alarmLowerLimit"))) {
paramMap.put("paramLevel", 5);
} else if ((fiveMap != null && fiveMap.get(paramId) != null && paramValue > fiveMap.get(paramId).get("alarmUpperLimit"))) {
paramMap.put("paramLevel", 6);
} else {
paramMap.put("paramLevel", 3);
}
return ConvertUtils.getDouble(paramMap.get("paramLevel"), 0);
}
@Override
public Map<String, Map<String, Double>> getAlarmLimitData(String departIds) {
return new HashMap<>();
}
public Map<String, Map<String, Map<String, Double>>> riverAlarmMap(String alarmParamCodes) {
Map<String, Map<String, Map<String, Double>>> alarmParamMap = new HashMap<>();
for (String alarmParamCode : alarmParamCodes.split(",")) {
AlarmLevelStandardConfig levelCode = alarmLevelStandardConfigService.getOne(new QueryWrapper<AlarmLevelStandardConfig>().eq("alarm_standard_level_code", alarmParamCode), false);
if (ObjectUtil.isEmpty(levelCode)) {
return new HashMap<>();
}
List<AlarmParamStandardConfig> standardConfig = alarmParamStandardConfigService.list(new QueryWrapper<AlarmParamStandardConfig>().
eq("alarm_level_standard_id", levelCode.getId()));
//保存厂站指标报警
Map<String, Map<String, Double>> factoryParamLimitMap = new HashMap<>();
Map<String, Double> paramLimitMap;
for (AlarmParamStandardConfig alarmParamStandardDepartVO : standardConfig) {
paramLimitMap = new HashMap<>();
paramLimitMap.put("alarmUpperLimit", Double.parseDouble(alarmParamStandardDepartVO.getAlarmParamUpperLimit()));
paramLimitMap.put("alarmLowerLimit", Double.parseDouble(alarmParamStandardDepartVO.getAlarmParamLowerLimit()));
factoryParamLimitMap.put(alarmParamStandardDepartVO.getAlarmParamCode(), paramLimitMap);
}
alarmParamMap.put(alarmParamCode, factoryParamLimitMap);
}
return alarmParamMap;
}
}
......
......@@ -97,4 +97,9 @@ public class QuestionDB {
@TableField(exist=false)
@ApiModelProperty(value = "判断题数目")
private Integer judgeNum;
@TableField(exist=false)
@ApiModelProperty(value = "所属厂站")
private String departName;
}
......
......@@ -4,6 +4,7 @@
<resultMap type="com.skua.modules.edu.entity.QuestionDB" id="EduQuestionDbResult">
<result property="id" column="id" />
<result property="departId" column="depart_id" />
<result property="departName" column="depart_name" />
<result property="userId" column="user_id" />
<result property="parentId" column="parent_id" />
<result property="dbName" column="db_name" />
......@@ -25,7 +26,7 @@
</sql>
<select id="selectQuestionDbList" parameterType="com.skua.modules.edu.entity.QuestionDB" resultMap="EduQuestionDbResult">
select t.* , ifnull(aaa.single_num,0) single_num , ifnull(aaa.multiple_num,0) multiple_num , ifnull(aaa.judge_num,0) judge_num from edu_question_db t
select d.depart_name,t.* , ifnull(aaa.single_num,0) single_num , ifnull(aaa.multiple_num,0) multiple_num , ifnull(aaa.judge_num,0) judge_num from edu_question_db t
left join (
SELECT question_db_id , question_type,
SUM(IF(`question_type`='1',1,0))as 'single_num',
......@@ -34,6 +35,7 @@
FROM edu_question
group by question_db_id , question_type
)aaa on aaa.question_db_id = t.id
left join sys_depart d on t.depart_id = d.id
<where>
<if test="departId != null and departId != ''"> and t.depart_id = #{departId}</if>
<if test="userId != null and userId != ''"> and t.user_id = #{userId}</if>
......
......@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.google.common.collect.MapDifference;
import com.google.common.collect.Maps;
import com.skua.core.util.DoubleOperaUtils;
import com.skua.modules.alarmtmp.entity.SysFactoryDevice;
import com.skua.modules.alarmtmp.service.ISysFactoryDeviceService;
import com.skua.core.api.vo.Result;
......@@ -17,6 +18,7 @@ import com.skua.core.context.SpringContextUtils;
import com.skua.core.service.IFactoryInfoService;
import com.skua.core.util.ConvertUtils;
import com.skua.core.util.DateUtils;
import com.skua.modules.algorithm.handle.IAlarmLimitCustomService;
import com.skua.modules.algorithm.service.ISysAlgorithmLibraryService;
import com.skua.modules.algorithm.service.ISysAlgorithmStatisticsLibraryService;
import com.skua.modules.algorithm.vo.SysAlgorithmStatisticsLibraryVO;
......@@ -34,6 +36,7 @@ import com.skua.modules.system.vo.SysFactoryInfo.SysFactoryInfoVO;
import com.skua.modules.threedimensional.service.IDataCountDayService;
import com.skua.modules.threedimensional.service.IScreenDataService;
import com.skua.modules.threedimensional.vo.DataParams;
import com.skua.modules.threedimensional.vo.RealTimeDataVO;
import com.skua.modules.threedimensional.vo.StatisticsParams;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -78,6 +81,10 @@ public class ScreenDataController {
private IDataCountDayService dataCountDayService;
@Autowired
private ISysFactoryDeviceService sysFactoryDeviceService;
@Autowired
private IAlarmLimitCustomService alarmLimitCustomService;
@Autowired
private IFactoryInfoService factoryInfoService;
/**
* 获取累计流量
......@@ -498,8 +505,6 @@ public class ScreenDataController {
result.setResult(resultMap);
return result;
}
/**
* 今日水量情况
*
......@@ -1196,10 +1201,6 @@ public class ScreenDataController {
return true;
}
public static void main(String[] args) {
System.out.println(getBetweenDate("2020-02-02", "2020-03-03"));
}
public static List<String> getBetweenDate(String start, String end) {
List<String> list = new ArrayList<>();
// LocalDate默认的时间格式为2020-02-02
......@@ -1219,6 +1220,14 @@ public class ScreenDataController {
public Result<Map<String, Object>> getRealTimeSz(@RequestBody DataParams dataParams) {
Result<Map<String, Object>> result = new Result<>();
Map<String, Object> map = new HashMap<>();
result.setResult(map);
return result;
}
......@@ -1245,4 +1254,430 @@ public class ScreenDataController {
return result;
}
/**
* app工艺段实时数据分组查询
*
* @param departId
* @param req
* @return
*/
@AutoLog(value = "工艺段实时数据分组查询")
@ApiOperation(value = "工艺段实时数据分组查询", notes = "工艺段实时数据分组查询")
@GetMapping(value = "/getRealData")
public Result getRealTimeData(String statics, String departId, HttpServletRequest req, String startTime, String endTime, String departType, String structCode, String isApp, String tag, String pgId) {
Result result = new Result();
// if (!org.springframework.util.StringUtils.hasText(departId)) {
// //如果厂站为空
// departId = BaseContextHandler.getDeparts();
// }
String order = req.getParameter("order");
String groupName = req.getParameter("groupName");
String pattern = "yyyy-MM-dd HH:mm:ss";
String timePeriod = "mm";
if (org.apache.commons.lang3.StringUtils.isNotBlank(statics)) {
if (statics.equals("mm")) {
pattern = "yyyy-MM-dd HH:mm:ss";
timePeriod = "mm";
} else if (statics.equals("day")) {
pattern = "yyyy-MM-dd HH:mm:ss";
timePeriod = "mm";
} else if (statics.equals("month")) {
pattern = "yyyy-MM-dd";
timePeriod = "d";
} else if (statics.equals("year")) {
pattern = "yyyy-MM";
timePeriod = "m";
}
}
List<Map<String, Object>> dictGroupData = getDictGroup(departType, departId, tag, pgId, structCode, groupName);
//点表id
String fields = dictGroupData.stream().map(data -> ConvertUtils.getString(data.get("id"))).collect(Collectors.joining(","));
//指标标准化编码
String codeId = dictGroupData.stream().map(data -> ConvertUtils.getString(data.get("metric_uid_tag"))).distinct().collect(Collectors.joining(","));
Map<String, String> id2Name = dictGroupData.stream().collect(Collectors.toMap(data -> ConvertUtils.getString(data.get("id")), data -> ConvertUtils.getString(data.get("metric_name")), (o1, o2) -> o1));
//查询指标的实时pg值
List<Map<String, Object>> maps = new ArrayList<>();
List<Map<String, Object>> pgList = new ArrayList<>();
try {
if (org.apache.commons.lang3.StringUtils.isEmpty(startTime) && org.apache.commons.lang3.StringUtils.isEmpty(endTime)) {
JdbcTemplate pgdb = (JdbcTemplate) SpringContextUtils.getBean("pg-db");
String fieldsCollect = Arrays.stream(fields.split(",")).map(data -> "'" + data + "'").collect(Collectors.joining(","));
String yyyyMMdd = DateUtils.format(new Date(), "yyyyMMdd");
String sql = "select * from realtimedata where nm in (" + fieldsCollect + ")";
// String sql = "SELECT t2.* FROM" +
// "( SELECT nm, MAX ( ts ) ts FROM xsinsert" + yyyyMMdd + " where nm in (" + fieldsCollect + ") GROUP BY nm ,ts ) t1, " +
// "xsinsert" + yyyyMMdd + " t2 WHERE t1.nm = t2.nm AND t1.ts = t2.ts and t2.nm in (" + fieldsCollect + ")";
pgList = pgdb.queryForList(sql);
maps = new ArrayList<>();
for (Map<String, Object> pgMap : pgList) {
Map<String, Object> pgTimeValMap = Maps.newHashMap();
String nm = ConvertUtils.getString(pgMap.get("nm"));
pgTimeValMap.put(nm, ConvertUtils.getString(pgMap.get("v")));
pgTimeValMap.put("time", ConvertUtils.getString(pgMap.get("ts")));
maps.add(pgTimeValMap);
}
}
} catch (Exception e) {
e.printStackTrace();
}
//如果起止时间不为空,查询小时表趋势的数据
if (org.apache.commons.lang3.StringUtils.isNotBlank(startTime) && org.apache.commons.lang3.StringUtils.isNotBlank(endTime)) {
maps = factoryInfoService.queryFactoryInfos(departId, fields, startTime, endTime, "1");
if (org.apache.commons.lang3.StringUtils.isNotBlank(statics)) {
maps = factoryInfoService.handleResult(maps, timePeriod, fields);
for (Map<String, Object> map : maps) {
//除time字段外,求平均值
for (String field : fields.split(",")) {
Object value = map.get(field);
Object valueSumCount = map.get(field + "_tag");
if (field.contains("LJ")) {
//求和则使用原来求和的值
map.put(field, DoubleOperaUtils.bigDecimalRound(ConvertUtils.getDouble(value, 0.00), 2));
} else {
//用平均值改写原来合计值
map.put(field, DoubleOperaUtils.bigDecimalRound(ConvertUtils.getDouble(value, 0.00) / ConvertUtils.getDouble(valueSumCount, 1.00), 2));
}
}
}
}
}
//如果起止时间不为空,特殊处理测压点的趋势的数据
// if (org.apache.commons.lang3.StringUtils.isNotBlank(startTime) && org.apache.commons.lang3.StringUtils.isNotBlank(endTime) && "6".equals(departType)) {
// try {
// JdbcTemplate pgdb = (JdbcTemplate) SpringContextUtils.getBean("pg-db");
// String fieldsCollect = Arrays.stream(fields.split(",")).map(data -> "'" + data + "'").distinct().collect(Collectors.joining(","));
// String sql = "select ts as time,nm as monitorId,v as monitorValue from yl_day where nm in (" + fieldsCollect + ") and ts>='" + DateUtils.getMillis(DateUtils.parse(startTime, "yyyy-MM-dd HH:mm:ss")) / 1000 + "' and ts<='" + DateUtils.getMillis(DateUtils.parse(endTime, "yyyy-MM-dd HH:mm:ss")) / 1000 + "'";
// maps = pgdb.queryForList(sql);
// maps = dataRowToCellByTime(new ArrayList<Map<String, Object>>(), maps);
// } catch (Exception e) {
// e.printStackTrace();
// }
//
//
// }
//校验数据判断组装
List<RealTimeDataVO> res;
//实时数据按厂站格式分组组装数据
if (org.apache.commons.lang3.StringUtils.isNotBlank(departType) && org.apache.commons.lang3.StringUtils.isEmpty(startTime) && org.apache.commons.lang3.StringUtils.isEmpty(endTime)) {
res = alarmPgVal(departId, maps, dictGroupData, pattern);
List<Map<String, Object>> resList;
resList = staticsForDepart(departType, res, departId);
result.setResult(resList);
}
//如果是趋势图以时间分组格式组装
else if (org.apache.commons.lang3.StringUtils.isNotBlank(startTime) && org.apache.commons.lang3.StringUtils.isNotBlank(endTime)) {
res = alarmPgVal(departId, maps, dictGroupData, pattern);
Map<String, List<RealTimeDataVO>> collect = res.stream().sorted(Comparator.comparing(RealTimeDataVO::getTime).reversed()).collect(Collectors.groupingBy(data -> data.getTime()));
List<String> timeList;
if (org.apache.commons.lang3.StringUtils.isNotBlank(statics)) {
timeList = DateUtils.sliceUpDateRange(startTime, endTime, statics);
} else {
timeList = DateUtils.sliceUpDateRange(startTime, endTime, "day");
}
//补充默认字段
if ("6".equals(departType)) {
} else {
for (String time : timeList) {
if (CollectionUtil.isEmpty(collect.get(time))) {
collect.put(time, new ArrayList<>());
}
}
}
//排序
TreeMap<String, Object> treeMap = new TreeMap<>();
treeMap.putAll(collect);
result.setResult(treeMap);
//数据格式组装
List<String> codeList = Arrays.asList(codeId.split(","));
collect = res.stream().sorted(Comparator.comparing(RealTimeDataVO::getTime)).collect(Collectors.groupingBy(data -> data.getDictId()));
List<Object> list = new ArrayList<>();
Map<String, Object> finalRes = new HashMap<String, Object>() {{
put("code", codeList);
put("time", timeList);
put("data", list);
}};
//为空数据的时间段塞值
//为空数据的时间段塞值
if (!org.apache.commons.lang3.StringUtils.isEmpty(codeId)) {
for (String key : codeList) {
Map<String, Object> map = Maps.newHashMap();
Map<String, RealTimeDataVO> time2ValMap = Maps.newHashMap();
map.put("code", key);
List<RealTimeDataVO> realTimeDataVOS = collect.getOrDefault(key, new ArrayList<>());
for (RealTimeDataVO realTimeDataVO : realTimeDataVOS) {
time2ValMap.put(realTimeDataVO.getTime(), realTimeDataVO);
}
//如果是测压点,十分钟采集的一条数据无序,对应不上切割的时间,不填充数据了
for (String time : timeList) {
//String format = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
RealTimeDataVO realTimeDataVO = time2ValMap.get(time);
if (ObjectUtil.isEmpty(realTimeDataVO)) {
realTimeDataVO = new RealTimeDataVO();
realTimeDataVO.setTime(time);
realTimeDataVO.setDictId(key);
realTimeDataVO.setPgId(key);
realTimeDataVO.setMetricRealName(id2Name.get(key));
realTimeDataVO.setPgVal("");
realTimeDataVO.setAlarmStatus("0");
realTimeDataVOS.add(realTimeDataVO);
}
}
if (org.apache.commons.lang3.StringUtils.isEmpty(order) || order.equals("asc")) {
realTimeDataVOS = realTimeDataVOS.stream().sorted(Comparator.comparing(RealTimeDataVO::getTime)).collect(Collectors.toList());
} else {
realTimeDataVOS = realTimeDataVOS.stream().sorted(Comparator.comparing(RealTimeDataVO::getTime).reversed()).collect(Collectors.toList());
}
map.put("data", realTimeDataVOS);
list.add(map);
}
}
result.setResult(finalRes);
}
//实时数据格式
else {
res = alarmPgVal(departId, maps, dictGroupData, pattern);
result.setResult(res);
}
return result;
}
/**
* <pre>
* <请输入描述信息> //工艺段分组,查询工艺段下的指标
* </pre>
*
* @param departId
* @param tag
* @author Gao Ran,
* @Description: TODO(这里描述这个方法的需求变更情况)
*/
public List<Map<String, Object>> getDictGroup(String departType, String departId, String tag, String
pgId, String structCode, String groupName) {
//工艺段分组,查询工艺段下的指标
QueryWrapper dictGroupQueryWrapper = new QueryWrapper();
if (!org.apache.commons.lang3.StringUtils.isEmpty(departId)) {
dictGroupQueryWrapper.in("sd.id", Arrays.asList(departId.split(",")));
}
if (!org.apache.commons.lang3.StringUtils.isEmpty(departType)) {
dictGroupQueryWrapper.in("sd.depart_type", Arrays.asList(departType.split(",")));
}
if (!org.apache.commons.lang3.StringUtils.isEmpty(pgId)) {
dictGroupQueryWrapper.in("smmi.id", Arrays.asList(pgId.split(",")));
}
if (!org.apache.commons.lang3.StringUtils.isEmpty(tag)) {
dictGroupQueryWrapper.in("smmi.metric_uid_tag", Arrays.asList(tag.split(",")));
}
if (!org.apache.commons.lang3.StringUtils.isEmpty(structCode)) {
dictGroupQueryWrapper.in("smmi.struct_code", Arrays.asList(structCode.split(",")));
}
if (!org.apache.commons.lang3.StringUtils.isEmpty(groupName)) {
dictGroupQueryWrapper.in("g.group_name", Arrays.asList(groupName.split(",")));
}
List<Map<String, Object>> dictGroupData = screenDataService.getDictGroupData(dictGroupQueryWrapper);
return dictGroupData;
}
private List<RealTimeDataVO> alarmPgVal(String departId, List<Map<String, Object>> maps, List<Map<String, Object>> dictGroupData, String pattern) {
List<RealTimeDataVO> res = new ArrayList<>();
//点id与点信息映射
Map<String, Map<String, Object>> pgId2Map = Maps.newHashMap();
for (Map<String, Object> dictGroupDatum : dictGroupData) {
pgId2Map.put(ConvertUtils.getString(dictGroupDatum.get("id")), dictGroupDatum);
}
// Map<String, Map<String, Double>> alarmLimitData = alarmLimitCustomService.riverAlarmAllMap("DBSSW,DBSSL");
Map<String, Map<String, Map<String, Double>>> riverAlarmMap = alarmLimitCustomService.riverAlarmMap("DBSSIL,DBSSL,DBSWL");
Map<String, Map<String, Double>> alarmLimitData = alarmLimitCustomService.getAlarmLimitData(departId);
for (Map<String, Object> realTimeData : maps) {
//查询所属厂站的报警阈值
//获取时间
//String time = DateUtils.formatTime(Long.parseLong(realTimeData.get("time") + "000"));
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(2);
String time = DateUtils.format(DateUtils.getDate(Long.parseLong(realTimeData.get("time") + "000")), pattern);
for (String pgId : realTimeData.keySet()) {
if ("time".equals(pgId) || pgId.contains("tag")) {
continue;
}
RealTimeDataVO realTimeDataVO = new RealTimeDataVO();
String pgVal = ConvertUtils.getString(realTimeData.get(pgId));
BigDecimal b1 = new BigDecimal((org.apache.commons.lang3.StringUtils.isEmpty(pgVal) ? "0" : pgVal)).setScale(2, BigDecimal.ROUND_HALF_UP);
double v = b1.doubleValue();
Map<String, Object> pgId2MapOrDefault = pgId2Map.getOrDefault(pgId, new HashMap<>());
String depart = ConvertUtils.getString(pgId2MapOrDefault.get("depart_id"));
String metric_type = ConvertUtils.getString(pgId2MapOrDefault.get("metric_type"));
String uidTag = ConvertUtils.getString(pgId2MapOrDefault.get("metric_uid_tag"));
String sort_num = ConvertUtils.getString(pgId2MapOrDefault.get("sort_num"));
String metricd_name = ConvertUtils.getString(pgId2MapOrDefault.get("metricd_name"));
String depart_name = ConvertUtils.getString(pgId2MapOrDefault.get("depart_name"));
String parent_depart_name = ConvertUtils.getString(pgId2MapOrDefault.get("parent_depart_name"));
String metric_name = ConvertUtils.getString(pgId2MapOrDefault.get("metric_name"));
String metric_unit = ConvertUtils.getString(pgId2MapOrDefault.get("metric_unit"));
String groupName = ConvertUtils.getString(pgId2MapOrDefault.get("groupName"));
String groupType = ConvertUtils.getString(pgId2MapOrDefault.get("groupType"));
Map<String, Double> limitMap = alarmLimitData.get(depart + "_" + uidTag);
// Map<String, Double> limitMap = alarmLimitData.get(uidTag);
//查询报警上下限比较状态
String alarmValue = "0";
Double riverAlarm = 0d;
if (ObjectUtil.isNotEmpty(limitMap)) {
alarmValue = alarmLimitCustomService.alarmValue(v, limitMap);
if ("SZBOD,SZCOD,SZDDL,SZDO,SZGMSY,SZNH3N,SZPH,SZTN,SZTP".contains(uidTag)) {
riverAlarm = alarmLimitCustomService.riverAlarm(riverAlarmMap, uidTag, v);
} else {
riverAlarm = ConvertUtils.getDouble(alarmLimitCustomService.alarmValueLimit(v, limitMap), 0);
}
String alarmUpperLimit = ConvertUtils.getString(limitMap.get("alarmUpperLimit"), "");
String alarmLowerLimit = ConvertUtils.getString(limitMap.get("alarmLowerLimit"), "");
String warnUpperLimit = ConvertUtils.getString(limitMap.get("warnUpperLimit"), "");
String warnLowerLimit = ConvertUtils.getString(limitMap.get("warnLowerLimit"), "");
realTimeDataVO.setAlarmLimit(alarmLowerLimit + "-" + alarmUpperLimit);
realTimeDataVO.setWarnLimit(warnLowerLimit + "-" + warnUpperLimit);
realTimeDataVO.setRiverAlarm(ConvertUtils.getString(riverAlarm));
}
realTimeDataVO.setDepartId(depart);
realTimeDataVO.setDepartName(depart_name);
realTimeDataVO.setParentDepartName(parent_depart_name);
realTimeDataVO.setTime(time);
realTimeDataVO.setMetricdName(metricd_name);
realTimeDataVO.setMetricRealName(metric_name);
realTimeDataVO.setMetricUnit(metric_unit);
realTimeDataVO.setGroupType(groupType);
realTimeDataVO.setGroupName(groupName);
realTimeDataVO.setAlarmStatus(alarmValue);
realTimeDataVO.setDictId(uidTag);
realTimeDataVO.setPgId(pgId);
realTimeDataVO.setSortNum(sort_num);
realTimeDataVO.setPgVal(ConvertUtils.getString(b1));
//判端指标进出水分类
if (!org.springframework.util.StringUtils.isEmpty(uidTag)) {
if (uidTag.contains("JS")) {
realTimeDataVO.setWaterType("JS");
} else if (uidTag.contains("CS")) {
realTimeDataVO.setWaterType("CS");
}
}
// if ("1".equals(metric_type)||uidTag.contains("YXZT")){
// if (0d==v){
// realTimeDataVO.setPgVal("开启") ;
// }else {
// realTimeDataVO.setPgVal("关闭") ;
// }
// }
if ("YWJZT".equals(uidTag)) {
if (0 == v) {
realTimeDataVO.setPgVal("正常");
} else if (1 == v) {
realTimeDataVO.setPgVal("预警");
} else if (2 == v) {
realTimeDataVO.setPgVal("告警");
} else if (3 == v) {
realTimeDataVO.setPgVal("溢流");
}
}
res.add(realTimeDataVO);
}
}
//排序
res = res.stream().map(data -> {
if (org.apache.commons.lang3.StringUtils.isEmpty(data.getSortNum())) {
data.setSortNum("0");
}
return data;
}).sorted(Comparator.comparing(RealTimeDataVO::getMetricRealName)).
sorted(Comparator.comparingInt(o -> ConvertUtils.getInt(o.getSortNum())))
.collect(Collectors.toList()
);
return res;
}
/**
* <pre>
* <请输入描述信息> 按厂站分组统计指标数据
* </pre>
*
* @param departType
* @param res
* @param departId
* @author Gao Ran,
* @Description: TODO(这里描述这个方法的需求变更情况)
*/
private List<Map<String, Object>> staticsForDepart(String departType, List<RealTimeDataVO> res, String departId) {
List<Map<String, Object>> resList = Lists.newArrayList();
QueryWrapper<Object> queryWrapper = new QueryWrapper<>();
if (org.apache.commons.lang3.StringUtils.isNotBlank(departType)) {
queryWrapper.in(org.apache.commons.lang3.StringUtils.isNotBlank(departType), "depart_type", Arrays.asList(departType.split(",")));
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(departId)) {
queryWrapper.in(org.apache.commons.lang3.StringUtils.isNotBlank(departId), "sd.id", Arrays.asList(departId.split(",")));
}
queryWrapper.orderByAsc("sd.depart_order");
//分类统计厂站类型
List<Map<String, Object>> factoryDesign = screenDataService.factoryDesign(queryWrapper);
Map<String, List<RealTimeDataVO>> dataListGroup = res.stream().collect(Collectors.groupingBy(realTimeDataVO -> realTimeDataVO.getDepartId()));
//計算累计流量的差值
for (Map<String, Object> depart : factoryDesign) {
Map<String, Object> resMap = new HashMap<>();
String sysDepartId = ConvertUtils.getString(depart.get("depart_id"));
String factoryType = ConvertUtils.getString(depart.get("depart_type"));
String departName = ConvertUtils.getString(depart.get("depart_name"));
String parent_depart_name = ConvertUtils.getString(depart.get("parent_depart_name"));
String proLongitude = ConvertUtils.getString(depart.get("pro_longitude"));
String proLatitude = ConvertUtils.getString(depart.get("pro_latitude"));
//获取厂站所有的实时数据list
List<RealTimeDataVO> timeDataVOS = dataListGroup.getOrDefault(sysDepartId, new ArrayList<>());
String time = DateUtils.getDate("yyyy-MM-dd HH:mm:ss");
if (CollectionUtil.isNotEmpty(timeDataVOS)) {
time = timeDataVOS.get(0).getTime();
}
//如果alarmCollect的size大于0则有报警
List<RealTimeDataVO> alarmCollect = timeDataVOS.stream().filter(data -> "2".equals(data.getAlarmStatus())).collect(Collectors.toList());
List<RealTimeDataVO> warnCollect = timeDataVOS.stream().filter(data -> "1".equals(data.getAlarmStatus())).collect(Collectors.toList());
String alarmStatus = "0";
if (!CollectionUtil.isEmpty(alarmCollect)) {
alarmStatus = "2";
} else if (!CollectionUtil.isEmpty(warnCollect)) {
alarmStatus = "1";
}
Double riverAlarm = timeDataVOS.stream().mapToDouble(data -> ConvertUtils.getDouble(data.getRiverAlarm(), 0)).summaryStatistics().getMax();
//排序
timeDataVOS = timeDataVOS.stream().map(data -> {
if (org.apache.commons.lang3.StringUtils.isEmpty(data.getSortNum())) {
data.setSortNum("0");
}
return data;
}).sorted(Comparator.comparing(RealTimeDataVO::getMetricRealName)).
sorted(Comparator.comparingInt(o -> ConvertUtils.getInt(o.getSortNum())))
.collect(Collectors.toList()
);
resMap.put("departId", sysDepartId);
resMap.put("departName", departName);
resMap.put("parentDepartName", parent_depart_name);
resMap.put("departType", factoryType);
resMap.put("marsLatitude", proLatitude);
resMap.put("marsLongitude", proLongitude);
resMap.put("dataVOS", timeDataVOS);
resMap.put("time", time);
resMap.put("riverAlarm", riverAlarm);
resMap.put("alarmStatus", alarmStatus);
resList.add(resMap);
}
return resList;
}
}
......
......@@ -29,4 +29,16 @@ public interface ScreenMapper {
@Param("dataViewName3a24") String dataViewName3a24, @Param("dataViewName2119") String dataViewName2119,
@Param("startMonth") String startMonth, @Param("endMonth") String endMonth,
@Param("dataViewName4411") String dataViewName4411);
@Select(" select sd.depart_name,( SELECT depart_name from sys_depart WHERE id = sd.parent_id )parent_depart_name,sd.depart_type,smd.metricd_name, smmi.id,smmi.metric_name,smmi.metric_type,smmi.metric_uid_tag ,g.group_name groupName,g.group_type groupType , COALESCE(smmi.metric_unit,smd.metric_unit) metric_unit,smmi.depart_id ,COALESCE(g.sort_num,smmi.sort_num) sort_num from sys_monitor_metric_info smmi left join sys_metric_dict smd on smd.id =smmi.metric_uid_tag " +
"inner join sys_depart sd on smmi.depart_id =sd.id left join sys_metric_dict_group g on g.dict_id =smmi.metric_uid_tag " +
" ${ew.customSqlSegment}")
List<Map<String, Object>> getDictGroupData(@Param(Constants.WRAPPER) QueryWrapper dictGroupQueryWrapper);
/**
* 水厂档案相关查询
* @param queryWrapper
*/
@Select("select sd.id depart_id,sd.parent_id,sd.depart_name,( SELECT depart_name from sys_depart WHERE id = sd.parent_id )parent_depart_name,sd.depart_type,sf.* from sys_depart sd left join sys_factory_info sf on sd.id =sf.depart_id ${ew.customSqlSegment}")
List<Map<String, Object>> factoryDesign(@Param(Constants.WRAPPER) QueryWrapper queryWrapper);
}
......
......@@ -3,6 +3,7 @@ package com.skua.modules.threedimensional.service;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.skua.modules.threedimensional.vo.StatisticsParams;
import org.apache.ibatis.annotations.Param;
import org.springframework.jdbc.core.JdbcTemplate;
......@@ -24,4 +25,13 @@ public interface IScreenDataService{
List<Map<String, Object>> getYhdlqs(StatisticsParams statisticsParams);
List<Map<String, Object>> getYhylqs(StatisticsParams statisticsParams);
List<Map<String, Object>> getDictGroupData(QueryWrapper dictGroupQueryWrapper);
/**
* 水厂档案相关查询
* @param queryWrapper
* @return
*/
List<Map<String, Object>> factoryDesign(QueryWrapper<Object> queryWrapper);
}
......
package com.skua.modules.threedimensional.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.skua.common.constant.ReportConstant;
import com.skua.common.report.ReportViewUtil;
import com.skua.core.service.IFactoryInfoService;
......@@ -338,6 +339,22 @@ public class ScreenDataServiceImpl implements IScreenDataService {
return months;
}
public List<Map<String, Object>> getDictGroupData(QueryWrapper dictGroupQueryWrapper){
return screenMapper.getDictGroupData(dictGroupQueryWrapper);
}
/***
* 水厂档案相关查询
* @param queryWrapper
* @return
*/
@Override
public List<Map<String, Object>> factoryDesign(QueryWrapper<Object> queryWrapper) {
return screenMapper.factoryDesign(queryWrapper);
}
public static void main(String[] args) {
String startTime = "2024-01-01";//
String endTime = "2024-12-31";
......
......@@ -15,4 +15,7 @@ public class DataParams {
private String startDate;
private String departType;
private String tag;
}
......
package com.skua.modules.threedimensional.vo;
import com.skua.core.util.ConvertUtils;
import com.skua.modules.threedimensional.entity.RealTimeData;
import lombok.Data;
......@@ -16,4 +17,18 @@ public class RealTimeDataVO extends RealTimeData {
private String departName;
private String metricRealName;
private String waterType;
private String groupType;
private String groupName;
private String alarmValue;
private String alarmStatus;
private String parentDepartName;
private String alarmLimit;
private String warnLimit;
private String riverAlarm;
}
......
......@@ -15,26 +15,28 @@ public class PowerCutDownVO {
@ApiModelProperty(value = "部门编号")
public String departId ;
@ApiModelProperty(value = "部门名称")
public String departName;
@ApiModelProperty(value = "名称")
@ApiModelProperty(value = "处理水量")
public String clsl ;
@ApiModelProperty(value = "名称")
@ApiModelProperty(value = "COD")
public String codValue;
@ApiModelProperty(value = "名称")
@ApiModelProperty(value = "耗电量")
public String hdl;
@ApiModelProperty(value = "名称")
@ApiModelProperty(value = "氨氮")
public String nh3nValue;
@ApiModelProperty(value = "名称")
@ApiModelProperty(value = "数量")
public String num;
@ApiModelProperty(value = "名称")
@ApiModelProperty(value = "总氮")
public String tnValue;
@ApiModelProperty(value = "名称")
@ApiModelProperty(value = "总磷")
public String tpValue;
}
......
......@@ -106,7 +106,7 @@ public class OperationReportServiceImpl implements IOperationReportService {
/***************** 实际水量同比下降水务公司原因分析一览表************************/
dataViewName4411 = ReportViewUtil.buildView(ReportConstant.view4411,"ysjsl,tqysjsl,ysjsldyqntqyy", departId, seasonTimeVO.getStartTime(), seasonTimeVO.getEndTime());
sql = " select aaa.depart_id , d.depart_name departName, round(100*(sum(ifnull(aaa.ysjsl,0)) - sum(ifnull(aaa.tqysjsl,0)) )/ sum(ifnull(aaa.tqysjsl,0)),2) 'ratio', ";
sql += " round( sum(ifnull(aaa.ysjsl,0)),2 ) 'ysjsl' ,round( sum(ifnull(aaa.tqysjsl,0)),2 ) 'tqysjsl' ,GROUP_CONCAT(aaa.ysjsldyqntqyy) 'causeAnalysis' from "+ dataViewName4411+" aaa";
sql += " round( sum(ifnull(aaa.ysjsl,0)),2 ) 'ysjsl' ,round( sum(ifnull(aaa.tqysjsl,0)),2 ) 'tqysjsl' ,GROUP_CONCAT(aaa.ysjsldyqntqyy SEPARATOR '') 'causeAnalysis' from "+ dataViewName4411+" aaa";
sql += " left join sys_depart d on d.id = aaa.depart_id";
sql += " group by aaa.depart_id HAVING sum(ifnull(aaa.ysjsl,0)) < sum(ifnull(aaa.tqysjsl,0)) ";
List<FReportWaterMonthDataVO> waterMonthDataList = getJdbcTemplate().query(sql,new BeanPropertyRowMapper<FReportWaterMonthDataVO>(FReportWaterMonthDataVO.class));
......@@ -115,7 +115,7 @@ public class OperationReportServiceImpl implements IOperationReportService {
//水电耗高于控制目标--水务公司列表
dataViewName4411 = ReportViewUtil.buildView(ReportConstant.view4411,"ydh,dhcmbzyy", departId, seasonTimeVO.getStartTime(), seasonTimeVO.getEndTime());
sql = "select * from ( ";
sql += " select d.depart_name 'departName', aaa.depart_id , round(avg(aaa.ydh),2) realConsume , IFNULL(tc.target_power,2) 'targetConsume' ,GROUP_CONCAT(aaa.dhcmbzyy) 'causeAnalysis' from "+ dataViewName4411+" aaa";;
sql += " select d.depart_name 'departName', aaa.depart_id , round(avg(aaa.ydh),2) realConsume , IFNULL(tc.target_power,2) 'targetConsume' ,GROUP_CONCAT(aaa.dhcmbzyy SEPARATOR '') 'causeAnalysis' from "+ dataViewName4411+" aaa";;
sql += " left join report_target_config tc on (tc.depart_id = aaa.depart_id and tc.target_year='2024')";
sql += " left join sys_depart d on d.id = aaa.depart_id ";
sql += " group by aaa.depart_id )bbb where bbb.realConsume > bbb.targetConsume ";
......@@ -126,7 +126,7 @@ public class OperationReportServiceImpl implements IOperationReportService {
//药剂成本高于控制目标--水务公司列表
dataViewName4411 = ReportViewUtil.buildView(ReportConstant.view4411,"yyh,yhcyqyy", departId, seasonTimeVO.getStartTime(), seasonTimeVO.getEndTime());
sql = "select * from ( ";
sql += " select d.depart_name 'departName', aaa.depart_id , round(avg(aaa.yyh),2) realConsume , IFNULL(tc.target_drug,2) 'targetConsume' ,GROUP_CONCAT(aaa.yhcyqyy) 'causeAnalysis' from "+ dataViewName4411+" aaa";;
sql += " select d.depart_name 'departName', aaa.depart_id , round(avg(aaa.yyh),2) realConsume , IFNULL(tc.target_drug,2) 'targetConsume' ,GROUP_CONCAT(aaa.yhcyqyy SEPARATOR '') 'causeAnalysis' from "+ dataViewName4411+" aaa";;
sql += " left join report_target_config tc on (tc.depart_id = aaa.depart_id and tc.target_year='2024')";
sql += " left join sys_depart d on d.id = aaa.depart_id ";
sql += " group by aaa.depart_id )bbb where bbb.realConsume > bbb.targetConsume ";
......
......@@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletResponse;
import cn.hutool.json.JSONObject;
import com.skua.core.context.BaseContextHandler;
import com.skua.core.query.QueryGenerator;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
......@@ -110,6 +111,28 @@ public class EquipmentController {
@Autowired
private Key2ValueService key2ValueService;
@AutoLog(value = "设备台账-所有设备")
@ApiOperation(value = "设备台账-所有设备", notes = "设备台账-所有设备")
@GetMapping(value = "/allList")
public Result<List<EquipmentInfo>> allList(EquipmentInfo equipmentInfo, @RequestParam(name="model", defaultValue="0") Integer model,HttpServletRequest req ) throws Exception {
Result<List<EquipmentInfo>> result = new Result<List<EquipmentInfo>>();
QueryWrapper<EquipmentInfo> queryWrapper = QueryGenerator.initQueryWrapper(equipmentInfo, req.getParameterMap());
// queryWrapper.eq("depart_id", BaseContextHandler.getRealDepartId());
if(equipmentInfo.getDepartId()==null){
equipmentInfo.setDepartId(BaseContextHandler.getDeparts());
}
/* if(model==1){
queryWrapper.isNotNull("is_model");
queryWrapper.last(" and is_model != ''");
}*/
queryWrapper.orderByDesc("create_time");
List<EquipmentInfo> dataList = equipmentInfoService.list(queryWrapper);
result.setSuccess(true);
result.setResult(dataList);
return result;
}
@CustomExceptionAnno(description = "设备台账-设备排序")
@AutoLog(value = "设备台账-设备排序")
@ApiOperation(value = "设备台账-设备排序", notes = "设备台账-设备排序")
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!