From 2bad8336e2c14ffd85403c14ad254916146b6a5e Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Tue, 13 Mar 2018 15:11:31 +0800
Subject: [PATCH] 报表模块

---
 src/main/java/com/moral/service/HistoryMinutelyService.java                             |    4 
 src/main/java/com/moral/service/OrganizationService.java                                |    2 
 src/main/java/com/moral/entity/charts/LineChartCriteria.java                            |   12 +
 src/main/java/com/moral/controller/ReportController.java                                |   13 +
 src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java                      |    4 
 src/main/java/com/moral/service/impl/AlarmConfigServiceImpl.java                        |    8 
 src/main/java/com/moral/entity/charts/AreaRange.java                                    |    5 
 src/main/java/com/moral/security/endpoint/RefreshTokenEndpoint.java                     |    2 
 src/main/java/com/moral/service/impl/SensorServiceImpl.java                             |    2 
 src/main/java/com/moral/controller/OrganizationController.java                          |    9 +
 src/main/java/com/moral/entity/charts/TimePeriod.java                                   |   12 +
 src/main/java/com/moral/entity/charts/DataCondition.java                                |   13 +
 src/main/java/com/moral/entity/charts/PairData.java                                     |    9 +
 src/main/java/com/moral/security/config/WebSecurityConfig.java                          |    1 
 src/main/java/com/moral/security/auth/jwt/SkipPathRequestMatcher.java                   |    4 
 src/main/java/com/moral/mapper/HistoryMinutelyMapper.java                               |    7 
 src/test/java/com/moral/ScreenApiApplicationTests.java                                  |   14 ++
 src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationSuccessHandler.java |    7 
 src/main/resources/mapper/HistoryMinutelyMapper.xml                                     |   57 +++++++
 src/test/java/com/moral/JavaBeanToJsonOutPrint.java                                     |   45 ++++-
 src/main/java/com/moral/common/util/ReportTimeFormat.java                               |   72 ++++++++++
 src/main/java/com/moral/service/impl/OrganizationServiceImpl.java                       |    7 +
 src/main/java/com/moral/entity/charts/TimeUnits.java                                    |    5 
 src/main/resources/application.yml                                                      |   19 +-
 src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java                    |   73 ++++++++++
 25 files changed, 360 insertions(+), 46 deletions(-)

diff --git a/src/main/java/com/moral/common/util/ReportTimeFormat.java b/src/main/java/com/moral/common/util/ReportTimeFormat.java
new file mode 100644
index 0000000..47aa811
--- /dev/null
+++ b/src/main/java/com/moral/common/util/ReportTimeFormat.java
@@ -0,0 +1,72 @@
+package com.moral.common.util;
+
+import com.moral.entity.charts.TimePeriod;
+import com.moral.entity.charts.TimeUnits;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+public class ReportTimeFormat {
+       public static String toMySqlTimeFormat(TimeUnits timeUnits){
+           switch (timeUnits){
+               case YEAR: return "%Y";
+               case MONTH: return "%Y-%m";
+               case DAY: return "%Y-%m-%d";
+               case HOUR: return "%Y-%m-%d/%H";
+               case MINUTE:return "%Y-%m-%d/%H:%i";
+           }
+           return "%Y-%m-%d%H:%i:%s";
+       }
+       public static String toMySqlActualTimeFormat(TimeUnits timeUnits){
+           switch (timeUnits){
+               case YEAR: return "%Y";
+               case MONTH: return "%m";
+               case DAY: return "%d";
+               case HOUR: return "%H";
+               case MINUTE:return "%i";
+           }
+           return "%s";
+       }
+       public static List<String> makeTimeList(TimePeriod timePeriod){
+           Calendar start = Calendar.getInstance();
+           start.setTime(timePeriod.getStartTime());
+           Calendar end = Calendar.getInstance();
+           end.setTime(timePeriod.getEndTime());
+           List<String> timeList = new ArrayList<>();
+           String formatStyle = "";
+           int timeUnit = 0;
+           switch (timePeriod.getTimeUnits()){
+               case YEAR: formatStyle ="yyyy";
+                   timeUnit = Calendar.YEAR;break;
+               case MONTH: formatStyle ="yyyy-MM";
+                   timeUnit = Calendar.MONTH;break;
+               case DAY: formatStyle ="yyyy-MM-dd";
+                   timeUnit = Calendar.DAY_OF_YEAR;break;
+               case HOUR: formatStyle ="yyyy-MM-dd/HH";
+                   timeUnit = Calendar.HOUR;break;
+               case MINUTE: formatStyle ="yyyy-MM-dd/HH:mm";
+                   timeUnit = Calendar.MINUTE;break;
+           }
+           do{
+               String time = dateToString(start.getTime(),formatStyle);
+               timeList.add(time);
+               start.add(timeUnit,1);
+           }
+           while (start.getTimeInMillis()<end.getTimeInMillis());
+           return timeList;
+       }
+     /**"yyyy-MM-dd hh:mm:ss"
+     * ������������date���������������������������������������������
+     * @param date
+     * @return
+     */
+    private static String dateToString(Date date,String formatStyle) {
+        SimpleDateFormat format = new SimpleDateFormat(formatStyle);
+        String dateFormat = format.format(date);
+        return dateFormat;
+    }
+
+}
diff --git a/src/main/java/com/moral/controller/OrganizationController.java b/src/main/java/com/moral/controller/OrganizationController.java
index bfeae2d..334c2f4 100644
--- a/src/main/java/com/moral/controller/OrganizationController.java
+++ b/src/main/java/com/moral/controller/OrganizationController.java
@@ -3,6 +3,8 @@
 import com.moral.common.bean.PageBean;
 import com.moral.common.bean.ResultBean;
 import com.moral.entity.Organization;
+import com.moral.security.auth.JwtAuthenticationToken;
+import com.moral.security.model.UserContext;
 import com.moral.service.OrganizationService;
 import org.springframework.web.bind.annotation.*;
 
@@ -37,5 +39,10 @@
 		List<Organization> organizations = organizationService.getOrganizationsByName(name);
 		return new ResultBean<List<Organization>>(organizations);
 	}
-
+    @GetMapping("get-my-org")
+    public ResultBean<Organization> getMyOrganization(JwtAuthenticationToken token){
+        UserContext userContext = token.getPrincipal();
+        Organization organization = organizationService.getOrganizationsById(userContext.getOrganizationId());
+        return new ResultBean<>(organization);
+    }
 }
diff --git a/src/main/java/com/moral/controller/ReportController.java b/src/main/java/com/moral/controller/ReportController.java
index 72bfd3a..f2058a8 100644
--- a/src/main/java/com/moral/controller/ReportController.java
+++ b/src/main/java/com/moral/controller/ReportController.java
@@ -12,10 +12,10 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.alibaba.fastjson.JSON;
+import com.moral.entity.charts.LineChartCriteria;
+import com.moral.entity.charts.PairData;
+import org.springframework.web.bind.annotation.*;
 
 import com.moral.common.bean.ResultBean;
 import com.moral.service.HistoryMinutelyService;
@@ -34,7 +34,10 @@
 		Map<String, List<Object>> demo = historyMinutelyService.getCompareReport(parameters); 
 		return new ResultBean<Map<String,List<Object>>>(demo);
 	}
