liyanqi
2022-10-27 1b97ca6145d599515fc4748f9126f1f6c9503ce4
驾驶舱数据接口以及假数据的编写
7个文件已添加
677 ■■■■■ 已修改文件
ycl-common/src/main/java/com/ycl/vo/cockpit/CockpitVO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/controller/cockpit/aiIot/AIIotController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/controller/cockpit/enforcementEvents/EnforcementEventsController.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/controller/cockpit/statisticsEvents/StatisticsEventsController.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/vo/cockpit/aiIot/AIIotVO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/vo/cockpit/enforcementEvents/EnforcementEventsVO.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/vo/cockpit/statisticsEvents/StatisticsEventsVO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/vo/cockpit/CockpitVO.java
New file
@@ -0,0 +1,42 @@
package com.ycl.vo.cockpit;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
 * @author Lyq
 * @version 1.0
 * @date 2022/10/26
 */
public class CockpitVO {
    @Data
    @ApiModel
    public static class Params1VO {
        @ApiModelProperty(value = "appId", example = "1")
        @NotBlank(message = "appId不能为空")
        private String appId;
        @ApiModelProperty(value = "appKey", example = "1")
        @NotBlank(message = "appKey不能为空")
        private String appKey;
        private String sign;
    }
    @Data
    @ApiModel
    public static class Params2VO {
        @ApiModelProperty(value = "appId", example = "1")
        @NotBlank(message = "appId不能为空")
        private String appId;
        @ApiModelProperty(value = "appKey", example = "1")
        @NotBlank(message = "appKey不能为空")
        private String appKey;
        private String sign;
        @ApiModelProperty(value = "开始时间,格式yyyy-MM-dd hh:mm:ss")
        private String beginTime;
        @ApiModelProperty(value = "结束时间,格式yyyy-MM-dd hh:mm:ss")
        private String endTime;
    }
}
ycl-platform/src/main/java/com/ycl/controller/cockpit/aiIot/AIIotController.java
New file
@@ -0,0 +1,105 @@
package com.ycl.controller.cockpit.aiIot;
import com.ycl.api.CommonResult;
import com.ycl.vo.cockpit.CockpitVO;
import com.ycl.vo.cockpit.aiIot.AIIotVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
/**
 * @author Lyq
 * @version 1.0
 * @date 2022/10/26
 */
