| 
					
				 | 
			
			
				@@ -2,6 +2,7 @@ package com.huaxu.controller; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.core.metadata.IPage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.huaxu.client.UserCenterClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.huaxu.common.FileUploadUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.huaxu.dto.DeviceDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.huaxu.entity.DeviceParmEntity; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -22,6 +23,10 @@ import org.springframework.validation.annotation.Validated; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.ui.ModelMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.text.ParseException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.text.SimpleDateFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.time.LocalDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Calendar; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Date; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -43,6 +48,8 @@ public class SceneController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SceneService sceneService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Value("${SMS.sys_config_path}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String baseDir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    UserCenterClient userCenterClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @ApiOperation(value = "分页查询场景") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @RequestMapping(value = "/selectPage", method = RequestMethod.GET) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -213,9 +220,104 @@ public class SceneController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @RequestMapping(value = "/selectAlarmSceneAndDevice", method = RequestMethod.GET) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @ApiOperation(value = "场景及设备故障率") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public  AjaxMessage<List<SceneEntity>> selectAlarmSceneAndDevice(@ApiParam(value = "父级场景ID", required = false)@RequestParam(required = false) Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<SceneEntity> sceneEntities = sceneService.findByParentId(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return new AjaxMessage<>(ResultStatus.OK, sceneEntities); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public  AjaxMessage<List<Map<String,Object>>> selectAlarmSceneAndDevice( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            @ApiParam(value = "统计类型:0-按月统计,1-按年统计,2-自定义统计", required = true) @RequestParam(required = true) int type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            @ApiParam(value = "统计时间:月格式(yyyy-MM),年格式(yyyy),自定义统计时间开始日期", required = true) @RequestParam(required = true) String startDate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            @ApiParam(value = "统计时间:年月统计不用传入此参数,自定义统计截至日期", required = false) @RequestParam(required = false) String endDate) throws ParseException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LoginUser loginUser = UserUtil.getCurrentUser(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SceneEntity sceneEntity = new SceneEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sceneEntity.setTenantId(loginUser.getTenantId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sceneEntity.setProgramItems(loginUser.getProgramItemList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sceneEntity.setUserType(loginUser.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sceneEntity.setPermissonType(loginUser.getPermissonType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int days = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        switch (type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                startDate = String.format("%s-01", startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                endDate = subMonth(startDate, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                days =getDaysOfMonth(startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                days =LocalDate.of(Integer.parseInt(startDate),1,1).lengthOfYear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                startDate = String.format("%s-01-01", startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                endDate = subYear(startDate, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case 2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                startDate = String.format("%s-01", startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                endDate = String.format("%s-01", endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                days = differentDaysByMillisecond(startDate,endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Map<String,Object>> list = sceneService.selectAlarmSceneAndDevice(sceneEntity, startDate, endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(int i=0;i<list.size();i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String,Object> map = list.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            double amount =Double.parseDouble(map.get("amount").toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            double rate =amount / days; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            map.put("rate",rate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(rate>=0.5){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                map.put("level","高"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else if(rate>=0.2 && rate<0.5){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                map.put("level","中"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else if(rate<0.2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                map.put("level","低"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new AjaxMessage<>(ResultStatus.OK, list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 获取一个月有多少天 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int getDaysOfMonth(String date) throws ParseException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date dt = sdf.parse(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Calendar calendar = Calendar.getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calendar.setTime(dt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int differentDaysByMillisecond(String date1,String date2) throws ParseException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date dt1 = sdf.parse(date1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date dt2 = sdf.parse(date2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int days = (int) ((dt2.getTime() - dt1.getTime()) / (1000*3600*24)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return days; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 日期增加一年 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String subYear(String date, int n) throws ParseException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date dt = sdf.parse(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Calendar rightNow = Calendar.getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rightNow.setTime(dt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rightNow.add(Calendar.YEAR, n); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date dt1 = rightNow.getTime(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String reStr = sdf.format(dt1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return reStr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 日期增加一月 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String subMonth(String date, int n) throws ParseException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date dt = sdf.parse(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Calendar rightNow = Calendar.getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rightNow.setTime(dt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rightNow.add(Calendar.MONTH, n); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date dt1 = rightNow.getTime(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String reStr = sdf.format(dt1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return reStr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |