|
@@ -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;
|
|
|
}
|
|
|
|
|
|
}
|