@Api(tags = "驾驶舱数据接口-AI物联")
@RestController
@RequestMapping("/api/lot")
public class AIIotController {
    @ApiOperation(value = "监测数据")
    @GetMapping("/detection")
    public CommonResult<AIIotVO.DetectionVO> detection(@Validated CockpitVO.Params1VO params) {
        AIIotVO.DetectionVO detectionVO = new AIIotVO.DetectionVO();
        detectionVO.setVideo(121);
        detectionVO.setIndividual(20);
        detectionVO.setLampblack(154);
        detectionVO.setLoudspeaker(30);
        detectionVO.setSlagCar(33);
        return CommonResult.success(detectionVO);
    }
    @ApiOperation(value = "实时视频监控")
    @GetMapping("/video")
    public CommonResult<List<AIIotVO.VideoVO>> video(@Validated CockpitVO.Params1VO params) {
        List<AIIotVO.VideoVO> videoVOS = new ArrayList<>();
        AIIotVO.VideoVO a = null;
        for (int i = 0; i < 4; i++) {
            a = new AIIotVO.VideoVO();
            a.setLongitude("32.11");
            a.setLatitude("106.111");
            a.setName("设备一");
            a.setResourceId("012");
            a.setBrand("大华");
            a.setModel("球机");
            a.setIp("10.23.14.2");
            a.setUrl("http://10.23.14.2:12001");
            videoVOS.add(a);
        }
        return CommonResult.success(videoVOS);
    }
    @ApiOperation(value = "AI算法效能")
    @GetMapping("/efficiency")
    public CommonResult<List<AIIotVO.EfficiencyVO>> efficiency(@Validated CockpitVO.Params2VO params) {
        List<AIIotVO.EfficiencyVO> efficiencyVOS = new ArrayList<>();
        AIIotVO.EfficiencyVO a = null;
        for (int i = 0; i < 4; i++) {
            a = new AIIotVO.EfficiencyVO();
            a.setType("道路破损");
            a.setCount(12);
            a.setRatio(new BigDecimal("0.63").setScale(2, RoundingMode.HALF_UP));
            efficiencyVOS.add(a);
        }
        return CommonResult.success(efficiencyVOS);
    }
    @ApiOperation(value = "渣土联动")
    @GetMapping("/slag_car")
    public CommonResult<AIIotVO.SlagCarVO> slagCar(@Validated CockpitVO.Params1VO params) {
        AIIotVO.SlagCarVO slagCarVO = new AIIotVO.SlagCarVO();
        slagCarVO.setCar(236);
        slagCarVO.setTeam(20);
        return CommonResult.success(slagCarVO);
    }
    @ApiOperation(value = "AI事件统计")
    @GetMapping("/event_statistics")
    public CommonResult<List<AIIotVO.StatisticsVO>> statistics(@Validated CockpitVO.Params2VO params) {
        List<AIIotVO.StatisticsVO> statisticsVOS = new ArrayList<>();
        List<AIIotVO.Statistics1VO> statistics1VOS = new ArrayList<>();
        AIIotVO.StatisticsVO a = null;
        AIIotVO.Statistics1VO a1 = null;
        for (int i = 0; i < 4; i++) {
            a = new AIIotVO.StatisticsVO();
            a1 = new AIIotVO.Statistics1VO();
            a.setType("道路破损");
            a1.setCount(12);
            a1.setMonth("2022-10");
            statistics1VOS.add(a1);
            a.setRecords(statistics1VOS);
            statisticsVOS.add(a);
        }
        return CommonResult.success(statisticsVOS);
    }
}
ycl-platform/src/main/java/com/ycl/controller/cockpit/enforcementEvents/EnforcementEventsController.java
New file
@@ -0,0 +1,141 @@
package com.ycl.controller.cockpit.enforcementEvents;
import com.ycl.api.CommonResult;
import com.ycl.vo.cockpit.CockpitVO;
import com.ycl.vo.cockpit.enforcementEvents.EnforcementEventsVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author Lyq
 * @version 1.0
 * @date 2022/10/26
 */