-
+	@PostMapping("line-chart")
+	public ResultBean <List<List<PairData>>> lineChart(@RequestBody LineChartCriteria lineChartCriteria){
+		return  new ResultBean<>(historyMinutelyService.queryLineChartDateByCrieria(lineChartCriteria));
+	}
 	@GetMapping("excel")
 	public ResultBean<Boolean> getExcelReport(HttpServletRequest request,HttpServletResponse response) throws Exception {
 		Map<String, Object> parameters = getParametersStartingWith(request, null);
diff --git a/src/main/java/com/moral/entity/charts/AreaRange.java b/src/main/java/com/moral/entity/charts/AreaRange.java
new file mode 100644
index 0000000..0f0915c
--- /dev/null
+++ b/src/main/java/com/moral/entity/charts/AreaRange.java
@@ -0,0 +1,5 @@
+package com.moral.entity.charts;
+
+public enum AreaRange {
+    PROVINCE,CITY,AREA,MONITORPOINT,DEVICE
+}
diff --git a/src/main/java/com/moral/entity/charts/DataCondition.java b/src/main/java/com/moral/entity/charts/DataCondition.java
new file mode 100644
index 0000000..65bf0f8
--- /dev/null
+++ b/src/main/java/com/moral/entity/charts/DataCondition.java
@@ -0,0 +1,13 @@
+package com.moral.entity.charts;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class DataCondition {
+      private TimeUnits timeUnits;//������
+      private Integer actualTime;//������������
+      private AreaRange areaRange;//������������
+      private Integer areaRangeId;//���������������ID
+}
diff --git a/src/main/java/com/moral/entity/charts/LineChartCriteria.java b/src/main/java/com/moral/entity/charts/LineChartCriteria.java
new file mode 100644
index 0000000..589a25e
--- /dev/null
+++ b/src/main/java/com/moral/entity/charts/LineChartCriteria.java
@@ -0,0 +1,12 @@
+package com.moral.entity.charts;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class LineChartCriteria {
+      private String sensorKey;//���������������
+      private TimePeriod timePeriod;//������������
+      private List<DataCondition> dataConditions;//������������������
+}
diff --git a/src/main/java/com/moral/entity/charts/PairData.java b/src/main/java/com/moral/entity/charts/PairData.java
new file mode 100644
index 0000000..d385a18
--- /dev/null
+++ b/src/main/java/com/moral/entity/charts/PairData.java
@@ -0,0 +1,9 @@
+package com.moral.entity.charts;
+
+import lombok.Data;
+
+@Data
+public class PairData {
+    private String category ;
+    private Double Value;
+}
diff --git a/src/main/java/com/moral/entity/charts/TimePeriod.java b/src/main/java/com/moral/entity/charts/TimePeriod.java
new file mode 100644
index 0000000..aec4a62
--- /dev/null
+++ b/src/main/java/com/moral/entity/charts/TimePeriod.java
@@ -0,0 +1,12 @@
+package com.moral.entity.charts;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class TimePeriod {
+       private TimeUnits timeUnits;//������������
+       private Date startTime;//������������
+       private Date endTime;//������������
+}
diff --git a/src/main/java/com/moral/entity/charts/TimeUnits.java b/src/main/java/com/moral/entity/charts/TimeUnits.java
new file mode 100644
index 0000000..92ed288
--- /dev/null
+++ b/src/main/java/com/moral/entity/charts/TimeUnits.java
@@ -0,0 +1,5 @@
+package com.moral.entity.charts;
+
+public enum  TimeUnits {
+    YEAR,MONTH,DAY,HOUR,MINUTE
+}
diff --git a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
index cfc8941..7149776 100644
--- a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
@@ -1,5 +1,10 @@
 package com.moral.mapper;
 
+import com.moral.entity.charts.DataCondition;
+import com.moral.entity.charts.PairData;
+import com.moral.entity.charts.TimePeriod;
+import org.apache.ibatis.annotations.Param;
+
 import java.util.List;
 import java.util.Map;
 
@@ -8,5 +13,5 @@
 	Map<String, Double> getSersionAvgByDevice(Map<String, Object> parameters);
 
 	List<Map<String, Object>> getMonitorPointOrDeviceAvgData(Map<String, Object> parameters);
-
+    List<PairData> selectLineChartDateByCrieria(@Param("sensorKey") String sensorKey, @Param("timePeriod") TimePeriod timePeriod, @Param("dataCondition") DataCondition dataCondition);
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/security/auth/jwt/SkipPathRequestMatcher.java b/src/main/java/com/moral/security/auth/jwt/SkipPathRequestMatcher.java
index 7c747d8..a0302ed 100644
--- a/src/main/java/com/moral/security/auth/jwt/SkipPathRequestMatcher.java
+++ b/src/main/java/com/moral/security/auth/jwt/SkipPathRequestMatcher.java
@@ -7,6 +7,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -21,7 +22,8 @@
     private RequestMatcher processingMatcher;
     
     public SkipPathRequestMatcher(List<String> pathsToSkip, String processingPath) {
-        Assert.notNull(pathsToSkip);
+        pathsToSkip = Optional.of(pathsToSkip)
+        .orElseThrow(()-> new NullPointerException("In Method  SkipPathRequestMatcher,Param pathsToSkip can't be null."));
         List<RequestMatcher> m = pathsToSkip.stream().map(path -> new AntPathRequestMatcher(path)).collect(Collectors.toList());
         matchers = new OrRequestMatcher(m);
         processingMatcher = new AntPathRequestMatcher(processingPath);
diff --git a/src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationSuccessHandler.java b/src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationSuccessHandler.java
index 02c6d29..71db7f1 100644
--- a/src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationSuccessHandler.java
+++ b/src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationSuccessHandler.java
@@ -1,6 +1,7 @@
 package com.moral.security.auth.login;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.moral.security.config.JwtSettings;
 import com.moral.security.model.UserContext;
 import com.moral.security.model.token.JwtToken;
 import com.moral.security.model.token.JwtTokenFactory;
@@ -17,6 +18,7 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -31,7 +33,8 @@
 public class LoginAwareAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
     private final ObjectMapper mapper;
     private final JwtTokenFactory tokenFactory;
-
+    @Autowired
+    private JwtSettings jwtSettings;
     @Autowired
     public LoginAwareAuthenticationSuccessHandler(final ObjectMapper mapper, final JwtTokenFactory tokenFactory) {
         this.mapper = mapper;
@@ -49,7 +52,7 @@
         Map<String, String> tokenMap = new HashMap<String, String>();
         tokenMap.put("token", accessToken.getToken());
         tokenMap.put("refreshToken", refreshToken.getToken());
-
+        tokenMap.put("expiredTime",jwtSettings.getTokenExpirationTime().toString());
         response.setStatus(HttpStatus.OK.value());
         response.setContentType(MediaType.APPLICATION_JSON_VALUE);
         mapper.writeValue(response.getWriter(), tokenMap);
diff --git a/src/main/java/com/moral/security/config/WebSecurityConfig.java b/src/main/java/com/moral/security/config/WebSecurityConfig.java
index c04d95d..c237db9 100644
--- a/src/main/java/com/moral/security/config/WebSecurityConfig.java
+++ b/src/main/java/com/moral/security/config/WebSecurityConfig.java
@@ -40,6 +40,7 @@
 @EnableWebSecurity
 public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
     public static final String AUTHENTICATION_HEADER_NAME = "X-Authorization";
+    public static final String REFRESH_TOKEN_HEADER_NAME = "X-Refrsh-Token";
     public static final String AUTHENTICATION_PARAM_NAME = "_token";
     public static final String AUTHENTICATION_URL = "/auth/login";
     public static final String REFRESH_TOKEN_URL = "/auth/token";
diff --git a/src/main/java/com/moral/security/endpoint/RefreshTokenEndpoint.java b/src/main/java/com/moral/security/endpoint/RefreshTokenEndpoint.java
index f965e0f..2ad722d 100644
--- a/src/main/java/com/moral/security/endpoint/RefreshTokenEndpoint.java
+++ b/src/main/java/com/moral/security/endpoint/RefreshTokenEndpoint.java
@@ -56,7 +56,7 @@
     @RequestMapping(value="/auth/token", method= RequestMethod.GET, produces={ MediaType.APPLICATION_JSON_VALUE })
     public @ResponseBody
     JwtToken refreshToken(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
-        String tokenPayload = tokenExtractor.extract(request.getHeader(WebSecurityConfig.AUTHENTICATION_HEADER_NAME));
+        String tokenPayload = tokenExtractor.extract(request.getHeader(WebSecurityConfig.REFRESH_TOKEN_HEADER_NAME));
         
         RawAccessJwtToken rawToken = new RawAccessJwtToken(tokenPayload);
         RefreshToken refreshToken = RefreshToken.create(rawToken, jwtSettings.getTokenSigningKey()).orElseThrow(() -> new InvalidJwtToken());
diff --git a/src/main/java/com/moral/service/HistoryMinutelyService.java b/src/main/java/com/moral/service/HistoryMinutelyService.java
index 7a1ca38..ec3f36d 100644
--- a/src/main/java/com/moral/service/HistoryMinutelyService.java
+++ b/src/main/java/com/moral/service/HistoryMinutelyService.java
@@ -1,5 +1,8 @@
 package com.moral.service;
 
+import com.moral.entity.charts.LineChartCriteria;
+import com.moral.entity.charts.PairData;
+
 import java.util.List;
 import java.util.Map;
 
@@ -14,4 +17,5 @@
 	Map<String, Object> getMonthAverageBySensor(Map<String, Object> parameters);
 
 
+    List<List<PairData>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria);
 }
diff --git a/src/main/java/com/moral/service/OrganizationService.java b/src/main/java/com/moral/service/OrganizationService.java
index 4a243d9..e210565 100644
--- a/src/main/java/com/moral/service/OrganizationService.java
+++ b/src/main/java/com/moral/service/OrganizationService.java
@@ -20,5 +20,5 @@
 	public void deleteByIds(Integer... ids);
 	
 	List<Organization> getOrganizationsByName(String name);
-
+    public Organization getOrganizationsById(int id);
 }
diff --git a/src/main/java/com/moral/service/impl/AlarmConfigServiceImpl.java b/src/main/java/com/moral/service/impl/AlarmConfigServiceImpl.java
index 8b9651c..24ca266 100644
--- a/src/main/java/com/moral/service/impl/AlarmConfigServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/AlarmConfigServiceImpl.java
@@ -50,11 +50,11 @@
     public Optional queryValueByOrganizationId(int organizationId) {
         String key = RedisUtils.getAlarmKey(organizationId);
         AlarmConfigValue alarmConfigValue = redisUtils.get(key,new TypeReference<AlarmConfigValue>(){});
-        if(alarmConfigValue==null){
+        if(alarmConfigValue==null) {
             AlarmConfig alarmConfig = alarmConfigMapper.selectByOrganizationId(organizationId);
-            if(alarmConfig!=null&&alarmConfig.getValue()!=null){
-                alarmConfigValue  = alarmConfig.getValue();
-            }else{
+            if (alarmConfig != null && alarmConfig.getValue() != null) {
+                alarmConfigValue = alarmConfig.getValue();
+            } else {
                 alarmConfigValue = getDefaultAlarmConfigValue();
             }
         }
diff --git a/src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java
index ac912aa..9f15f47 100644
--- a/src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceVersionServiceImpl.java
@@ -1,19 +1,15 @@
 package com.moral.service.impl;
 
 import com.moral.common.bean.PageBean;
-import com.moral.common.util.ExampleUtil;
 import com.moral.common.util.MyBatisBaseMapUtil;
 import com.moral.entity.DeviceVersion;
 import com.moral.entity.DeviceVersionSensor;
 import com.moral.mapper.DeviceVersionMapper;
 import com.moral.mapper.DeviceVersionSensorMapper;
 import com.moral.service.DeviceVersionService;
-import org.springframework.data.mongodb.core.aggregation.ArrayOperators;
 import org.springframework.stereotype.Service;
 import tk.mybatis.mapper.entity.Example;
-
 import javax.annotation.Resource;
-import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
index 4ee5b0f..fab186f 100644
--- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -27,9 +27,16 @@
 import java.util.concurrent.ExecutorCompletionService;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import com.moral.common.util.ReportTimeFormat;
+import com.moral.entity.charts.DataCondition;
+import com.moral.entity.charts.LineChartCriteria;
+import com.moral.entity.charts.PairData;
+import com.moral.entity.charts.TimePeriod;
 import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
@@ -435,4 +442,70 @@
 		return result;
 	}
 
+	/**
+	 * ������������������������������������������������������������������
+	 * @param lineChartCriteria
+	 * @return
+	 */
+	@Override
+	public List<List<PairData>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria){
+        String sensorKey = lineChartCriteria.getSensorKey();
+        TimePeriod timePeriod = lineChartCriteria.getTimePeriod();
+		List<DataCondition> dataConditionList = lineChartCriteria.getDataConditions();
+		List<List<PairData>> list =  new ArrayList<>();
+		dataConditionList.forEach(item -> {
+			List<PairData> pairDataList =  queryOneLineChartDateByCrieria(sensorKey,timePeriod,item);
+			list.add(pairDataList);
+		});
+		return  list;
+	}
+
+	/**
+	 * ������������������������������������������������������������������
+	 * @param sensorKey
+	 * @param timePeriod
+	 * @param dataCondition
+	 * @return
+	 */
+	public List<PairData> queryOneLineChartDateByCrieria(String sensorKey, TimePeriod timePeriod, DataCondition dataCondition){
+		List<String> timeList = ReportTimeFormat.makeTimeList(timePeriod);
+		List<PairData> lineChartDatas = historyMinutelyMapper.selectLineChartDateByCrieria(sensorKey,timePeriod,dataCondition);
+		List<PairData> lineChartDatasWithEmpty = new ArrayList<>();
+		int m = 0;
+		int dataLength = lineChartDatas.size()-1;
+		m = dataLength>-1?0:-1;
+		if(m>-1){
+			for(int n =0;n<timeList.size();n++){
+				String time = timeList.get(n);
+				if(m>-1){
+					PairData pairData = lineChartDatas.get(m);
+					String keyTime = pairData.getCategory();
+					if(time.equals(keyTime)){
+						lineChartDatasWithEmpty.add(pairData);
+						m = m<dataLength ? m+1 : -1;
+					}else{
+						lineChartDatasWithEmpty.add(generateEmptyData(time));
+					}
+				}else {
+					    lineChartDatasWithEmpty.add(generateEmptyData(time));
+				}
+
+			}
+		}else{
+			fillEmptyDataToList(timeList,lineChartDatasWithEmpty);
+		}
+		return  lineChartDatasWithEmpty;
+	}
+	private PairData generateEmptyData(String time) {
+		PairData pairData = new PairData();
+		pairData.setCategory(time);
+		pairData.setValue(null);
+		return pairData;
+	}
+	private void fillEmptyDataToList(List<String> timeList,List<PairData> lineChartDatasWithEmpty){
+        timeList.forEach( time ->{
+			PairData pairData = generateEmptyData(time);
+        	lineChartDatasWithEmpty.add(pairData);
+		});
+	}
 }
diff --git a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
index 2442dc2..f38fe9e 100644
--- a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
@@ -119,4 +119,11 @@
 		return organizations;
 	}
 
