|
|
@@ -0,0 +1,410 @@
|
|
|
+package cn.vbdsm.powerservice.service.sys.impl;
|
|
|
+
|
|
|
+import cn.vbdsm.common.config.I18nConfig;
|
|
|
+import cn.vbdsm.common.constants.SystemConstant;
|
|
|
+import cn.vbdsm.common.constants.WarnInfoConstants;
|
|
|
+import cn.vbdsm.common.utils.AnalDataCtPtUtil;
|
|
|
+import cn.vbdsm.model.Org;
|
|
|
+import cn.vbdsm.powerservice.dao.*;
|
|
|
+import cn.vbdsm.powerservice.model.CompanyDateM;
|
|
|
+import cn.vbdsm.powerservice.model.CompanyOnline;
|
|
|
+import cn.vbdsm.powerservice.model.Monitor;
|
|
|
+import cn.vbdsm.powerservice.model.OnlineDataOverwarningInfo;
|
|
|
+import cn.vbdsm.powerservice.service.sys.IScreenService;
|
|
|
+import cn.vbdsm.powerservice.vo.OnlineDataOverwarningInfoVo;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import javax.core.common.Page;
|
|
|
+import javax.core.common.ResultMsg;
|
|
|
+import javax.core.common.utils.DataUtils;
|
|
|
+import javax.core.common.utils.NumberUtils;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author Yue
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class ScreenService implements IScreenService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private OrgDao orgDao;
|
|
|
+ @Resource
|
|
|
+ private OnlineDataOverwarningInfoDao odoiDao;
|
|
|
+ @Resource
|
|
|
+ private CompanyOnlineDao companyOnlineDao;
|
|
|
+ @Resource
|
|
|
+ private CompanyDateMDao companyDateMDao;
|
|
|
+ @Resource
|
|
|
+ private MonitorDao monitorDao;
|
|
|
+
|
|
|
+ public Page<Org> getCompanyList(int pageNo, int pageSize, Long serviceId){
|
|
|
+ return orgDao.selectListByService(pageNo,pageSize,serviceId);
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public ResultMsg<Object> getCompanyDetail(String local,Long orgId){
|
|
|
+
|
|
|
+ List<Map<String, Object>> powerUsers = orgDao.getPowerUsers(orgId,false);
|
|
|
+ Map<String, Object> map = new HashMap<String, Object>();
|
|
|
+ if(powerUsers.size()>0){
|
|
|
+ map = powerUsers.get(0);
|
|
|
+ }
|
|
|
+ return new ResultMsg<Object>(SystemConstant.RESULT_STATUS_SUCCESS, I18nConfig.getValue(local, "tips", "query_success"), map);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取公司监控数据
|
|
|
+ @Override
|
|
|
+ public ResultMsg<Object> getServiceMonitor(String local, Long orgId,boolean isService) {
|
|
|
+
|
|
|
+ Org org= orgDao.selectOne(orgId);
|
|
|
+ List<Org> orgList;
|
|
|
+
|
|
|
+ if(isService){
|
|
|
+ orgList=orgDao.getListByService(orgId);
|
|
|
+ }else{
|
|
|
+ orgList=new ArrayList<Org>();
|
|
|
+ orgList.add(org);
|
|
|
+ }
|
|
|
+
|
|
|
+ StringBuffer powerUserIds = new StringBuffer();
|
|
|
+ int k = 0;
|
|
|
+ for (Org o : orgList) {
|
|
|
+ if (k < orgList.size() - 1) {
|
|
|
+ powerUserIds.append(o.getId()).append(",");
|
|
|
+ } else {
|
|
|
+ powerUserIds.append(o.getId());
|
|
|
+ }
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ int companyCount=orgList.size();
|
|
|
+ List<Map<String, Object>> monitorList = orgDao.getAllMonitor(powerUserIds.toString());
|
|
|
+ List<Map<String, Object>> powerUsers = orgDao.getPowerUsers(orgId,isService);
|
|
|
+ int notOnlineCount = 0, onlineCount = 0,totalCount = 0,jcrlCount = 0;
|
|
|
+ for (Map<String, Object> powerUser: powerUsers){
|
|
|
+ if(isService&& powerUser.get("_serviceId").equals(orgId)){
|
|
|
+ jcrlCount+=(Long) powerUser.get("_jcrl");
|
|
|
+ }else if(!isService&& powerUser.get("_orgId").equals(orgId)){
|
|
|
+ jcrlCount+=(Long) powerUser.get("_jcrl");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (Map<String, Object> monitor: monitorList){
|
|
|
+ Long onlineTime = (Long) monitor.get("onlineTime");
|
|
|
+ Long stamp = null;
|
|
|
+ try {
|
|
|
+ stamp = new SimpleDateFormat("yyyyMMddHHmmss").parse(onlineTime + "").getTime();
|
|
|
+ } catch (Exception e) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Long now = new Date().getTime();
|
|
|
+ if (now - stamp > 30L * 60L * 1000L) {
|
|
|
+ notOnlineCount++;
|
|
|
+ }else{
|
|
|
+ onlineCount++;
|
|
|
+ }
|
|
|
+// if (now - stamp > 90L * 24L * 60L * 60L * 1000L) {
|
|
|
+// threeMonthNotOnlineCount++;
|
|
|
+// }
|
|
|
+ totalCount++;
|
|
|
+
|
|
|
+ }
|
|
|
+ Map<String, Object> map = new HashMap<String, Object>();
|
|
|
+ map.put("companyId", org.getId());
|
|
|
+ map.put("companyName", org.getName());
|
|
|
+ map.put("companyCount",companyCount);
|
|
|
+ map.put("totalCount", totalCount);
|
|
|
+ map.put("jcrl", jcrlCount);
|
|
|
+ map.put("notOnlineCount", notOnlineCount);
|
|
|
+ //map.put("threeMonthNotOnlineCount", threeMonthNotOnlineCount);
|
|
|
+ map.put("onlineCount", onlineCount);
|
|
|
+ return new ResultMsg<Object>(SystemConstant.RESULT_STATUS_SUCCESS, I18nConfig.getValue(local, "tips", "query_success"), map);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResultMsg<Object> getMaxMinAvgP(String local, Long orgId,boolean isService,String date) {
|
|
|
+ CompanyDateM companyDateM=new CompanyDateM();
|
|
|
+ if(isService){
|
|
|
+ List<Org> orgList = orgDao.getListByService(orgId);
|
|
|
+ int k = 0;
|
|
|
+ StringBuffer orgIds = new StringBuffer();
|
|
|
+ for (Org o : orgList) {
|
|
|
+ if (k < orgList.size() - 1) {
|
|
|
+ orgIds.append(o.getId()).append(",");
|
|
|
+ } else {
|
|
|
+ orgIds.append(o.getId());
|
|
|
+ }
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ List<CompanyDateM> list = companyDateMDao.selectByCompanyIds(orgIds.toString(), date);
|
|
|
+ BigDecimal avgTotal = new BigDecimal(0);
|
|
|
+ companyDateM.setCompanyId(orgId);
|
|
|
+ for (CompanyDateM cm : list){
|
|
|
+ if(isMax(companyDateM.getMmax(),cm.getMmax())){
|
|
|
+ companyDateM.setMmax(cm.getMmax());
|
|
|
+ companyDateM.setMaxTime(cm.getMaxTime());
|
|
|
+ }
|
|
|
+ if(isMin(companyDateM.getMmin(),cm.getMmin())){
|
|
|
+ companyDateM.setMmin(cm.getMmin());
|
|
|
+ companyDateM.setMinTime(cm.getMinTime());
|
|
|
+ }
|
|
|
+ avgTotal= avgTotal.add(cm.getMavg());
|
|
|
+ }
|
|
|
+ if(avgTotal.compareTo(new BigDecimal(0))>0){
|
|
|
+ companyDateM.setMavg(avgTotal.divide(new BigDecimal(list.size()),2,BigDecimal.ROUND_HALF_UP));
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{
|
|
|
+ companyDateM = companyDateMDao.selectByCompanyId(orgId, date);
|
|
|
+ }
|
|
|
+
|
|
|
+ return new ResultMsg<Object>(SystemConstant.RESULT_STATUS_SUCCESS, I18nConfig.getValue(local, "tips", "query_success"), companyDateM);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResultMsg<Object> getWarningList(Long orgId,boolean isService,int pageNo, int pageSize){
|
|
|
+ ResultMsg<Object> result = new ResultMsg<Object>();
|
|
|
+ result.setStatus(SystemConstant.RESULT_STATUS_SUCCESS);
|
|
|
+ Org org= orgDao.selectOne(orgId);
|
|
|
+ List<Org> orgList;
|
|
|
+
|
|
|
+ if(isService){
|
|
|
+ orgList=orgDao.getListByService(orgId);
|
|
|
+ }else{
|
|
|
+ orgList=new ArrayList<Org>();
|
|
|
+ orgList.add(org);
|
|
|
+ }
|
|
|
+ StringBuffer powerUserIds = new StringBuffer();
|
|
|
+ int k = 0;
|
|
|
+ for (Org o : orgList) {
|
|
|
+ if (k < orgList.size() - 1) {
|
|
|
+ powerUserIds.append(o.getId()).append(",");
|
|
|
+ } else {
|
|
|
+ powerUserIds.append(o.getId());
|
|
|
+ }
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ OnlineDataOverwarningInfo condition = new OnlineDataOverwarningInfo();
|
|
|
+ SimpleDateFormat daySdf = new SimpleDateFormat("yyyyMMdd");
|
|
|
+ condition.setWarningTimeStart(getStartTime(daySdf.format(new Date())));
|
|
|
+ Page<Map<String, Object>> warningList = odoiDao.getWarningList(powerUserIds.toString(), isService, condition, pageNo, pageSize);
|
|
|
+
|
|
|
+
|
|
|
+ List<OnlineDataOverwarningInfoVo> dataList = new ArrayList<OnlineDataOverwarningInfoVo>();
|
|
|
+ Map<String, Monitor> monitorMap = new HashMap<String, Monitor>();
|
|
|
+ for (Map<String,Object> map : warningList.getRows()) {
|
|
|
+ OnlineDataOverwarningInfoVo vo = new OnlineDataOverwarningInfoVo();
|
|
|
+ Long companyId = DataUtils.getLong(map.get("companyId"));
|
|
|
+ for (Org o : orgList){
|
|
|
+ if(o.getId().equals(companyId)){
|
|
|
+ vo.setCompanyName(o.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setName(DataUtils.getString(map.get("name")));
|
|
|
+ vo.setTerminalId(DataUtils.getString(map.get("terminalId")));
|
|
|
+ vo.setWarningInfoId(DataUtils.getInteger(map.get("warningInfoId")));
|
|
|
+ vo.setOverFlag(DataUtils.getInteger(map.get("overFlag")));
|
|
|
+ vo.setWarningTimeStart(DataUtils.getLong(map.get("warningTimeStart")));
|
|
|
+ vo.setWarningTimeEnd(DataUtils.getLong(map.get("warningTimeEnd")));
|
|
|
+// vo.setValue(DataUtils.getDouble(map.get("value")));
|
|
|
+// vo.setValueMax(DataUtils.getDouble(map.get("valueMax")));
|
|
|
+// vo.setValueMin(DataUtils.getDouble(map.get("valueMin")));
|
|
|
+ vo.setReadFlag(DataUtils.getInteger(map.get("readFlag")));
|
|
|
+
|
|
|
+ if(!monitorMap.containsKey(vo.getTerminalId())) {
|
|
|
+ monitorMap.put(vo.getTerminalId(), monitorDao.selectByTerminalId(vo.getTerminalId()));
|
|
|
+ }
|
|
|
+ BigDecimal value = new BigDecimal(DataUtils.getDouble(map.get("value")));
|
|
|
+ BigDecimal valueMax = new BigDecimal(DataUtils.getDouble(map.get("valueMax")));
|
|
|
+ BigDecimal valueMin = new BigDecimal(DataUtils.getDouble(map.get("valueMin")));
|
|
|
+ Monitor m = monitorMap.get(vo.getTerminalId());
|
|
|
+ if(vo.getWarningInfoId() == 1 || vo.getWarningInfoId() == 2 || vo.getWarningInfoId() == 3
|
|
|
+ || vo.getWarningInfoId() == 5 || vo.getWarningInfoId() == 6 || vo.getWarningInfoId() == 7){
|
|
|
+ vo.setValue(NumberUtils.round(AnalDataCtPtUtil.addPt(m, value), 2).doubleValue());
|
|
|
+ vo.setValueMax(NumberUtils.round(AnalDataCtPtUtil.addPt(m, valueMax), 2).doubleValue());
|
|
|
+ vo.setValueMin(NumberUtils.round(AnalDataCtPtUtil.addPt(m, valueMin), 2).doubleValue());
|
|
|
+ } else if(vo.getWarningInfoId() == 9 || vo.getWarningInfoId() == 10 || vo.getWarningInfoId() == 11
|
|
|
+ || vo.getWarningInfoId() == 13) {
|
|
|
+ vo.setValue(NumberUtils.round(AnalDataCtPtUtil.addCt(m, value), 2).doubleValue());
|
|
|
+ vo.setValueMax(NumberUtils.round(AnalDataCtPtUtil.addCt(m, valueMax), 2).doubleValue());
|
|
|
+ vo.setValueMin(NumberUtils.round(AnalDataCtPtUtil.addCt(m, valueMin), 2).doubleValue());
|
|
|
+ } else if(vo.getWarningInfoId() == 14 || vo.getWarningInfoId() == 15 || vo.getWarningInfoId() == 16
|
|
|
+ ||vo.getWarningInfoId() == 17) {
|
|
|
+ vo.setValue(NumberUtils.round(AnalDataCtPtUtil.ctpt(m, value), 2).doubleValue());
|
|
|
+ vo.setValueMax(NumberUtils.round(AnalDataCtPtUtil.ctpt(m, valueMax), 2).doubleValue());
|
|
|
+ vo.setValueMin(NumberUtils.round(AnalDataCtPtUtil.ctpt(m, valueMin), 2).doubleValue());
|
|
|
+ } else {
|
|
|
+ vo.setValue(NumberUtils.round(value.doubleValue(), 2));
|
|
|
+ vo.setValueMax(NumberUtils.round(valueMax.doubleValue(), 2));
|
|
|
+ vo.setValueMin(NumberUtils.round(valueMin.doubleValue(), 2));
|
|
|
+ }
|
|
|
+
|
|
|
+ dataList.add(vo);
|
|
|
+ }
|
|
|
+ result.setData(dataList);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public ResultMsg<?> getCompanyLoadData(String local, Long orgId,boolean isService, String date1, String date2, String date3){
|
|
|
+ Org org= orgDao.selectOne(orgId);
|
|
|
+ List<Org> orgList;
|
|
|
+
|
|
|
+ if(isService){
|
|
|
+ orgList=orgDao.getListByService(orgId);
|
|
|
+ }else{
|
|
|
+ orgList=new ArrayList<Org>();
|
|
|
+ orgList.add(org);
|
|
|
+ }
|
|
|
+ //获取日期1的负荷波动偏差
|
|
|
+ List<Map<String, Object>> todayData = new ArrayList<Map<String, Object>>();
|
|
|
+ //获取日期2的负荷波动偏差
|
|
|
+ List<Map<String, Object>> yesterdayData = new ArrayList<Map<String, Object>>();
|
|
|
+ //获取日期3的负荷波动偏差
|
|
|
+ List<Map<String, Object>> beforedayData = new ArrayList<Map<String, Object>>();
|
|
|
+ if (!orgList.isEmpty()) {
|
|
|
+ Map<Long, Org> orgMap = new HashMap<Long, Org>();
|
|
|
+ for (Org o : orgList) {
|
|
|
+ orgMap.put(DataUtils.getLong(o.getId()), o);
|
|
|
+ }
|
|
|
+ List<Long> companyIds = new ArrayList<Long>(orgMap.keySet());
|
|
|
+ //查询日期1
|
|
|
+ List<CompanyOnline> firstdayCompanyOnlineList = this.getByCompanyIdsAndDate(companyIds, date1);
|
|
|
+ //查询日期2
|
|
|
+ List<CompanyOnline> seconddayCompanyOnlineList = this.getByCompanyIdsAndDate(companyIds, date2);
|
|
|
+ //查询日期3
|
|
|
+ List<CompanyOnline> thirddayCompanyOnlineList = this.getByCompanyIdsAndDate(companyIds, date3);
|
|
|
+
|
|
|
+ todayData = this.getLoadData(date1, firstdayCompanyOnlineList);
|
|
|
+ yesterdayData = this.getLoadData(date2, seconddayCompanyOnlineList);
|
|
|
+ beforedayData = this.getLoadData(date3, thirddayCompanyOnlineList);
|
|
|
+ }
|
|
|
+ Map<String, List<Map<String, Object>>> chartData = new HashMap<String, List<Map<String, Object>>>();
|
|
|
+ chartData.put("date1", todayData);
|
|
|
+ chartData.put("date2", yesterdayData);
|
|
|
+ chartData.put("date3", beforedayData);
|
|
|
+ return new ResultMsg<Object>(SystemConstant.RESULT_STATUS_SUCCESS, I18nConfig.getValue(local, "tips", "query_success"), chartData);
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<CompanyOnline> getByCompanyIdsAndDate(List<Long> companyIds, String date) {
|
|
|
+ long startTime = new Long(date + "000000");
|
|
|
+ long endTime = new Long(date + "235500");
|
|
|
+ List<CompanyOnline> data = companyOnlineDao.selectByCompanyIdsAndGetTime(companyIds, startTime, endTime);
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<Map<String, Object>> getLoadData(String date, List<CompanyOnline> companyOnlineList) {
|
|
|
+ List<Map<String, Object>> datas = getDayData(date);
|
|
|
+ if (companyOnlineList == null || companyOnlineList.size() == 0) {
|
|
|
+ return datas;
|
|
|
+ }
|
|
|
+ Map<Long, CompanyOnline> companyOnlineMap = new HashMap<Long, CompanyOnline>();
|
|
|
+ for (CompanyOnline c : companyOnlineList) {
|
|
|
+ companyOnlineMap.put(c.getGetTime(), c);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (Map<String, Object> data : datas) {
|
|
|
+ long x = (Long) data.get("timestamp");
|
|
|
+ for (Long getTime : companyOnlineMap.keySet()) {
|
|
|
+ BigDecimal p = companyOnlineMap.get(getTime).getP();
|
|
|
+ if (p == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ Long time = getStampe(getTime);
|
|
|
+ if (time == x) {
|
|
|
+ data.put("y", p.setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return datas;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private List<Map<String, Object>> getDayData(String day) {
|
|
|
+ List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
|
|
|
+ long startTime = getStartTime(day);
|
|
|
+ //for (int i = 0; i < 288; i++) {}
|
|
|
+ for (int i = 0; i < 48; i++) {
|
|
|
+ Map<String, Object> map = new HashMap<String, Object>();
|
|
|
+ long timestamp = startTime + 30L * 60L * 1000L * i;
|
|
|
+ long x = 30L * 60L * 1000L * i;
|
|
|
+ map.put("x", x);
|
|
|
+ map.put("timestamp", timestamp);
|
|
|
+ map.put("y", new BigDecimal(-9999));
|
|
|
+ data.add(map);
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ private long getStartTime(String day) {
|
|
|
+ long startTime = 0L;
|
|
|
+ if (day.length() == 4) {
|
|
|
+ day = day + "01000000";
|
|
|
+ } else {
|
|
|
+ day = day + "000000";
|
|
|
+ }
|
|
|
+ SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMddHHmmss");
|
|
|
+ try {
|
|
|
+ Date date = format1.parse(day);
|
|
|
+ startTime = date.getTime();
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return startTime;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private long getStampe(long time) {
|
|
|
+ long timeStamp = 0L;
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
|
|
|
+ try {
|
|
|
+ timeStamp = format.parse(time + "").getTime();
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return timeStamp;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 判断是否要替换最小值
|
|
|
+ * @param ago
|
|
|
+ * @param now
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean isMin(BigDecimal ago, BigDecimal now){
|
|
|
+ if(ago == null){
|
|
|
+ return now != null;
|
|
|
+ }else{
|
|
|
+ if(now != null){
|
|
|
+
|
|
|
+ return ago.compareTo(now) > 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断是否要替换最大值
|
|
|
+ * @param ago
|
|
|
+ * @param now
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean isMax(BigDecimal ago,BigDecimal now){
|
|
|
+ if(ago == null){
|
|
|
+ return now != null;
|
|
|
+ }else{
|
|
|
+ if(now != null){
|
|
|
+ return ago.compareTo(now) < 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|