@Api(tags = "驾驶舱数据-执法事件")
@RestController
@RequestMapping("/api/event")
public class EnforcementEventsController {
    @ApiOperation(value = "执法事件统计")
    @GetMapping("/statistics")
    public CommonResult<Map<String, Object>> statistics(@Validated CockpitVO.Params2VO params) {
        Map<String, Object> map = new HashMap<>();
        EnforcementEventsVO.StatisticsEventVO eventVO = new EnforcementEventsVO.StatisticsEventVO();
        eventVO.setCount(10);
        eventVO.setRatio(new BigDecimal("0.69").setScale(2, RoundingMode.HALF_UP));
        map.put("reported", eventVO);
        map.put("disposition", eventVO);
        map.put("dispositionInTime",eventVO);
        map.put("register", eventVO);
        return CommonResult.success(map);
    }
    @ApiOperation(value = "事件类型")
    @GetMapping("/type")
    public CommonResult<EnforcementEventsVO.TypeAndSourceVO> type(@Validated CockpitVO.Params2VO params) {
        List<EnforcementEventsVO.TypeAndSourceVO1> typeVO1s = new ArrayList<>();
        EnforcementEventsVO.TypeAndSourceVO typeVO = new EnforcementEventsVO.TypeAndSourceVO();
        EnforcementEventsVO.TypeAndSourceVO1 typeVO1 = null;
        for (int i = 0; i < 4; i++) {
            typeVO1 = new EnforcementEventsVO.TypeAndSourceVO1();
            typeVO1.setName("团结屯");
            typeVO1.setCount(20);
            typeVO1.setRatio(new BigDecimal("0.69").setScale(2, RoundingMode.HALF_UP));
            typeVO1s.add(typeVO1);
        }
        typeVO.setAll(100);
        typeVO.setRecords(typeVO1s);
        return CommonResult.success(typeVO);
    }
    @ApiOperation(value = "视频抓拍告发点位")
    @GetMapping("/video")
    public CommonResult<List<EnforcementEventsVO.VideoAndAreaVO>> video(@Validated CockpitVO.Params2VO params) {
        List<EnforcementEventsVO.VideoAndAreaVO> videoVOS = new ArrayList<>();
        EnforcementEventsVO.VideoAndAreaVO videoVO = null;
        for (int i = 0; i < 4; i++) {
            videoVO = new EnforcementEventsVO.VideoAndAreaVO();
            videoVO.setName("团结屯");
            videoVO.setCount(10);
            videoVOS.add(videoVO);
        }
        return CommonResult.success(videoVOS);
    }
    @ApiOperation(value = "事件来源")
    @GetMapping("/source")
    public CommonResult<EnforcementEventsVO.TypeAndSourceVO> source(@Validated CockpitVO.Params2VO params) {
        List<EnforcementEventsVO.TypeAndSourceVO1> typeVO1s = new ArrayList<>();
        EnforcementEventsVO.TypeAndSourceVO typeVO = new EnforcementEventsVO.TypeAndSourceVO();
        EnforcementEventsVO.TypeAndSourceVO1 typeVO1 = null;
        for (int i = 0; i < 4; i++) {
            typeVO1 = new EnforcementEventsVO.TypeAndSourceVO1();
            typeVO1.setName("团结屯");
            typeVO1.setCount(20);
            typeVO1.setRatio(new BigDecimal("0.69").setScale(2, RoundingMode.HALF_UP));
            typeVO1s.add(typeVO1);
        }
        typeVO.setAll(100);
        typeVO.setRecords(typeVO1s);
        return CommonResult.success(typeVO);
    }
    @ApiOperation(value = "事件区域统计")
    @GetMapping("/area")
    public CommonResult<List<EnforcementEventsVO.VideoAndAreaVO>> area(@Validated CockpitVO.Params2VO params) {
        List<EnforcementEventsVO.VideoAndAreaVO> videoVOS = new ArrayList<>();
        EnforcementEventsVO.VideoAndAreaVO videoVO = null;
        for (int i = 0; i < 4; i++) {
            videoVO = new EnforcementEventsVO.VideoAndAreaVO();
            videoVO.setName("团结屯");
            videoVO.setCount(10);
            videoVOS.add(videoVO);
        }
        return CommonResult.success(videoVOS);
    }
    @ApiOperation(value = "延误事件")
    @GetMapping("/delay")
    public CommonResult<List<EnforcementEventsVO.DelayVO>> delay(@Validated CockpitVO.Params2VO params) {
        List<EnforcementEventsVO.DelayVO> delayVOS = new ArrayList<>();
        EnforcementEventsVO.DelayVO delayVO = null;
        for (int i = 0; i < 4; i++) {
            delayVO = new EnforcementEventsVO.DelayVO();
            delayVO.setCode("201245555555");
            delayVO.setDescription("团结屯");
            delayVO.setDuration(30);
            delayVOS.add(delayVO);
        }
        return CommonResult.success(delayVOS);
    }
    @ApiOperation(value = "事件信息")
    @GetMapping("/info")
    public CommonResult<EnforcementEventsVO.InfoVO> info(@Validated CockpitVO.Params2VO params) {
        EnforcementEventsVO.InfoVO infoVO = new EnforcementEventsVO.InfoVO();
        EnforcementEventsVO.EventVO eventVO = new EnforcementEventsVO.EventVO();
        infoVO.setToday(5);
        infoVO.setWeek(10);
        infoVO.setDispatch(20);
        infoVO.setIdentification(20);
        eventVO.setDescription("事件描述");
        eventVO.setAddress("事发地址");
        eventVO.setAlarmTime("2022-10-15 16:12:13");
        eventVO.setPoint("1号点位");
        eventVO.setPicture("http://12.2.23.4/xx.png");
        eventVO.setSource("AI识别");
        infoVO.setEvent(eventVO);
        return CommonResult.success(infoVO);
    }
}
ycl-platform/src/main/java/com/ycl/controller/cockpit/statisticsEvents/StatisticsEventsController.java
New file
@@ -0,0 +1,103 @@
package com.ycl.controller.cockpit.statisticsEvents;
import com.ycl.api.CommonResult;
import com.ycl.vo.cockpit.CockpitVO;
import com.ycl.vo.cockpit.statisticsEvents.StatisticsEventsVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
/**
 * @author Lyq
 * @version 1.0
 * @date 2022/10/26
 */