+	@Override
+	public Organization getOrganizationsById(int id) {
+    	Example example = new Example(ENTITY_CLASS);
+    	example.or().andEqualTo("id",id);
+    	List<Organization> organizationList = organizationMapper.selectWithAreaNameByExample(example);
+		return organizationList.size()>0?organizationList.get(0):null;
+	}
 }
diff --git a/src/main/java/com/moral/service/impl/SensorServiceImpl.java b/src/main/java/com/moral/service/impl/SensorServiceImpl.java
index a628a6f..727f319 100644
--- a/src/main/java/com/moral/service/impl/SensorServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/SensorServiceImpl.java
@@ -27,7 +27,7 @@
     public List<Sensor> queryAll(){
         return sensorMapper.selectByExample(null);
     }
-    public PageBean queryByPageBean(PageBean pageBean){
+    public PageBean<Sensor> queryByPageBean(PageBean pageBean){
         return MyBatisBaseMapUtil.queryPage(sensorMapper,pageBean,ENTITY_CLASS);
     }
     @Override
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 6967306..0580053 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,14 +1,18 @@
+
 server:
-  port: 8001
+  port: 8080
   session-timeout: 30
   tomcat.max-threads: 0
   tomcat.uri-encoding: UTF-8
+  jsp-servlet:
+    init-parameters:
+            development: true
 
 spring:
   thymeleaf:
     cache: false
   datasource:
-    url: jdbc:mysql://47.96.19.115:3306/monitor_db?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
+    url: jdbc:mysql://47.96.26.152:3306/monitor_db?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
     username: root
     password: xOlx8z9L7Pt6y9YI
     #driver-class-name: com.mysql.cj.jdbc.Driver
@@ -60,9 +64,9 @@
       min-idle: 0
 
 
-  data:
-    mongodb:
-      uri: mongodb://47.96.171.62:27017/monitor
+#  data:
+#    mongodb:
+#      uri: mongodb://47.96.171.62:27017/monitor
 
 mybatis:
   mapper-locations: classpath*:/mapper/*Mapper.xml
@@ -71,7 +75,8 @@
 spring.profiles: default
 
 moral.security.jwt:
-  tokenExpirationTime: 15 # Number of minutes
+  tokenExpirationTime: 5 # Number of minutes
   refreshTokenExpTime: 60 # Minutes
   tokenIssuer: http://monitor.7drlb.com
-  tokenSigningKey: xm9EV6Hy5RAFL8EEACIDAwQus
\ No newline at end of file
+  tokenSigningKey: xm9EV6Hy5RAFL8EEACIDAwQus
+
diff --git a/src/main/resources/mapper/HistoryMinutelyMapper.xml b/src/main/resources/mapper/HistoryMinutelyMapper.xml
index 3f3e22f..2bbb17b 100644
--- a/src/main/resources/mapper/HistoryMinutelyMapper.xml
+++ b/src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.moral.mapper.HistoryMinutelyMapper">
-
-	<select id="getSersionAvgByDevice" resultType="java.util.LinkedHashMap">
+<mapper namespace="com.moral.mapper.HistoryMinutelyMapper">
+	<resultMap id="PairDataResultMap" type="com.moral.entity.charts.PairData" >
+		<result column="format_time" property="category" jdbcType="VARCHAR" />
+		<result column="value" property="value" jdbcType="DOUBLE" />
+	</resultMap>
+	<select id="getSersionAvgByDevice" resultType="java.util.Map">
 		SELECT
 			${sensorKeyColumn}
 		FROM
@@ -13,7 +16,7 @@
 		AND time &lt; #{end}
 	</select>
 	
-	<select id="getMonitorPointOrDeviceAvgData" resultType="java.util.LinkedHashMap">
+	<select id="getMonitorPointOrDeviceAvgData" resultType="java.util.Map">
 		SELECT
 			DATE_FORMAT(time, #{typeFormat}) time,
 			${sensorKeyColumn}
@@ -38,5 +41,49 @@
 		ORDER BY
 			time
 	</select>
-	
+	<select id="selectLineChartDateByCrieria" resultMap="PairDataResultMap">
+			SELECT
+		     <if test='"MINUTE"!=dataCondition.timeUnits.toString()'>
+		         AVG(json->'$.${sensorKey}[0]')
+		     </if>
+		     <if test='"MINUTE"==dataCondition.timeUnits.toString()'>
+				 json->'$.${sensorKey}[0]'
+			 </if>
+		      as value,
+		     DATE_FORMAT(time,'${@com.moral.common.util.ReportTimeFormat@toMySqlTimeFormat(timePeriod.timeUnits)}') as format_time
+		     FROM
+			`history_minutely` hmi
+			<where>
+				and hmi.time >= #{timePeriod.startTime}
+				and hmi.time <![CDATA[<=]]> #{timePeriod.endTime}
+				<if test="dataCondition.actualTime != null">
+					and DATE_FORMAT(time,	'${@com.moral.common.util.ReportTimeFormat@toMySqlActualTimeFormat(dataCondition.timeUnits)}') = #{dataCondition.actualTime}
+				</if>
+				and hmi.mac in (
+				select mac from device dev
+				join monitor_point mpt  on dev.monitor_point_id = mpt.id
+				<where>
+					 <if test='"DEVICE"==dataCondition.areaRange.toString()'>
+						and dev.id = #{dataCondition.areaRangeId}
+					 </if>
+					<if test='"MONITORPOINT"==dataCondition.areaRange.toString()'>
+						and mpt.id = #{dataCondition.areaRangeId}
+					</if>
+					<if test='"PROVINCE"==dataCondition.areaRange.toString()'>
+						and mpt.provice_code = #{dataCondition.areaRangeId}
+					</if>
+					<if test='"CITY"==dataCondition.areaRange.toString()'>
+						and mpt.city_code = #{dataCondition.areaRangeId}
+					</if>
+					<if test='"AREA"==dataCondition.areaRange.toString()'>
+						and mpt.area_code = #{dataCondition.areaRangeId}
+					</if>
+				</where>
+				)
+			</where>
+			<if test='"MINUTE"!=dataCondition.timeUnits.toString()'>
+				GROUP BY format_time
+			</if>
+		    ORDER BY format_time asc
+	</select>
 </mapper>
\ No newline at end of file
diff --git a/src/test/java/com/moral/JavaBeanToJsonOutPrint.java b/src/test/java/com/moral/JavaBeanToJsonOutPrint.java
index 8b9de9d..e639249 100644
--- a/src/test/java/com/moral/JavaBeanToJsonOutPrint.java
+++ b/src/test/java/com/moral/JavaBeanToJsonOutPrint.java
@@ -6,30 +6,49 @@
 import com.moral.entity.Device;
 import com.moral.entity.DeviceAdjustValue;
 import com.moral.entity.alarm.AlarmConfig;
+import com.moral.entity.charts.*;
 import com.moral.security.auth.login.LoginMode;
 import com.moral.security.model.UserContext;
 import org.junit.Test;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.util.*;
 
 public class JavaBeanToJsonOutPrint {
     @Test
     public void jsonOutPrintTest(){
-        UserContext userContext = UserContext.create("312", LoginMode.Andriod,1,new ArrayList<>());
-//        adjustValue.setCreateTime(new Date());
-//        adjustValue.setUpdateTime(new Date());
-//        adjustValue.setId(0);
-//        Map<String,Float> value = new HashMap();
-//        value.put("e1", (float) 1.2);
-//        adjustValue.setValue(value);
-        String json = "{\"createTime\":1516342989358,\"deviceId\":null,\"id\":0,\"updateTime\":1516342989358,\"value\":{\"e1\":1.2}}";
+//        UserContext userContext = UserContext.create("312", LoginMode.Andriod,1,new ArrayList<>());
+////        adjustValue.setCreateTime(new Date());
+////        adjustValue.setUpdateTime(new Date());
+////        adjustValue.setId(0);
+////        Map<String,Float> value = new HashMap();
+////        value.put("e1", (float) 1.2);
+////        adjustValue.setValue(value);
+//        String json = "{\"createTime\":1516342989358,\"deviceId\":null,\"id\":0,\"updateTime\":1516342989358,\"value\":{\"e1\":1.2}}";
+//        LineChartCriteria lineChartCriteria = new LineChartCriteria();
+//        List<DataCondition> dataConditions = new ArrayList<>();
+//       DataCondition dataCondition = new DataCondition();
+//        dataCondition.setActualTime(1);
+//        dataCondition.setAreaRange(AreaRange.AREA);
+//        dataCondition.setAreaRangeId(1);
+//        dataCondition.setTimeUnits(TimeUnits.DAY);
+//        dataConditions.add(dataCondition);
+//        lineChartCriteria.setDataConditions(dataConditions);
+//        lineChartCriteria.setSensorKey("e1");
+//        TimePeriod timePeriod = new TimePeriod();
+//        timePeriod.setEndTime(new Date());
+//        timePeriod.setStartTime(new Date());
+//        timePeriod.setTimeUnits(TimeUnits.DAY);
+//        lineChartCriteria.setTimePeriod(timePeriod);
 //        Map map = JSON.parseObject("{\"e1\":0.0}");
-        String json1 = JSON.toJSONString(userContext);
+        String str = "{\"sensorKey\":\"e1\",\"timePeriod\":{\"startTime\":\"2018-03-09T07:53:53.463Z\",\"endTime\":\"2018-03-09T07:53:53.463Z\",\"timeUnits\":\"DAY\"},\"dataConditions\":[{\"timeUnits\":\"DAY\",\"actualTime\":null,\"areaRange\":\"AREA\",\"areaRangeId\":320583}]}";
+        LineChartCriteria lineChartCriteria = JSON.parseObject(str,LineChartCriteria.class);
+//        TimePeriod timePeriod = JSON.parseObject(str,TimePeriod.class);
+        String json1 = JSON.toJSONString(lineChartCriteria);
         System.out.printf("\n\n\n\n");
         System.out.printf(json1);
         System.out.printf("\n\n\n\n");
     }
+
 }
diff --git a/src/test/java/com/moral/ScreenApiApplicationTests.java b/src/test/java/com/moral/ScreenApiApplicationTests.java
index 0dbf23c..35846f3 100644
--- a/src/test/java/com/moral/ScreenApiApplicationTests.java
+++ b/src/test/java/com/moral/ScreenApiApplicationTests.java
@@ -3,7 +3,10 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
@@ -12,5 +15,16 @@
 	@Test
 	public void contextLoads() {
 	}
+	@Resource
+	private BCryptPasswordEncoder encoder;
+	@Test
+	public void testEncoder(){
+		String hash = encoder.encode("123456");
+		System.out.printf("\n============================\n");
+		System.out.printf("hash:"+hash);
+//		Boolean result = encoder.matches("123456",hash);
 
+//		System.out.printf("result:"+result);
+		System.out.printf("\n============================\n");
+	}
 }

--
Gitblit v1.8.0