@Api(tags = "驾驶舱数据接口-综合决策")
@RestController
@RequestMapping("/api/data")
public class StatisticsEventsController {
    @ApiOperation(value = "执法事件")
    @GetMapping("/law_enforcement_event")
    public CommonResult<List<StatisticsEventsVO.LawEnforcementEventVO>> detection(@Validated CockpitVO.Params2VO params) {
        List<StatisticsEventsVO.LawEnforcementEventVO> lawEnforcementEventVOS = new ArrayList<>();
        StatisticsEventsVO.LawEnforcementEventVO a = null;
        for (int i = 0; i < 4; i++) {
            a = new StatisticsEventsVO.LawEnforcementEventVO();
            a.setName("团结屯");
            a.setMonth("10");
            a.setCityManagementCount(10);
            a.setEnforcementEventCount(10);
            lawEnforcementEventVOS.add(a);
        }
        return CommonResult.success(lawEnforcementEventVOS);
    }
    @ApiOperation(value = "物联感知")
    @GetMapping("/lot")
    public CommonResult<List<StatisticsEventsVO.LotVO>> lot(@Validated CockpitVO.Params1VO params) {
        List<StatisticsEventsVO.LotVO> lotVOS = new ArrayList<>();
        StatisticsEventsVO.LotVO a = null;
        for (int i = 0; i < 4; i++) {
            a = new StatisticsEventsVO.LotVO();
            a.setName("团结屯");
            a.setType("摄像头");
            a.setCount(10);
            lotVOS.add(a);
        }
        return CommonResult.success(lotVOS);
    }
    @ApiOperation(value = "执法队伍")
    @GetMapping("/team")
    public CommonResult<StatisticsEventsVO.TeamVO> team(@Validated CockpitVO.Params1VO params) {
        StatisticsEventsVO.TeamVO teamVO = new StatisticsEventsVO.TeamVO();
        teamVO.setAll(30);
        teamVO.setAssistant(10);
        teamVO.setOfficer(10);
        teamVO.setSecondOfficer(1);
        teamVO.setOffline(10);
        teamVO.setOnline(20);
        return CommonResult.success(teamVO);
    }
    @ApiOperation(value = "网格员")
    @GetMapping("/grid_member")
    public CommonResult<List<StatisticsEventsVO.GridMemberVO>> gridMember(@Validated CockpitVO.Params1VO params) {
        List<StatisticsEventsVO.GridMemberVO> gridMemberVOS = new ArrayList<>();
        StatisticsEventsVO.GridMemberVO a = null;
        for (int i = 0; i < 4; i++) {
            a = new StatisticsEventsVO.GridMemberVO();
            a.setRatio(new BigDecimal("0.20").setScale(2, RoundingMode.HALF_UP));
            a.setName("团结屯");
            a.setCount(10);
            gridMemberVOS.add(a);
        }
        return CommonResult.success(gridMemberVOS);
    }
    @ApiOperation(value = "指数体征")
    @GetMapping("/index_signs")
    public CommonResult<StatisticsEventsVO.IndexSignsVO> indexSigns(@Validated CockpitVO.Params1VO params) {
        StatisticsEventsVO.IndexSignsVO indexSignsVO = new StatisticsEventsVO.IndexSignsVO();
        indexSignsVO.setEvent(1);
        indexSignsVO.setGridMember(20);
        indexSignsVO.setCompletePercentage(new BigDecimal("0.60").setScale(2, RoundingMode.HALF_UP));
        indexSignsVO.setEquipment(30);
        indexSignsVO.setAccuracy(new BigDecimal("0.80").setScale(2, RoundingMode.HALF_UP));
        indexSignsVO.setTrigger(10);
        indexSignsVO.setLot(30);
        indexSignsVO.setLotOnline(10);
        indexSignsVO.setCityData(10);
        indexSignsVO.setEvaluationData(10);
        return CommonResult.success(indexSignsVO);
    }
}
ycl-platform/src/main/java/com/ycl/vo/cockpit/aiIot/AIIotVO.java
New file
@@ -0,0 +1,93 @@
package com.ycl.vo.cockpit.aiIot;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * @author Lyq
 * @version 1.0
 * @date 2022/10/26
 */
@ApiModel(description = "驾驶舱数据-AI物联VO层")
public class AIIotVO {
    @ApiModel(description = "监测数据")
    @Data
    public static class DetectionVO {
        @ApiModelProperty(value = "城市监控")
        private Integer video;
        @ApiModelProperty(value = "单兵设备")
        private Integer individual;
        @ApiModelProperty(value = "油烟监测")
        private Integer lampblack;
        @ApiModelProperty(value = "室外音柱")
        private Integer loudspeaker;
        @ApiModelProperty(value = "渣土车")
        private Integer slagCar;
    }
    @ApiModel(description = "实时监控")
    @Data
    public static class VideoVO {
        @ApiModelProperty(value = "点位经度")
        private String longitude;
        @ApiModelProperty(value = "点位纬度")
        private String latitude;
        @ApiModelProperty(value = "点位名称")
        private String name;
        @ApiModelProperty(value = "设备唯一编码")
        private String resourceId;
        @ApiModelProperty(value = "设备品牌")
        private String brand;
        @ApiModelProperty(value = "设备型号")
        private String model;
        @ApiModelProperty(value = "设备IP地址")
        private String ip;
        @ApiModelProperty(value = "URL地址")
        private String url;
    }
    @ApiModel(description = "AI算法效能")
    @Data
    public static class EfficiencyVO {
        @ApiModelProperty(value = "物联网设备类型")
        private String type;
        @ApiModelProperty(value = "数量")
        private Integer count;
        @ApiModelProperty(value = "比例")
        private BigDecimal ratio;
    }
    @ApiModel(description = "AI事件统计")
    @Data
    public static class StatisticsVO {
        @ApiModelProperty(value = "物联网设备类型")
        private String type;
        private List<AIIotVO.Statistics1VO> records;
    }
    @Data
    @ApiModel(description = "AI事件统计")
    public static class Statistics1VO {
        @ApiModelProperty(value = "月份")
        private String month;
        @ApiModelProperty(value = "数量")
        private Integer count;
    }
    @ApiModel(description = "渣土联动")
    @Data
    public static class SlagCarVO {
        @ApiModelProperty(value = "车队数")
        private Integer team;
        @ApiModelProperty(value = "车辆数")
        private Integer car;
    }
}
ycl-platform/src/main/java/com/ycl/vo/cockpit/enforcementEvents/EnforcementEventsVO.java
New file
@@ -0,0 +1,100 @@
package com.ycl.vo.cockpit.enforcementEvents;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import io.swagger.v3.oas.models.security.SecurityScheme;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * @author Lyq
 * @version 1.0
 * @date 2022/10/26
 */
@ApiModel(description = "驾驶舱数据-执法事件VO层")
public class EnforcementEventsVO {
    @ApiModel(description = "执法事件统计")
    @Data
    public static class StatisticsEventVO {
        @ApiModelProperty(value = "数量")
        private Integer count;
        @ApiModelProperty(value = "比例")
        private BigDecimal ratio;
    }
    @Data
    @ApiModel(description = "事件类型/事件来源")
    public static class TypeAndSourceVO {
        @ApiModelProperty(value = "事件的总数")
        private Integer all;
        @ApiModelProperty(value = "事件类型的数量、各占比")
        private List<EnforcementEventsVO.TypeAndSourceVO1> records;
    }
    @Data
    @ApiModel(description = "事件类型/事件来源")
    public static class TypeAndSourceVO1 {
        @ApiModelProperty(value = "名称")
        private String name;
        @ApiModelProperty(value = "数量")
        private Integer count;
        @ApiModelProperty(value = "比例")
        private BigDecimal ratio;
    }
    @Data
    @ApiModel(description = "视频抓拍高发点位/事件区域统计")
    public static class VideoAndAreaVO {
        @ApiModelProperty(value = "点位名称")
        private String name;
        @ApiModelProperty(value = "次数")
        private Integer count;
    }
    @Data
    @ApiModel(description = "延误事件")
    public static class DelayVO {
        @ApiModelProperty(value = "事件编码(唯一)")
        private String code;
        @ApiModelProperty(value = "事件描述")
        private String description;
        @ApiModelProperty(value = "超期时间(分钟)")
        private Integer duration;
    }
    @Data
    @ApiModel(description = "事件信息")
    public static class InfoVO {
        @ApiModelProperty(value = "今日事件总数")
        private Integer today;
        @ApiModelProperty(value = "本周事件总数")
        private Integer week;
        @ApiModelProperty(value = "执法出动总数")
        private Integer dispatch;
        @ApiModelProperty(value = "AI识别的事件总数")
        private Integer identification;
        @ApiModelProperty(value = "具体事件的数据信息")
        private EnforcementEventsVO.EventVO event;
    }
    @Data
    @ApiModel(description = "具体事件的数据信息")
    public static class EventVO {
        @ApiModelProperty(value = "事件描述")
        private String description;
        @ApiModelProperty(value = "事发地点")
        private String address;
        @ApiModelProperty(value = "发生时间")
        private String alarmTime;
        @ApiModelProperty(value = "关联摄像点位")
        private String point;
        @ApiModelProperty(value = "监控画面")
        private String picture;
        @ApiModelProperty(value = "来源")
        private String source;
    }
}
ycl-platform/src/main/java/com/ycl/vo/cockpit/statisticsEvents/StatisticsEventsVO.java
New file
@@ -0,0 +1,93 @@
package com.ycl.vo.cockpit.statisticsEvents;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author Lyq
 * @version 1.0
 * @date 2022/10/26
 */
@ApiModel(description = "驾驶舱数据-综合决策VO层")
public class StatisticsEventsVO {
    @ApiModel(description = "执法事件")
    @Data
    public static class LawEnforcementEventVO {
        @ApiModelProperty(value = "月份")
        private String month;
        @ApiModelProperty(value = "地区名字")
        private String name;
        @ApiModelProperty(value = "城管事件数")
        private Integer cityManagementCount;
        @ApiModelProperty(value = "执法案件数")
        private Integer enforcementEventCount;
    }
    @ApiModel(description = "物联感知")
    @Data
    public static class LotVO {
        @ApiModelProperty(value = "物联网设备类型")
        private String type;
        @ApiModelProperty(value = "地区名字")
        private String name;
        @ApiModelProperty(value = "数量")
        private Integer count;
    }
    @ApiModel(description = "执法队伍")
    @Data
    public static class TeamVO {
        @ApiModelProperty(value = "执法中队数量")
        private Integer secondOfficer;
        @ApiModelProperty(value = "在线人员数量")
        private Integer online;
        @ApiModelProperty(value = "离线人员数量")
        private Integer offline;
        @ApiModelProperty(value = "全部人员数量")
        private Integer all;
        @ApiModelProperty(value = "执法人员数量")
        private Integer officer;
        @ApiModelProperty(value = "协管人员数量")
        private Integer assistant;
    }
    @ApiModel(description = "网格员")
    @Data
    public static class GridMemberVO {
        @ApiModelProperty(value = "地区名称")
        private String name;
        @ApiModelProperty(value = "数量")
        private Integer count;
        @ApiModelProperty(value = "比例")
        private BigDecimal ratio;
    }
    @ApiModel(description = "指数体征")
    @Data
    public static class IndexSignsVO {
        @ApiModelProperty(value = "近30日事件数")
        private Integer event;
        @ApiModelProperty(value = "网格员总数")
        private Integer gridMember;
        @ApiModelProperty(value = "近30日事件办结率")
        private BigDecimal completePercentage;
        @ApiModelProperty(value = "AI设备数量")
        private Integer equipment;
        @ApiModelProperty(value = "AI近30日准确率")
        private BigDecimal accuracy;
        @ApiModelProperty(value = "近30日触发次数")
        private Integer trigger;
        @ApiModelProperty(value = "物联感知设备数量")
        private Integer lot;
        @ApiModelProperty(value = "近30日物联感知设备在线数量")
        private Integer lotOnline;
        @ApiModelProperty(value = "市、 区任务完成指标市平台内数据")
        private Integer cityData;
        @ApiModelProperty(value = "动态考核数据")
        private Integer evaluationData;
    }
}