Ver Fonte

1.地铁盘查

wxg há 2 anos atrás
pai
commit
6137a274e5
44 ficheiros alterados com 1984 adições e 191 exclusões
  1. 1 1
      src/main/java/com/metro/aop/GlobalExceptionHandler.java
  2. 63 0
      src/main/java/com/metro/controller/AdminDataShowController.java
  3. 10 2
      src/main/java/com/metro/controller/PassreCordsController.java
  4. 51 0
      src/main/java/com/metro/controller/WarFruitController.java
  5. 19 0
      src/main/java/com/metro/entity/dto/DataShowMiddlerDTO.java
  6. 24 0
      src/main/java/com/metro/entity/enums/DataShowTopEnum.java
  7. 38 0
      src/main/java/com/metro/entity/po/DataShow.java
  8. 75 0
      src/main/java/com/metro/entity/po/WarFruit.java
  9. 6 0
      src/main/java/com/metro/entity/ro/passrecords/SelectPassreCordsPageListReq.java
  10. 2 1
      src/main/java/com/metro/entity/ro/passrecords/SelectPassreCordsPageListResp.java
  11. 29 0
      src/main/java/com/metro/entity/search/PoliceSearch.java
  12. 6 0
      src/main/java/com/metro/entity/search/WarningSearch.java
  13. 24 0
      src/main/java/com/metro/entity/vo/DataShowMiddleSiteVO.java
  14. 24 0
      src/main/java/com/metro/entity/vo/DataShowMiddleVO.java
  15. 49 0
      src/main/java/com/metro/entity/vo/DataShowTopVO.java
  16. 25 0
      src/main/java/com/metro/entity/vo/DataShowWarningVO.java
  17. 22 0
      src/main/java/com/metro/entity/vo/PassreCordsGroupByTimeVO.java
  18. 24 0
      src/main/java/com/metro/entity/vo/PassreCordsLessVO.java
  19. 31 0
      src/main/java/com/metro/entity/vo/PassreCordsWarFruitVO.java
  20. 22 0
      src/main/java/com/metro/entity/vo/SiteVO.java
  21. 30 0
      src/main/java/com/metro/entity/vo/WarFruitTopVO.java
  22. 49 0
      src/main/java/com/metro/entity/vo/WarFruitVO.java
  23. 3 0
      src/main/java/com/metro/entity/vo/WarningDetailOneVO.java
  24. 6 0
      src/main/java/com/metro/entity/vo/WarningVO.java
  25. 18 0
      src/main/java/com/metro/mapper/DataShowMapper.java
  26. 11 0
      src/main/java/com/metro/mapper/MetroMapper.java
  27. 14 1
      src/main/java/com/metro/mapper/PassreCordsMapper.java
  28. 22 0
      src/main/java/com/metro/mapper/WarFruitMapper.java
  29. 22 0
      src/main/java/com/metro/service/DataShowService.java
  30. 1 1
      src/main/java/com/metro/service/PassreCordsService.java
  31. 23 0
      src/main/java/com/metro/service/WarFruitService.java
  32. 276 0
      src/main/java/com/metro/service/impl/DataShowServiceImpl.java
  33. 17 3
      src/main/java/com/metro/service/impl/PassreCordsServiceImpl.java
  34. 140 0
      src/main/java/com/metro/service/impl/WarFruitServiceImpl.java
  35. 105 0
      src/main/java/com/metro/service/job/AdminDataShowTask.java
  36. 101 0
      src/main/java/com/metro/service/job/AdminDataShowTodayTask.java
  37. 79 0
      src/main/java/com/metro/service/job/WarFruitTask.java
  38. 78 0
      src/main/java/com/metro/service/job/WarFruitTodayTask.java
  39. 4 2
      src/main/resources/application.yml
  40. 69 0
      src/main/resources/mapper/DataShowMapper.xml
  41. 17 0
      src/main/resources/mapper/MetroMapper.xml
  42. 93 7
      src/main/resources/mapper/PassreCordsMapper.xml
  43. 33 0
      src/main/resources/mapper/WarFruitMapper.xml
  44. 228 173
      target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

+ 1 - 1
src/main/java/com/metro/aop/GlobalExceptionHandler.java

@@ -54,7 +54,7 @@ public class GlobalExceptionHandler {
   public BaseResponse handleGlobalException(HttpServletRequest request, Exception exception) {
     exception.printStackTrace();
     log.info("=======服务异常,e:{}",exception.getMessage());
-    return BaseResponse.fail("服务异常,请联系管理员");
+    return BaseResponse.fail(exception.getMessage());
   }
 
   @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})

+ 63 - 0
src/main/java/com/metro/controller/AdminDataShowController.java

@@ -0,0 +1,63 @@
+package com.metro.controller;/*
+ * @Description
+ * @Date 2022/5/17 10:32
+ * @Author wxg
+ * */
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.metro.baseRe.BaseResponse;
+import com.metro.entity.dto.DataShowMiddlerDTO;
+import com.metro.entity.vo.*;
+import com.metro.service.DataShowService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/dataShow")
+@Api(tags = "A 首页大屏展示")
+public class AdminDataShowController extends BaseController {
+
+    @Autowired
+    private DataShowService dataShowService;
+
+    @ApiOperation("首页大屏上端的数据")
+    @ApiOperationSupport(order = 1)
+    @GetMapping("/selectDataShowTop")
+    public BaseResponse<DataShowTopVO> selectDataShowTop() {
+        return dataShowService.selectDataShowTop();
+    }
+    @ApiOperation("首页人流量Top20站点")
+    @ApiOperationSupport(order = 2)
+    @PostMapping("/selectDataShowMiddler")
+    public BaseResponse<DataShowMiddleVO> selectDataShowMiddler(@RequestBody DataShowMiddlerDTO dataShowMiddlerDTO) {
+        return dataShowService.selectDataShowMiddler(dataShowMiddlerDTO);
+    }
+    @ApiOperation("站点盘查人流量变化")
+    @ApiOperationSupport(order = 3)
+    @GetMapping("/selectDataShowMiddlerSite")
+    public BaseResponse<DataShowMiddleSiteVO> selectDataShowMiddlerSite(@RequestParam(value = "id",required = false) Integer id) {
+        return dataShowService.selectDataShowMiddlerSite(id);
+    }
+    @ApiOperation("站点盘查人流量变化的站点列表")
+    @ApiOperationSupport(order = 3)
+    @GetMapping("/selectSiteList")
+    public BaseResponse<List<SiteVO>> selectSiteList() {
+        return BaseResponse.ok(dataShowService.selectSiteList());
+    }
+    @ApiOperation("实时预警人员")
+    @ApiOperationSupport(order = 4)
+    @GetMapping("/selectWarningList")
+    public BaseResponse<List<DataShowWarningVO>> selectWarningList() {
+        return BaseResponse.ok(dataShowService.selectWarningList());
+    }
+    @ApiOperation("实时预警详情")
+    @ApiOperationSupport(order = 5)
+    @GetMapping("/selectWarningDetail")
+    public BaseResponse<WarningDetailOneVO> selectWarningDetail(@RequestParam(value = "id",required = true) Integer id) {
+        return BaseResponse.ok(dataShowService.selectWarningDetail(id));
+    }
+}

+ 10 - 2
src/main/java/com/metro/controller/PassreCordsController.java

@@ -8,6 +8,7 @@ import com.metro.entity.search.WarningSearch;
 import com.metro.entity.vo.WarningDetailOneVO;
 import com.metro.entity.vo.WarningVO;
 import com.metro.service.PassreCordsService;
+import com.metro.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -51,8 +52,15 @@ public class PassreCordsController {
 
     @GetMapping("/warningDeatilList")
     @ApiOperation("预警详情列表")
-    public BaseResponse<List<SelectPassreCordsPageListResp>> warningDeatilList(@RequestParam("cardId") String cardId) {
-        return BaseResponse.ok(passreCordsservice.warningDeatilList(cardId));
+    public BaseResponse<List<SelectPassreCordsPageListResp>> warningDeatilList(@RequestParam("cardId") String cardId,
+                                                                               @RequestParam(value = "startTime",required = false) String startTime,
+                                                                               @RequestParam(value = "endTime",required = false) String endTime) {
+        /*因为有多个地方使用该接口,所以在不改变原有的基础,添加新的查询条件就写成这样的,没有进行实体类封装*/
+        SelectPassreCordsPageListReq req = new SelectPassreCordsPageListReq();
+        req.setCardId(cardId);
+        req.setStartTime(StringUtils.isNotEmpty(startTime) ? startTime:null);
+        req.setEndTime(StringUtils.isNotEmpty(endTime) ? endTime:null);
+        return BaseResponse.ok(passreCordsservice.warningDeatilList(req));
     }
     @GetMapping("/warningDeatil")
     @ApiOperation("单个预警详细信息")

+ 51 - 0
src/main/java/com/metro/controller/WarFruitController.java

@@ -0,0 +1,51 @@
+package com.metro.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.metro.baseRe.BaseResponse;
+import com.metro.entity.search.PoliceSearch;
+import com.metro.entity.vo.WarFruitTopVO;
+import com.metro.entity.vo.WarFruitVO;
+import com.metro.service.WarFruitService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 战果统计表 前端控制器
+ * </p>
+ *
+ * @author wxg
+ * @since 2022-05-19
+ */
+@RestController
+@Api(tags = "A 战果统计展示")
+@RequestMapping("/warFruit")
+public class WarFruitController {
+
+    @Autowired
+    private WarFruitService warFruitService;
+
+    @ApiOperation("派出所top10")
+    @ApiOperationSupport(order = 1)
+    @GetMapping("/polliceOfficeTop10")
+    public BaseResponse<WarFruitTopVO> polliceOfficeTop10() {
+        return BaseResponse.ok(warFruitService.polliceOfficeTop10());
+    }
+    @ApiOperation("民警top10")
+    @ApiOperationSupport(order = 2)
+    @GetMapping("/policeTop10")
+    public BaseResponse<WarFruitTopVO> policeTop10() {
+        return BaseResponse.ok(warFruitService.policeTop10());
+    }
+    @ApiOperation("民警列表")
+    @ApiOperationSupport(order = 3)
+    @PostMapping("/policePageList")
+    public BaseResponse<IPage<WarFruitVO>> policePageList(@RequestBody PoliceSearch policeSearch) {
+        return BaseResponse.ok(warFruitService.policePageList(policeSearch));
+    }
+
+}

+ 19 - 0
src/main/java/com/metro/entity/dto/DataShowMiddlerDTO.java

@@ -0,0 +1,19 @@
+package com.metro.entity.dto;/*
+ * @Description
+ * @Date 2022/5/18 16:21
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class DataShowMiddlerDTO {
+
+    @ApiModelProperty(value = "时间分类 1-全部 2-今日  默认-1")
+    private Integer timeType = 1;
+    @ApiModelProperty(value = "盘查分类 1-全部 2-预警  默认-1")
+    private Integer passType = 1;
+}

+ 24 - 0
src/main/java/com/metro/entity/enums/DataShowTopEnum.java

@@ -0,0 +1,24 @@
+package com.metro.entity.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum DataShowTopEnum {
+    BERFORE_NUMBER(1, "今日之前的盘查人数"),
+    BERFOR_WARNING_NUMBER(2, "今日之前的预警人数"),
+    BERFOR_DOUBT_NUMBER(3, "今日之前的存疑人数"),
+    BERFOR_ARREST_NUMBER(4, "今日之前的抓铺人数"),
+    TODAY_NUMBER(5, "站点今日盘查人数"),
+    TODAY_WARNING_NUMBER(6, "站点今日预警人数"),
+    TODAY_DOUBT_NUMBER(7, "站点今日存疑人数"),
+    TODAY_ARREST_NUMBER(8, "站点今日抓铺人数");
+    DataShowTopEnum(Integer type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    private Integer type;
+    private String name;
+
+
+}

+ 38 - 0
src/main/java/com/metro/entity/po/DataShow.java

@@ -0,0 +1,38 @@
+package com.metro.entity.po;/*
+ * @Description
+ * @Date 2022/5/17 13:32
+ * @Author wxg
+ * */
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.metro.entity.enums.DataShowTopEnum;
+import lombok.Data;
+
+@Data
+@TableName("data_show")
+public class DataShow {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     *
+     * j_companys中的company_id
+     */
+    private String companyId;
+    /**
+     *
+     * j_companys中的branch_id
+     */
+    private String branchId;
+    /**
+     *
+     * @see DataShowTopEnum
+     */
+    private Integer type;
+    /*
+    * 数量
+    * */
+    private Integer number;
+}

+ 75 - 0
src/main/java/com/metro/entity/po/WarFruit.java

@@ -0,0 +1,75 @@
+package com.metro.entity.po;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+/**
+ * <p>
+ * 战果统计表
+ * </p>
+ *
+ * @author wxg
+ * @since 2022-05-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("war_fruit")
+public class WarFruit implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 战果统计表主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 身份证号
+     */
+    @TableField("card_id")
+    private String cardId;
+
+    /**
+     * 盘查人数 记录每天0天之前的数据
+     */
+    @TableField("total_number")
+    private Integer totalNumber;
+
+    /**
+     * 总存疑人数
+     */
+    @TableField("total_doubt_number")
+    private Integer totalDoubtNumber;
+
+    /**
+     * 总抓捕人数
+     */
+    @TableField("total_arrest_number")
+    private Integer totalArrestNumber;
+
+    /**
+     * 今日盘查人数
+     */
+    @TableField("today_number")
+    private Integer todayNumber;
+
+    /**
+     * 今日存疑人数
+     */
+    @TableField("today_doubt_number")
+    private Integer todayDoubtNumber;
+
+    /**
+     * 今日抓捕人数
+     */
+    @TableField("today_arrest_number")
+    private Integer todayArrestNumber;
+
+}

+ 6 - 0
src/main/java/com/metro/entity/ro/passrecords/SelectPassreCordsPageListReq.java

@@ -30,4 +30,10 @@ public class SelectPassreCordsPageListReq extends BaseEntity implements Serializ
 
     @ApiModelProperty("0=抓捕,1=存疑,2=通过,3=异常")
     private Integer pass;
+
+    @ApiModelProperty(value = "有效期开始时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "有效期结束时间")
+    private String endTime;
 }

+ 2 - 1
src/main/java/com/metro/entity/ro/passrecords/SelectPassreCordsPageListResp.java

@@ -73,7 +73,8 @@ public class SelectPassreCordsPageListResp implements Serializable {
     @ApiModelProperty(value = "民警名")
     private String staffName;
 
-
+    @ApiModelProperty(value = "站点")
+    private String metroName;
 
 
 }

+ 29 - 0
src/main/java/com/metro/entity/search/PoliceSearch.java

@@ -0,0 +1,29 @@
+package com.metro.entity.search;
+
+import com.metro.baseRe.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class PoliceSearch extends BaseEntity implements Serializable {
+
+
+    @ApiModelProperty(hidden = true)
+    private String companyId;
+
+    @ApiModelProperty(hidden = true)
+    private String branchId;
+
+    /*因为多个接口使用,type=1则查询图片并返回*/
+    @ApiModelProperty(hidden = true)
+    private Integer type;
+
+}

+ 6 - 0
src/main/java/com/metro/entity/search/WarningSearch.java

@@ -24,6 +24,12 @@ public class WarningSearch extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "手机号")
     private String phone;
 
+    @ApiModelProperty(value = "开始时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
     @ApiModelProperty(hidden = true)
     private String companyId;
 

+ 24 - 0
src/main/java/com/metro/entity/vo/DataShowMiddleSiteVO.java

@@ -0,0 +1,24 @@
+package com.metro.entity.vo;/*
+ * @Description
+ * @Date 2022/5/17 11:20
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class DataShowMiddleSiteVO {
+
+    @ApiModelProperty("站点id")
+    private Integer id;
+
+    @ApiModelProperty("人数")
+    private List<Integer> numberList;
+}

+ 24 - 0
src/main/java/com/metro/entity/vo/DataShowMiddleVO.java

@@ -0,0 +1,24 @@
+package com.metro.entity.vo;/*
+ * @Description
+ * @Date 2022/5/17 11:20
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class DataShowMiddleVO {
+
+    @ApiModelProperty("站点")
+    private List<String> siteList;
+
+    @ApiModelProperty("人数")
+    private List<Integer> numberList;
+}

+ 49 - 0
src/main/java/com/metro/entity/vo/DataShowTopVO.java

@@ -0,0 +1,49 @@
+package com.metro.entity.vo;/*
+ * @Description
+ * @Date 2022/5/17 11:20
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class DataShowTopVO {
+
+    @ApiModelProperty("盘查总人数")
+    private Integer totalNumber;
+
+    @ApiModelProperty("今日盘查人数")
+    private Integer todayNumber;
+
+    @ApiModelProperty("总预警人数 = 总存疑人数 + 总抓捕人数")
+    private Integer totalWarningNumber;
+
+    @ApiModelProperty("总存疑人数")
+    private Integer totalDoubtNumber;
+
+    @ApiModelProperty("总抓捕人数")
+    private Integer totalArrestNumber;
+
+    @ApiModelProperty("今日预警人数 = 今日存疑人数 + 今日抓捕人数")
+    private Integer todayWarningNumber;
+
+    @ApiModelProperty("今日存疑人数")
+    private Integer todayDoubtNumber;
+
+    @ApiModelProperty("今日抓捕人数")
+    private Integer todayArrestNumber;
+
+    @ApiModelProperty("总站点数")
+    private Integer totalSiteNumber;
+
+    @ApiModelProperty("总设备数")
+    private Integer totalDeviceNumber;
+
+    @ApiModelProperty(hidden = true)
+    private String companyId;
+}

+ 25 - 0
src/main/java/com/metro/entity/vo/DataShowWarningVO.java

@@ -0,0 +1,25 @@
+package com.metro.entity.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ */
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class DataShowWarningVO extends WarningVO implements Serializable {
+
+    @ApiModelProperty(value = "主键id")
+    private Integer id;
+
+    @ApiModelProperty(value = "身份证照片")
+    private String idPhoto;
+
+    @ApiModelProperty(value = "现场照片")
+    private String scenePhoto;
+}

+ 22 - 0
src/main/java/com/metro/entity/vo/PassreCordsGroupByTimeVO.java

@@ -0,0 +1,22 @@
+package com.metro.entity.vo;/*
+ * @Description
+ * @Date 2022/5/17 11:20
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class PassreCordsGroupByTimeVO {
+
+    @ApiModelProperty("时间节点")
+    private Integer time;
+
+    @ApiModelProperty("人数")
+    private Integer number;
+}

+ 24 - 0
src/main/java/com/metro/entity/vo/PassreCordsLessVO.java

@@ -0,0 +1,24 @@
+package com.metro.entity.vo;/*
+ * @Description
+ * @Date 2022/5/17 11:20
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class PassreCordsLessVO {
+
+    @ApiModelProperty("0=抓捕,1=存疑,2=通过,3=异常")
+    private Integer pass;
+
+    @ApiModelProperty("人数")
+    private Integer number;
+
+
+}

+ 31 - 0
src/main/java/com/metro/entity/vo/PassreCordsWarFruitVO.java

@@ -0,0 +1,31 @@
+package com.metro.entity.vo;/*
+ * @Description
+ * @Date 2022/5/17 11:20
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class PassreCordsWarFruitVO {
+
+    @ApiModelProperty("0=抓捕,1=存疑,2=通过,3=异常")
+    private String cardId;
+
+    @ApiModelProperty("抓捕人数")
+    private Integer arrestNumber;
+
+    @ApiModelProperty("存疑人数")
+    private Integer doubtNumber;
+
+    @ApiModelProperty("通过人数")
+    private Integer normalNumber;
+
+
+
+}

+ 22 - 0
src/main/java/com/metro/entity/vo/SiteVO.java

@@ -0,0 +1,22 @@
+package com.metro.entity.vo;/*
+ * @Description
+ * @Date 2022/5/17 11:20
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class SiteVO {
+
+    @ApiModelProperty("站点id")
+    private Integer id;
+
+    @ApiModelProperty("站点名称")
+    private String name;
+}

+ 30 - 0
src/main/java/com/metro/entity/vo/WarFruitTopVO.java

@@ -0,0 +1,30 @@
+package com.metro.entity.vo;/*
+ * @Description
+ * @Date 2022/5/17 11:20
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class WarFruitTopVO {
+
+    @ApiModelProperty("横坐标")
+    private List<String> siteList;
+
+    @ApiModelProperty("盘查人数")
+    private List<Integer> numberList;
+
+    @ApiModelProperty("异常人数")
+    private List<Integer> doubtList;
+
+    @ApiModelProperty("抓捕人数")
+    private List<Integer> arrestList;
+}

+ 49 - 0
src/main/java/com/metro/entity/vo/WarFruitVO.java

@@ -0,0 +1,49 @@
+package com.metro.entity.vo;/*
+ * @Description
+ * @Date 2022/5/17 11:20
+ * @Author wxg
+ * */
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class WarFruitVO {
+
+    @ApiModelProperty("id")
+    private Integer id;
+
+    @ApiModelProperty(value = "姓名")
+    private String xm;
+
+    @ApiModelProperty(value = "身份证")
+    private String cardId;
+
+    @ApiModelProperty(value = "base64照片")
+    private String photo;
+
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @ApiModelProperty("盘查总人数")
+    private Integer totalNumber;
+
+    @ApiModelProperty("今日盘查人数")
+    private Integer todayNumber;
+
+    @ApiModelProperty("总存疑人数")
+    private Integer totalDoubtNumber;
+
+    @ApiModelProperty("总抓捕人数")
+    private Integer totalArrestNumber;
+
+    @ApiModelProperty("今日存疑人数")
+    private Integer todayDoubtNumber;
+
+    @ApiModelProperty("今日抓捕人数")
+    private Integer todayArrestNumber;
+}

+ 3 - 0
src/main/java/com/metro/entity/vo/WarningDetailOneVO.java

@@ -50,6 +50,9 @@ public class WarningDetailOneVO implements Serializable {
     @ApiModelProperty("现场照片")
     private String scenePhoto;
 
+    @ApiModelProperty("身份证照片")
+    private String idPhoto;
+
     @ApiModelProperty(value = "所属分局名")
     private String companyName;
 

+ 6 - 0
src/main/java/com/metro/entity/vo/WarningVO.java

@@ -1,11 +1,13 @@
 package com.metro.entity.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * @ClassName: Companys
@@ -40,4 +42,8 @@ public class WarningVO implements Serializable {
 
     @ApiModelProperty(value = "所属派分局名")
     private String branchName;
+
+    @ApiModelProperty(value = "通行时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date passTime;
 }

+ 18 - 0
src/main/java/com/metro/mapper/DataShowMapper.java

@@ -0,0 +1,18 @@
+package com.metro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.metro.entity.po.DataShow;
+import com.metro.entity.vo.DataShowTopVO;
+import com.metro.entity.vo.JPersonVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DataShowMapper extends BaseMapper<DataShow> {
+    /*根据companyId进行分组查询,并进行汇总*/
+    List<DataShow> selectByCompanyIdGroup(@Param("companyId")String companyId,@Param("typeList") List<Integer> typeList);
+    /*根据条件进行分组查询*/
+    List<DataShow> getDataShowListByCompanyIdAndBranchId(@Param("jPersonVO")JPersonVO jPersonVO,@Param("typeList") List<Integer> typeList);
+    /*派出所盘查top10*/
+    List<DataShowTopVO> polliceOfficeTop10();
+}

+ 11 - 0
src/main/java/com/metro/mapper/MetroMapper.java

@@ -5,6 +5,7 @@ import com.metro.entity.po.Metro;
 import com.metro.entity.vo.MetroVO;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -29,4 +30,14 @@ public interface MetroMapper extends BaseMapper<Metro> {
      * @时间  2022/4/27 17:30
      **/
     MetroVO selectByMetroId(Integer metroId);
+
+    /*
+     * @创建者  WXG
+     * @描述   根据设备id获取对应的盘口信息
+     *          返回有两个参数
+     *           deviceId :"",
+     *           metroName :""
+     * @时间  2022/5/20 14:22
+     **/
+    List<Map<String,String>> selectMetroNameByDeviceId(List<String> list);
 }

+ 14 - 1
src/main/java/com/metro/mapper/PassreCordsMapper.java

@@ -3,11 +3,17 @@ package com.metro.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.metro.entity.po.Company;
 import com.metro.entity.po.PassreCords;
 import com.metro.entity.search.WarningSearch;
+import com.metro.entity.vo.PassreCordsGroupByTimeVO;
+import com.metro.entity.vo.PassreCordsLessVO;
+import com.metro.entity.vo.PassreCordsWarFruitVO;
 import com.metro.entity.vo.WarningVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @ClassName: PassreCordsMapper
  * @Description: TODO
@@ -17,6 +23,13 @@ import org.apache.ibatis.annotations.Param;
  * ...
  */
 public interface PassreCordsMapper  extends BaseMapper<PassreCords> {
-
     IPage<WarningVO> warningPageList(Page<WarningVO> page, @Param("warningSearch")WarningSearch warningSearch);
+    /*查询今日之前的数据*/
+    List<PassreCordsLessVO> selectBeforDataNumber(Company company);
+    /*查询今日的数据*/
+    List<PassreCordsLessVO> selectTodayDataNumber(@Param("companyId")String companyId,@Param("branchId")String branchId);
+    /*站点盘查人流量变化*/
+    List<PassreCordsGroupByTimeVO> selectDataShowMiddlerSite(Company company);
+    /*查询今日之前民警数据  type=1今日之前的数据 type=2今日数据*/
+    List<PassreCordsWarFruitVO> getWarFruit(Integer type);
 }

+ 22 - 0
src/main/java/com/metro/mapper/WarFruitMapper.java

@@ -0,0 +1,22 @@
+package com.metro.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.metro.entity.po.WarFruit;
+import com.metro.entity.search.PoliceSearch;
+import com.metro.entity.vo.WarFruitVO;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 战果统计表 Mapper 接口
+ * </p>
+ *
+ * @author wxg
+ * @since 2022-05-19
+ */
+public interface WarFruitMapper extends BaseMapper<WarFruit> {
+    /*民警列表分页*/
+    IPage<WarFruitVO> policePageList(Page<WarFruitVO> page, @Param("policeSearch")PoliceSearch policeSearch);
+}

+ 22 - 0
src/main/java/com/metro/service/DataShowService.java

@@ -0,0 +1,22 @@
+package com.metro.service;
+
+import com.metro.baseRe.BaseResponse;
+import com.metro.entity.dto.DataShowMiddlerDTO;
+import com.metro.entity.vo.*;
+
+import java.util.List;
+
+public interface DataShowService {
+    /*首页大屏上端数据获取 */
+    BaseResponse<DataShowTopVO> selectDataShowTop();
+    /*首页大屏中间左边站点人流量盘查TOP TOP20*/
+    BaseResponse<DataShowMiddleVO> selectDataShowMiddler(DataShowMiddlerDTO dataShowMiddlerDTO);
+    /*站点盘查人流量变化*/
+    BaseResponse<DataShowMiddleSiteVO> selectDataShowMiddlerSite(Integer id);
+    /*站点盘查人流量变化的站点列表获取*/
+    List<SiteVO> selectSiteList();
+    /*实时预警人员*/
+    List<DataShowWarningVO> selectWarningList();
+    /*实时预警详情*/
+    WarningDetailOneVO selectWarningDetail(Integer id);
+}

+ 1 - 1
src/main/java/com/metro/service/PassreCordsService.java

@@ -44,7 +44,7 @@ public interface PassreCordsService {
      * @描述  预警人员详情列表
      * @时间  2022/5/9 12:40
      **/
-    List<SelectPassreCordsPageListResp> warningDeatilList(String cardId);
+    List<SelectPassreCordsPageListResp> warningDeatilList(SelectPassreCordsPageListReq req);
     /*
      * @创建者  WXG
      * @描述  预警人员详情带图返回

+ 23 - 0
src/main/java/com/metro/service/WarFruitService.java

@@ -0,0 +1,23 @@
+package com.metro.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.metro.entity.search.PoliceSearch;
+import com.metro.entity.vo.WarFruitTopVO;
+import com.metro.entity.vo.WarFruitVO;
+
+/**
+ * <p>
+ * 战果统计表 服务类
+ * </p>
+ *
+ * @author wxg
+ * @since 2022-05-19
+ */
+public interface WarFruitService{
+    /*派出所盘查top10*/
+    WarFruitTopVO polliceOfficeTop10();
+    /*民警盘查top10*/
+    WarFruitTopVO policeTop10();
+    /*民警分页*/
+    IPage<WarFruitVO> policePageList(PoliceSearch policeSearch);
+}

+ 276 - 0
src/main/java/com/metro/service/impl/DataShowServiceImpl.java

@@ -0,0 +1,276 @@
+package com.metro.service.impl;
+/*
+ * @Description
+ * @Date 2022/5/17 11:10
+ * @Author wxg
+ * */
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.metro.baseRe.BaseResponse;
+import com.metro.entity.dto.DataShowMiddlerDTO;
+import com.metro.entity.enums.DataShowTopEnum;
+import com.metro.entity.po.Company;
+import com.metro.entity.po.DataShow;
+import com.metro.entity.po.JDevices;
+import com.metro.entity.po.PassreCords;
+import com.metro.entity.vo.*;
+import com.metro.mapper.CompanysMapper;
+import com.metro.mapper.DataShowMapper;
+import com.metro.mapper.JDevicesMapper;
+import com.metro.mapper.PassreCordsMapper;
+import com.metro.restful.ServiceException;
+import com.metro.service.CompanyService;
+import com.metro.service.DataShowService;
+import com.metro.service.JPersonsService;
+import com.metro.service.PassreCordsService;
+import com.metro.utils.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class DataShowServiceImpl implements DataShowService {
+
+    @Autowired
+    private JPersonsService jPersonsService;
+    @Resource
+    private DataShowMapper dataShowMapper;
+    @Resource
+    private PassreCordsMapper passreCordsMapper;
+    @Resource
+    private CompanysMapper companysMapper;
+    @Resource
+    private JDevicesMapper jDevicesMapper;
+    @Autowired
+    private CompanyService companyService;
+    @Autowired
+    private PassreCordsService passreCordsService;
+    @Override
+    public BaseResponse<DataShowTopVO> selectDataShowTop() {
+        /*
+         * 实现说明
+         * 总盘查人数:今日之前盘查人数 + 今日盘查人数
+         * 总预警人数: 今日之前预警人数 +今日预警人数
+         * 数据库中会存储几个数据
+         * 定时任务每天12点启动汇总
+         * 今日之前的总盘查人数
+         * 今日之前的总预警人数
+         * 今日之前的存疑人数
+         * 今日之前的抓铺人数
+         * */
+        JPersonVO jPersonVO = this.rootTrue();
+        Integer adminType = jPersonVO.getType();
+        DataShowTopVO dataShowTopVO = new DataShowTopVO();
+        Integer totalNumber;//盘查总人数
+        Integer totalWarningNumber;//总预警人数 = 总存疑人数 + 总抓捕人数
+        Integer totalDoubtNumber;//总存疑人数
+        Integer totalArrestNumber;//总抓捕人数
+
+        /*1.获取数据库中,今日0点之前的数据*/
+        List<Integer> list = new ArrayList<>();
+        Collections.addAll(list,
+                DataShowTopEnum.BERFORE_NUMBER.getType(),
+                DataShowTopEnum.BERFOR_WARNING_NUMBER.getType(),
+                DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType(),
+                DataShowTopEnum.BERFOR_ARREST_NUMBER.getType()
+        );
+        List<DataShow> dataShows = null;
+        Map<Integer, Integer> dataShowMap = null;//存储当前账号今日之前的数据
+        if (adminType == 1) {
+            dataShows = dataShowMapper.selectList(new LambdaQueryWrapper<DataShow>().in(DataShow::getType, list).eq(DataShow::getCompanyId, "").eq(DataShow::getBranchId, ""));
+        } else if (adminType == 2) {
+            dataShows = dataShowMapper.selectByCompanyIdGroup(jPersonVO.getCompanyId(), list);
+        } else {
+            throw new ServiceException("无权操作");
+        }
+        if (dataShows != null)
+            dataShowMap = dataShows.stream().collect(Collectors.toMap(DataShow::getType, DataShow::getNumber));
+
+        /*2.获取数据库中,今日0点之后的数据*/
+        Integer todayNumber = 0;//今日盘查人数
+        Integer todayWarningNumber = 0;//今日预警人数 = 今日存疑人数 + 今日抓捕人数
+        Integer todayDoubtNumber = 0;//今日存疑人数
+        Integer todayArrestNumber = 0;//今日抓捕人数
+
+        List<PassreCordsLessVO> passreCordsLessVOS = passreCordsMapper.selectTodayDataNumber(jPersonVO.getCompanyId() == null ? null:jPersonVO.getCompanyId(),null);
+
+        todayNumber = passreCordsLessVOS.stream().mapToInt(PassreCordsLessVO::getNumber).sum();
+        todayDoubtNumber = passreCordsLessVOS.stream().filter(p -> p.getPass() == 1 || p.getPass() == 3).mapToInt(PassreCordsLessVO::getNumber).sum();
+        todayArrestNumber = passreCordsLessVOS.stream().filter(p -> p.getPass() == 0).mapToInt(PassreCordsLessVO::getNumber).sum();
+        todayWarningNumber = todayDoubtNumber + todayArrestNumber;
+
+        if (dataShowMap != null) {
+            totalNumber = todayNumber + (dataShowMap.get(DataShowTopEnum.BERFORE_NUMBER.getType()) != null ? dataShowMap.get(DataShowTopEnum.BERFORE_NUMBER.getType()) : 0);
+            totalWarningNumber = todayWarningNumber + (dataShowMap.get(DataShowTopEnum.BERFOR_WARNING_NUMBER.getType()) != null ? dataShowMap.get(DataShowTopEnum.BERFOR_WARNING_NUMBER.getType()) : 0);
+            totalDoubtNumber = todayDoubtNumber + (dataShowMap.get(DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType()) != null ? dataShowMap.get(DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType()) : 0);
+            totalArrestNumber = todayArrestNumber + (dataShowMap.get(DataShowTopEnum.BERFOR_ARREST_NUMBER.getType()) != null ? dataShowMap.get(DataShowTopEnum.BERFOR_ARREST_NUMBER.getType()) : 0);
+        }else {
+            totalNumber = todayNumber;
+            totalWarningNumber = todayWarningNumber;
+            totalDoubtNumber = todayDoubtNumber;
+            totalArrestNumber = todayArrestNumber;
+        }
+        /*3.获取站点数量*/
+        LambdaQueryWrapper<Company> companyWrapper = new LambdaQueryWrapper<>();
+        companyWrapper.eq(StringUtils.isNotEmpty(jPersonVO.getCompanyId()), Company::getCompanyId, jPersonVO.getCompanyId());
+        Integer totalSiteNumber = companysMapper.selectCount(companyWrapper);
+        /*4.获取设备数量*/
+        LambdaQueryWrapper<JDevices> jDevicesMapperWrapper = new LambdaQueryWrapper<>();
+        jDevicesMapperWrapper.eq(StringUtils.isNotEmpty(jPersonVO.getCompanyId()), JDevices::getCompanyId, jPersonVO.getCompanyId());
+        Integer totalDeviceNumber = jDevicesMapper.selectCount(jDevicesMapperWrapper);
+        /*5.数据整合返回*/
+        dataShowTopVO.setTotalNumber(totalNumber);
+        dataShowTopVO.setTodayNumber(todayNumber);
+        dataShowTopVO.setTotalWarningNumber(totalWarningNumber);
+        dataShowTopVO.setTodayWarningNumber(todayWarningNumber);
+        dataShowTopVO.setTotalDoubtNumber(totalDoubtNumber);
+        dataShowTopVO.setTotalArrestNumber(totalArrestNumber);
+        dataShowTopVO.setTodayDoubtNumber(todayDoubtNumber);
+        dataShowTopVO.setTodayArrestNumber(todayArrestNumber);
+        dataShowTopVO.setTotalSiteNumber(totalSiteNumber);
+        dataShowTopVO.setTotalDeviceNumber(totalDeviceNumber);
+
+        return BaseResponse.ok(dataShowTopVO);
+    }
+
+    @Override
+    public BaseResponse<DataShowMiddleVO> selectDataShowMiddler(DataShowMiddlerDTO dataShowMiddlerDTO) {
+        JPersonVO jPersonVO = this.rootTrue();
+        Integer timeType = dataShowMiddlerDTO.getTimeType();
+        Integer passType = dataShowMiddlerDTO.getPassType();
+        List<Integer> list = new ArrayList<>();
+
+        /*传入共有四种情况*/
+        /*1.全部 +盘查*/
+        if(timeType == 1 && passType == 1){
+            Collections.addAll(list,
+                    DataShowTopEnum.BERFORE_NUMBER.getType(),
+                    DataShowTopEnum.TODAY_NUMBER.getType()
+            );
+        }
+        /*2.全部 +预警*/
+        else if(timeType == 1 && passType == 2){
+            Collections.addAll(list,
+                    DataShowTopEnum.BERFOR_WARNING_NUMBER.getType(),
+                    DataShowTopEnum.TODAY_WARNING_NUMBER.getType()
+            );
+        }
+        /*3.今日 +盘查*/
+        else if(timeType == 2 && passType == 1){
+            Collections.addAll(list,
+                    DataShowTopEnum.TODAY_NUMBER.getType()
+            );
+        }
+        /*4.今日 +预警*/
+        else if(timeType == 2 && passType == 2){
+            Collections.addAll(list,
+                    DataShowTopEnum.TODAY_WARNING_NUMBER.getType()
+            );
+        }else{throw new ServiceException("数据有误");}
+
+        List<DataShow> dataShowList = dataShowMapper.getDataShowListByCompanyIdAndBranchId(jPersonVO,list);
+        /*获取数据中companyMap 和barnchMap 暂时只要branchName*/
+//        Map<String, Company> companyMap = companyService.getCompanyMapByList(dataShowList, DataShow::getCompanyId);
+        Map<String, Company> barnchMap = companyService.getBranchMapByList(dataShowList,DataShow::getBranchId);
+        List<String> siteList = new ArrayList<>();
+        List<Integer> numberList = new ArrayList<>();
+        for (DataShow dataShow : dataShowList) {
+            numberList.add(dataShow.getNumber());
+            siteList.add(barnchMap.get(dataShow.getCompanyId()+dataShow.getBranchId()) == null ?
+                    "" : barnchMap.get(dataShow.getCompanyId()+dataShow.getBranchId()).getBranchName());
+        }
+        DataShowMiddleVO dataShowMiddleVO = new DataShowMiddleVO();
+        dataShowMiddleVO.setSiteList(siteList);
+        dataShowMiddleVO.setNumberList(numberList);
+        return BaseResponse.ok(dataShowMiddleVO);
+    }
+
+    @Override
+    public BaseResponse<DataShowMiddleSiteVO> selectDataShowMiddlerSite(Integer id) {
+        this.rootTrue();
+        if(id == null){//传值为空,则获取一个默认的数据
+            List<SiteVO> siteVOList = this.selectSiteList();
+            if(siteVOList == null || siteVOList.size() <= 0)throw new ServiceException("该账号没有站点");
+            SiteVO siteVO = siteVOList.get(0);
+            id = siteVO.getId();
+        }
+        Company company = companysMapper.selectById(id);
+        if(company == null )throw new ServiceException("传递id有误,没有查找到数据");
+
+        List<PassreCordsGroupByTimeVO> list = passreCordsMapper.selectDataShowMiddlerSite(company);
+        List<Integer> numberList = new ArrayList<>();
+
+        for (int i = 0; i < 12; i++) {
+            Integer number = 0;
+            for (int j = 0; j < list.size(); j++) {
+                PassreCordsGroupByTimeVO pco = list.get(j);
+                Integer time = pco.getTime();
+                int start = i*2;
+                int end = (i*2) + 2;
+                if(time >= start && time < end){
+                    number += pco.getNumber();
+                }
+            }
+            numberList.add(number);
+        }
+        DataShowMiddleSiteVO dataShowMiddleSiteVO = new DataShowMiddleSiteVO();
+        dataShowMiddleSiteVO.setId(id);
+        dataShowMiddleSiteVO.setNumberList(numberList);
+        return BaseResponse.ok(dataShowMiddleSiteVO);
+    }
+
+    @Override
+    public List<SiteVO> selectSiteList() {
+        JPersonVO jPersonVO = this.rootTrue();
+        LambdaQueryWrapper<Company> companyWrapper = new LambdaQueryWrapper<>();
+        companyWrapper.eq(StringUtils.isNotEmpty(jPersonVO.getCompanyId()), Company::getCompanyId, jPersonVO.getCompanyId());
+        companyWrapper.eq(StringUtils.isNotEmpty(jPersonVO.getBranchId()), Company::getBranchId, jPersonVO.getBranchId());
+        List<Company> companyList = companysMapper.selectList(companyWrapper);
+        return companyList.stream().map(p ->
+                new SiteVO().setId(p.getId()).setName(p.getCompanyName() + "-" + p.getBranchName())
+        ).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<DataShowWarningVO> selectWarningList() {
+        JPersonVO jPersonVO = this.rootTrue();
+        /*根据账号查询companyId和branchId 然后预警人员类型为0 1 3*/
+        LambdaQueryWrapper<PassreCords> PassreCordsWrapper = new LambdaQueryWrapper<>();
+        PassreCordsWrapper.eq(StringUtils.isNotEmpty(jPersonVO.getCompanyId()), PassreCords::getCompanyId, jPersonVO.getCompanyId());
+        PassreCordsWrapper.eq(StringUtils.isNotEmpty(jPersonVO.getBranchId()), PassreCords::getBranchId, jPersonVO.getBranchId());
+        List<Integer> list = new ArrayList<>();
+        Collections.addAll(list,0,1,3);
+        PassreCordsWrapper.in(PassreCords::getPass,list);
+        PassreCordsWrapper.orderByDesc(PassreCords::getPassTime);
+        Page<PassreCords> selectPage = passreCordsMapper.selectPage(new Page<>(0, 6), PassreCordsWrapper);
+        List<PassreCords> records = selectPage.getRecords();
+
+        return records.stream().map(p -> {
+            DataShowWarningVO dataShowWarningVO = new DataShowWarningVO();
+            BeanUtils.copyProperties(p,dataShowWarningVO);
+            return dataShowWarningVO;
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    public WarningDetailOneVO selectWarningDetail(Integer id) {
+        return passreCordsService.warningDeatil(id);
+    }
+
+    private JPersonVO rootTrue(){
+        JPersonVO jPersonVO = jPersonsService.getUserInfo();
+        Integer adminType = jPersonVO.getType();
+        if (adminType != 1 && adminType != 2) {
+            throw new ServiceException("没有权限");
+        }
+        return jPersonVO;
+    }
+}

+ 17 - 3
src/main/java/com/metro/service/impl/PassreCordsServiceImpl.java

@@ -30,6 +30,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -123,11 +124,18 @@ public class PassreCordsServiceImpl extends BaseService implements PassreCordsSe
     }
 
     @Override
-    public List<SelectPassreCordsPageListResp> warningDeatilList(String cardId) {
-        SelectPassreCordsPageListReq req = new SelectPassreCordsPageListReq();
-        req.setCardId(cardId);
+    public List<SelectPassreCordsPageListResp> warningDeatilList(SelectPassreCordsPageListReq req) {
         List<PassreCords> records = passreCordsMapper.selectList(pageWrapper(req,2));
 
+        Map<String,String> map = new HashMap<>();
+        List<String> collect = records.stream().map(p -> p.getMsgId().substring(0, 8)).collect(Collectors.toSet()).stream().collect(Collectors.toList());
+        List<Map<String, String>> maps = metroMapper.selectMetroNameByDeviceId(collect);
+        if(maps != null) {
+            for (Map<String, String> stringStringMap : maps) {
+                map.put(stringStringMap.get("deviceId"), stringStringMap.get("metroName"));
+            }
+        }
+
         /*获取数据中companyMap 和barnchMap*/
         Map<String, Company> companyMap = companyService.getCompanyMapByList(records,PassreCords::getCompanyId);
         Map<String, Company> barnchMap = companyService.getBranchMapByList(records,PassreCords::getBranchId);
@@ -142,6 +150,10 @@ public class PassreCordsServiceImpl extends BaseService implements PassreCordsSe
         List<SelectPassreCordsPageListResp> list = records.stream().map(passreCords -> {
             SelectPassreCordsPageListResp userCheckData = new SelectPassreCordsPageListResp();
             BeanUtils.copyProperties(passreCords, userCheckData);
+            String deviceId = StringUtils.isEmpty(passreCords.getMsgId()) ? null : passreCords.getMsgId().substring(0,8);
+            if(deviceId != null){
+                userCheckData.setMetroName(map.get(deviceId) != null?map.get(deviceId):"");
+            }
             return userCheckData;
         }).collect(Collectors.toList());
 
@@ -202,6 +214,8 @@ public class PassreCordsServiceImpl extends BaseService implements PassreCordsSe
         wrapper.eq(StringUtils.isNotEmpty(req.getCardId()), PassreCords::getCardId, req.getCardId());
         wrapper.eq(StringUtils.isNotEmpty(req.getPhone()), PassreCords::getPhone, req.getPhone());
         wrapper.eq(req.getPass() != null, PassreCords::getPass, req.getPass());
+        wrapper.gt(StringUtils.isNotEmpty(req.getStartTime()), PassreCords::getPassTime, req.getStartTime());
+        wrapper.lt(StringUtils.isNotEmpty(req.getEndTime()), PassreCords::getPassTime, req.getEndTime());
         wrapper.orderByDesc(PassreCords::getPassTime);
         return wrapper;
     }

+ 140 - 0
src/main/java/com/metro/service/impl/WarFruitServiceImpl.java

@@ -0,0 +1,140 @@
+package com.metro.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.metro.entity.po.Company;
+import com.metro.entity.search.PoliceSearch;
+import com.metro.entity.vo.*;
+import com.metro.mapper.CompanysMapper;
+import com.metro.mapper.DataShowMapper;
+import com.metro.mapper.WarFruitMapper;
+import com.metro.restful.ServiceException;
+import com.metro.service.CompanyService;
+import com.metro.service.JPersonsService;
+import com.metro.service.WarFruitService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 战果统计表 服务实现类
+ * </p>
+ *
+ * @author wxg
+ * @since 2022-05-19
+ */
+@Service
+public class WarFruitServiceImpl implements WarFruitService {
+    @Autowired
+    private JPersonsService jPersonsService;
+    @Resource
+    private WarFruitMapper warFruitMapper;
+    @Resource
+    private CompanysMapper companysMapper;
+    @Resource
+    private CompanyService companyService;
+    @Resource
+    private DataShowMapper dataShowMapper;
+    @Override
+    public WarFruitTopVO polliceOfficeTop10() {
+        JPersonVO jPersonVO = this.rootTrue();
+        if(jPersonVO.getType() == 2)throw new ServiceException("没有权限");
+        List<DataShowTopVO> dataShowList = dataShowMapper.polliceOfficeTop10();
+        Map<String, Company> companyMap = companyService.getCompanyMapByList(dataShowList, DataShowTopVO::getCompanyId);
+        List<String> siteList = new ArrayList<>();//横坐标
+        List<Integer> numberList = new ArrayList<>();//盘查人数
+        List<Integer> doubtList = new ArrayList<>();//异常人数
+        List<Integer> arrestList = new ArrayList<>();//抓捕人数
+        for (DataShowTopVO dataShowTopVO : dataShowList) {
+            siteList.add(companyMap.get(dataShowTopVO.getCompanyId()) == null?"" : companyMap.get(dataShowTopVO.getCompanyId()).getCompanyName());
+            Integer totalNumber = dataShowTopVO.getTotalNumber() == null ? 0 : dataShowTopVO.getTotalNumber();
+            Integer todayNumber = dataShowTopVO.getTodayNumber() == null ? 0 : dataShowTopVO.getTodayNumber();
+            Integer totalDoubtNumber = dataShowTopVO.getTotalDoubtNumber() == null ? 0 : dataShowTopVO.getTotalDoubtNumber();
+            Integer todayDoubtNumber = dataShowTopVO.getTodayDoubtNumber() == null ? 0 : dataShowTopVO.getTodayDoubtNumber();
+            Integer totalArrestNumber = dataShowTopVO.getTotalArrestNumber() == null ? 0 : dataShowTopVO.getTotalArrestNumber();
+            Integer todayArrestNumber = dataShowTopVO.getTodayArrestNumber() == null ? 0 : dataShowTopVO.getTodayArrestNumber();
+            numberList.add(totalNumber + todayNumber);//之前盘查 + 今日
+            doubtList.add(totalDoubtNumber + todayDoubtNumber);//之前异常 + 今日
+            arrestList.add(totalArrestNumber + todayArrestNumber);//之前抓捕 + 今日
+        }
+        WarFruitTopVO warFruitTopVO = new WarFruitTopVO();
+        warFruitTopVO.setSiteList(siteList);
+        warFruitTopVO.setNumberList(numberList);
+        warFruitTopVO.setDoubtList(doubtList);
+        warFruitTopVO.setArrestList(arrestList);
+
+        return warFruitTopVO;
+    }
+
+    @Override
+    public WarFruitTopVO policeTop10() {
+        JPersonVO jPersonVO = this.rootTrue();
+        PoliceSearch policeSearch = new PoliceSearch();
+        policeSearch.setPageNum(0);
+        policeSearch.setPageSize(10);
+        policeSearch.setCompanyId(jPersonVO.getCompanyId() !=null ? jPersonVO.getCompanyId() : null);
+        policeSearch.setBranchId(jPersonVO.getBranchId() !=null ? jPersonVO.getBranchId() : null);
+        Page<WarFruitVO> page = new Page<>(policeSearch.getPageNum(),policeSearch.getPageSize());
+        IPage<WarFruitVO>  pageList =warFruitMapper.policePageList(page,policeSearch);
+        List<WarFruitVO> list = pageList.getRecords();
+        List<String> siteList = new ArrayList<>();//横坐标
+        List<Integer> numberList = new ArrayList<>();//盘查人数
+        List<Integer> doubtList = new ArrayList<>();//异常人数
+        List<Integer> arrestList = new ArrayList<>();//抓捕人数
+        for (WarFruitVO warFruitVO : list) {
+            siteList.add(warFruitVO.getXm() != null ?warFruitVO.getXm() :"");
+            Integer totalNumber = warFruitVO.getTotalNumber() == null ? 0 : warFruitVO.getTotalNumber();
+            Integer todayNumber = warFruitVO.getTodayNumber() == null ? 0 : warFruitVO.getTodayNumber();
+            Integer totalDoubtNumber = warFruitVO.getTotalDoubtNumber() == null ? 0 : warFruitVO.getTotalDoubtNumber();
+            Integer todayDoubtNumber = warFruitVO.getTodayDoubtNumber() == null ? 0 : warFruitVO.getTodayDoubtNumber();
+            Integer totalArrestNumber = warFruitVO.getTotalArrestNumber() == null ? 0 : warFruitVO.getTotalArrestNumber();
+            Integer todayArrestNumber = warFruitVO.getTodayArrestNumber() == null ? 0 : warFruitVO.getTodayArrestNumber();
+            numberList.add(totalNumber + todayNumber);//之前盘查 + 今日
+            doubtList.add(totalDoubtNumber + todayDoubtNumber);//之前异常 + 今日
+            arrestList.add(totalArrestNumber + todayArrestNumber);//之前抓捕 + 今日
+        }
+        WarFruitTopVO warFruitTopVO = new WarFruitTopVO();
+        warFruitTopVO.setSiteList(siteList);
+        warFruitTopVO.setNumberList(numberList);
+        warFruitTopVO.setDoubtList(doubtList);
+        warFruitTopVO.setArrestList(arrestList);
+        return warFruitTopVO;
+    }
+
+    @Override
+    public IPage<WarFruitVO> policePageList(PoliceSearch policeSearch) {
+        JPersonVO jPersonVO = this.rootTrue();
+        policeSearch.setCompanyId(jPersonVO.getCompanyId() !=null ? jPersonVO.getCompanyId() : null);
+        policeSearch.setBranchId(jPersonVO.getBranchId() !=null ? jPersonVO.getBranchId() : null);
+        policeSearch.setType(1);
+        Page<WarFruitVO> page = new Page<>(policeSearch.getPageNum(),policeSearch.getPageSize());
+        IPage<WarFruitVO>  pageList =warFruitMapper.policePageList(page,policeSearch);
+        List<WarFruitVO> list = pageList.getRecords();
+        for (WarFruitVO warFruitVO : list) {
+            Integer totalNumber = warFruitVO.getTotalNumber() == null ? 0 : warFruitVO.getTotalNumber();
+            Integer todayNumber = warFruitVO.getTodayNumber() == null ? 0 : warFruitVO.getTodayNumber();
+            Integer totalDoubtNumber = warFruitVO.getTotalDoubtNumber() == null ? 0 : warFruitVO.getTotalDoubtNumber();
+            Integer todayDoubtNumber = warFruitVO.getTodayDoubtNumber() == null ? 0 : warFruitVO.getTodayDoubtNumber();
+            Integer totalArrestNumber = warFruitVO.getTotalArrestNumber() == null ? 0 : warFruitVO.getTotalArrestNumber();
+            Integer todayArrestNumber = warFruitVO.getTodayArrestNumber() == null ? 0 : warFruitVO.getTodayArrestNumber();
+            warFruitVO.setTotalNumber(totalNumber + todayNumber);//之前盘查 + 今日
+            warFruitVO.setTotalDoubtNumber(totalDoubtNumber + todayDoubtNumber);//之前异常 + 今日
+            warFruitVO.setTotalArrestNumber(totalArrestNumber + todayArrestNumber);//之前抓捕 + 今日
+        }
+        return pageList;
+    }
+    private JPersonVO rootTrue(){
+        JPersonVO jPersonVO = jPersonsService.getUserInfo();
+        Integer adminType = jPersonVO.getType();
+        if (adminType != 1 && adminType != 2) {
+            throw new ServiceException("没有权限");
+        }
+        return jPersonVO;
+    }
+}

+ 105 - 0
src/main/java/com/metro/service/job/AdminDataShowTask.java

@@ -0,0 +1,105 @@
+package com.metro.service.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.metro.entity.enums.DataShowTopEnum;
+import com.metro.entity.po.Company;
+import com.metro.entity.po.DataShow;
+import com.metro.entity.vo.PassreCordsLessVO;
+import com.metro.mapper.CompanysMapper;
+import com.metro.mapper.DataShowMapper;
+import com.metro.mapper.PassreCordsMapper;
+import com.metro.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @description:
+ * @ClassName AdminDataShowTask
+ * @Author WXG
+ * @Date 2021/11/12 20:52
+ */
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@EnableAsync
+@Slf4j
+public class AdminDataShowTask {
+
+    @Resource
+    @Lazy
+    private PassreCordsMapper passreCordsMapper;
+    @Resource
+    @Lazy
+    private DataShowMapper dataShowMapper;
+    @Lazy
+    @Resource
+    private CompanysMapper companysMapper;
+    /*
+    * 每天0点 统计一下DataShowTopEnum中 type 1-4的数据
+    * */
+    @Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai")
+    @PostConstruct
+    @Async
+    public void dailyDataStatistics() {
+        log.info("----------开始------每日数据统计-------------");
+        /*查询出所有*/
+        List<Company> companyList = companysMapper.selectList(new LambdaQueryWrapper<>());
+        companyList.add(new Company().setCompanyId("").setBranchId(""));
+
+        for (Company company : companyList) {
+            Integer totalNumber = 0;//今日之前的盘查人数
+            Integer totalWarningNumber = 0;//今日之前的预警人数
+            Integer totalDoubtNumber = 0;//今日之前的存疑人数
+            Integer totalArrestNumber = 0;//今日之前的抓铺人数
+            List<PassreCordsLessVO> passreCordsLessVO = passreCordsMapper.selectBeforDataNumber(company);
+
+            totalNumber = passreCordsLessVO.stream().mapToInt(PassreCordsLessVO::getNumber).sum();
+            totalDoubtNumber = passreCordsLessVO.stream().filter(p -> p.getPass() == 1 || p.getPass() == 3).mapToInt(PassreCordsLessVO::getNumber).sum();
+            totalArrestNumber = passreCordsLessVO.stream().filter(p -> p.getPass() == 0).mapToInt(PassreCordsLessVO::getNumber).sum();
+            totalWarningNumber = totalDoubtNumber + totalArrestNumber;
+
+            DataShow dataShow1 = selectByCompanyIdAndType(company,DataShowTopEnum.BERFORE_NUMBER.getType());
+            DataShow dataShow2 = selectByCompanyIdAndType(company,DataShowTopEnum.BERFOR_WARNING_NUMBER.getType());
+            DataShow dataShow3 = selectByCompanyIdAndType(company,DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType());
+            DataShow dataShow4 = selectByCompanyIdAndType(company,DataShowTopEnum.BERFOR_ARREST_NUMBER.getType());
+            DataShowEdit(dataShow1,DataShowTopEnum.BERFORE_NUMBER.getType(),totalNumber,company);
+            DataShowEdit(dataShow2,DataShowTopEnum.BERFOR_WARNING_NUMBER.getType(),totalWarningNumber,company);
+            DataShowEdit(dataShow3,DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType(),totalDoubtNumber,company);
+            DataShowEdit(dataShow4,DataShowTopEnum.BERFOR_ARREST_NUMBER.getType(),totalArrestNumber,company);
+        }
+
+
+        log.info("----------完成------每日数据统计-------------");
+    }
+    private DataShow selectByCompanyIdAndType(Company company, Integer type){
+        LambdaQueryWrapper<DataShow> dataShow = new LambdaQueryWrapper<>();
+        dataShow.eq(DataShow::getType, type);
+        dataShow.eq(StringUtils.isNotNull(company.getCompanyId()),DataShow::getCompanyId, company.getCompanyId());
+        dataShow.eq(StringUtils.isNotNull(company.getBranchId()),DataShow::getBranchId, company.getBranchId());
+        return dataShowMapper.selectOne(dataShow);
+    }
+
+    private void DataShowEdit(DataShow dataShow , Integer type ,Integer number,Company company){
+        if(dataShow != null){
+            dataShow.setNumber(number);
+            dataShowMapper.updateById(dataShow);
+        }else {
+            dataShow = new DataShow();
+            dataShow.setType(type);
+            dataShow.setNumber(number);
+            dataShow.setCompanyId(company.getCompanyId());
+            dataShow.setBranchId(company.getBranchId());
+            dataShowMapper.insert(dataShow);
+        }
+    }
+
+
+}

+ 101 - 0
src/main/java/com/metro/service/job/AdminDataShowTodayTask.java

@@ -0,0 +1,101 @@
+package com.metro.service.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.metro.entity.enums.DataShowTopEnum;
+import com.metro.entity.po.Company;
+import com.metro.entity.po.DataShow;
+import com.metro.entity.vo.PassreCordsLessVO;
+import com.metro.mapper.CompanysMapper;
+import com.metro.mapper.DataShowMapper;
+import com.metro.mapper.PassreCordsMapper;
+import com.metro.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @description:
+ * @ClassName AdminDataShowTask
+ * @Author WXG
+ * @Date 2021/11/12 20:52
+ */
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@EnableAsync
+@Slf4j
+public class AdminDataShowTodayTask {
+
+    @Resource
+    @Lazy
+    private PassreCordsMapper passreCordsMapper;
+    @Resource
+    @Lazy
+    private DataShowMapper dataShowMapper;
+    @Lazy
+    @Resource
+    private CompanysMapper companysMapper;
+    /*
+    * 每10分钟 统计一下DataShowTopEnum中 type 5-6的数据
+    * */
+    @Scheduled(fixedRate = 600000,zone = "Asia/Shanghai")
+    @Async
+    public void dailyDataStatistics() {
+        log.info("----------开始------每日10分钟数据统计-------------");
+
+        /*查询出所有站点*/
+        List<Company> companyList = companysMapper.selectList(new LambdaQueryWrapper<>());
+
+        for (Company company : companyList) {
+            List<PassreCordsLessVO> passreCordsLessVOS = passreCordsMapper.selectTodayDataNumber(company.getCompanyId(), company.getBranchId());
+
+            /*2.获取数据库中,今日0点之后的数据*/
+            Integer todayNumber = 0;//今日盘查人数
+            Integer todayWarningNumber = 0;//今日预警人数 = 今日存疑人数 + 今日抓捕人数
+            Integer todayDoubtNumber = 0;//今日存疑人数
+            Integer todayArrestNumber = 0;//今日抓捕人数
+            todayNumber = passreCordsLessVOS.stream().mapToInt(PassreCordsLessVO::getNumber).sum();
+            todayDoubtNumber = passreCordsLessVOS.stream().filter(p -> p.getPass() == 1 || p.getPass() == 3).mapToInt(PassreCordsLessVO::getNumber).sum();
+            todayArrestNumber = passreCordsLessVOS.stream().filter(p -> p.getPass() == 0).mapToInt(PassreCordsLessVO::getNumber).sum();
+            todayWarningNumber = todayDoubtNumber + todayArrestNumber;
+
+            DataShow dataShow5 = selectByCompanyIdAndType(company, DataShowTopEnum.TODAY_NUMBER.getType());
+            DataShow dataShow6 = selectByCompanyIdAndType(company, DataShowTopEnum.TODAY_WARNING_NUMBER.getType());
+            DataShow dataShow7 = selectByCompanyIdAndType(company, DataShowTopEnum.TODAY_DOUBT_NUMBER.getType());
+            DataShow dataShow8 = selectByCompanyIdAndType(company, DataShowTopEnum.TODAY_ARREST_NUMBER.getType());
+
+            DataShowEdit(dataShow5,DataShowTopEnum.TODAY_NUMBER.getType(),todayNumber,company);
+            DataShowEdit(dataShow6,DataShowTopEnum.TODAY_WARNING_NUMBER.getType(),todayWarningNumber,company);
+            DataShowEdit(dataShow7,DataShowTopEnum.TODAY_DOUBT_NUMBER.getType(),todayDoubtNumber,company);
+            DataShowEdit(dataShow8,DataShowTopEnum.TODAY_ARREST_NUMBER.getType(),todayArrestNumber,company);
+
+        }
+        log.info("----------完成------每日10分钟数据统计-------------");
+    }
+    private DataShow selectByCompanyIdAndType(Company company, Integer type){
+        LambdaQueryWrapper<DataShow> dataShow = new LambdaQueryWrapper<>();
+        dataShow.eq(DataShow::getType, type);
+        dataShow.eq(StringUtils.isNotNull(company.getCompanyId()),DataShow::getCompanyId, company.getCompanyId());
+        dataShow.eq(StringUtils.isNotNull(company.getBranchId()),DataShow::getBranchId, company.getBranchId());
+        return dataShowMapper.selectOne(dataShow);
+    }
+    private void DataShowEdit(DataShow dataShow , Integer type ,Integer number,Company company){
+        if(dataShow != null){
+            dataShow.setNumber(number);
+            dataShowMapper.updateById(dataShow);
+        }else {
+            dataShow = new DataShow();
+            dataShow.setType(type);
+            dataShow.setNumber(number);
+            dataShow.setCompanyId(company.getCompanyId());
+            dataShow.setBranchId(company.getBranchId());
+            dataShowMapper.insert(dataShow);
+        }
+    }
+}

+ 79 - 0
src/main/java/com/metro/service/job/WarFruitTask.java

@@ -0,0 +1,79 @@
+package com.metro.service.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.metro.entity.po.WarFruit;
+import com.metro.entity.vo.PassreCordsWarFruitVO;
+import com.metro.mapper.PassreCordsMapper;
+import com.metro.mapper.WarFruitMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @description:
+ * @ClassName AdminDataShowTask
+ * @Author WXG
+ * @Date 2021/11/12 20:52
+ */
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@EnableAsync
+@Slf4j
+public class WarFruitTask {
+
+    @Resource
+    @Lazy
+    private PassreCordsMapper passreCordsMapper;
+    @Resource
+    @Lazy
+    private WarFruitMapper warFruitMapper;
+    /*
+    * 每天0点 民警的每日数据统计
+    * */
+    @Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai")
+    @PostConstruct
+    @Async
+    public void dailyDataStatistics() {
+        log.info("----------开始------民警每日数据统计-------------");
+        /*1.查出需要的数据*/
+        List<PassreCordsWarFruitVO> passreCordsWarFruitVOList = passreCordsMapper.getWarFruit(1);
+        for (PassreCordsWarFruitVO passreCordsWarFruitVO : passreCordsWarFruitVOList) {
+            WarFruitEdit(passreCordsWarFruitVO);
+        }
+        log.info("----------完成------民警每日数据统计-------------");
+    }
+
+    private void WarFruitEdit(PassreCordsWarFruitVO pcv){
+        LambdaQueryWrapper<WarFruit> warFruitWrapper = new LambdaQueryWrapper<>();
+        warFruitWrapper.eq(WarFruit::getCardId,pcv.getCardId());
+        WarFruit warFruit = warFruitMapper.selectOne(warFruitWrapper);
+        Integer type = 0;// 1-insert 0=update
+        if(warFruit == null){
+            warFruit = new WarFruit();
+            type = 1;
+        }
+        Integer normalNumber = pcv.getNormalNumber() == null ? 0 : pcv.getNormalNumber();
+        Integer doubtNumber = pcv.getDoubtNumber() == null ? 0 : pcv.getDoubtNumber();
+        Integer arrestNumber = pcv.getArrestNumber() == null ? 0 : pcv.getArrestNumber();
+        warFruit.setCardId(pcv.getCardId());
+        warFruit.setTotalNumber(normalNumber + doubtNumber + arrestNumber);
+        warFruit.setTotalDoubtNumber(doubtNumber);
+        warFruit.setTotalArrestNumber(arrestNumber);
+        warFruit.setTodayNumber(0);
+        warFruit.setTodayDoubtNumber(0);
+        warFruit.setTodayArrestNumber(0);
+        if(type == 1 ){
+            warFruitMapper.insert(warFruit);
+        }else {
+            warFruitMapper.updateById(warFruit);
+        }
+    }
+}

+ 78 - 0
src/main/java/com/metro/service/job/WarFruitTodayTask.java

@@ -0,0 +1,78 @@
+package com.metro.service.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.metro.entity.po.WarFruit;
+import com.metro.entity.vo.PassreCordsWarFruitVO;
+import com.metro.mapper.PassreCordsMapper;
+import com.metro.mapper.WarFruitMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @description:
+ * @ClassName AdminDataShowTask
+ * @Author WXG
+ * @Date 2021/11/12 20:52
+ */
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@EnableAsync
+@Slf4j
+public class WarFruitTodayTask {
+
+    @Resource
+    @Lazy
+    private PassreCordsMapper passreCordsMapper;
+    @Resource
+    @Lazy
+    private WarFruitMapper warFruitMapper;
+    /*
+    * 每天0点 民警的每日数据统计
+    * */
+    @Scheduled(fixedRate = 600000,zone = "Asia/Shanghai")
+    @Async
+    public void dailyDataStatistics() {
+        log.info("----------开始------民警每10分钟数据统计-------------");
+        /*1.查出需要的数据*/
+        List<PassreCordsWarFruitVO> passreCordsWarFruitVOList = passreCordsMapper.getWarFruit(2);
+        for (PassreCordsWarFruitVO passreCordsWarFruitVO : passreCordsWarFruitVOList) {
+            WarFruitEdit(passreCordsWarFruitVO);
+        }
+        log.info("----------完成------民警每10分钟数据统计-------------");
+    }
+
+    private void WarFruitEdit(PassreCordsWarFruitVO pcv){
+        LambdaQueryWrapper<WarFruit> warFruitWrapper = new LambdaQueryWrapper<>();
+        warFruitWrapper.eq(WarFruit::getCardId,pcv.getCardId());
+        WarFruit warFruit = warFruitMapper.selectOne(warFruitWrapper);
+        Integer type = 0;// 1-insert 0=update
+        if(warFruit == null){
+            warFruit = new WarFruit();
+            type = 1;
+            warFruit.setTotalNumber(0);
+            warFruit.setTotalDoubtNumber(0);
+            warFruit.setTotalArrestNumber(0);
+        }
+        Integer normalNumber = pcv.getNormalNumber() == null ? 0 : pcv.getNormalNumber();
+        Integer doubtNumber = pcv.getDoubtNumber() == null ? 0 : pcv.getDoubtNumber();
+        Integer arrestNumber = pcv.getArrestNumber() == null ? 0 : pcv.getArrestNumber();
+
+        warFruit.setCardId(pcv.getCardId());
+        warFruit.setTodayNumber(normalNumber + doubtNumber + arrestNumber);
+        warFruit.setTodayDoubtNumber(doubtNumber);
+        warFruit.setTodayArrestNumber(arrestNumber);
+        if(type == 1 ){
+            warFruitMapper.insert(warFruit);
+        }else {
+            warFruitMapper.updateById(warFruit);
+        }
+    }
+}

+ 4 - 2
src/main/resources/application.yml

@@ -21,7 +21,9 @@ server:
 spring:
   application:
     name: metro
-
+  jackson:
+    date-format: yyyy-MM-dd HH:mm:ss
+    time-zone: GMT+8
   # sa-token配置
   sa-token:
     # token名称 (同时也是cookie名称)
@@ -50,7 +52,7 @@ mybatis-plus:
   mapper-locations: classpath*:/mapper/*Mapper.xml
   configuration:
     map-underscore-to-camel-case: true
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 # Swagger配置
 swagger:
   # 是否开启swagger

+ 69 - 0
src/main/resources/mapper/DataShowMapper.xml

@@ -0,0 +1,69 @@
+<?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.metro.mapper.DataShowMapper">
+
+
+    <select id="selectByCompanyIdGroup" resultType="com.metro.entity.po.DataShow">
+        select
+            company_id,
+            type,
+            sum(number) as number
+        from data_show
+        where company_id = #{companyId}
+        <if test="typeList != null and typeList.size()>0 ">
+            and type in
+            <foreach collection="typeList" item="type" index="index"
+                     open="(" close=")" separator=",">
+                #{type}
+            </foreach>
+        </if>
+        group by company_id,type
+    </select>
+    <select id="getDataShowListByCompanyIdAndBranchId" resultType="com.metro.entity.po.DataShow">
+        select
+        company_id,
+        branch_id,
+        sum(number) as number
+        from data_show
+        <where>
+            <if test="typeList != null and typeList.size()>0 ">
+                and type in
+                <foreach collection="typeList" item="type" index="index"
+                         open="(" close=")" separator=",">
+                    #{type}
+                </foreach>
+            </if>
+            <if test="jPersonVO.companyId != null and jPersonVO.companyId != '' ">
+                AND  company_id = #{jPersonVO.companyId}
+            </if>
+            <if test="jPersonVO.branchId != null and jPersonVO.branchId != '' ">
+                AND  branch_id = #{jPersonVO.branchId}
+            </if>
+        </where>
+        group by company_id,branch_id
+        order by number desc
+    </select>
+    <select id="polliceOfficeTop10" resultType="com.metro.entity.vo.DataShowTopVO">
+        SELECT
+            t.company_id,
+            Max(if(t.type = 1,t.number,0)) as totalNumber,
+            MAX(if(t.type = 2,t.number,0)) as totalWarningNumber,
+            MAX(if(t.type = 3,t.number,0)) as totalDoubtNumber,
+            MAX(if(t.type = 4,t.number,0)) as totalArrestNumber,
+            MAX(if(t.type = 5,t.number,0)) as todayNumber,
+            MAX(if(t.type = 6,t.number,0)) as todayWarningNumber,
+            MAX(if(t.type = 7,t.number,0)) as todayDoubtNumber,
+            MAX(if(t.type = 8,t.number,0)) as todayArrestNumber
+        from (
+                 select
+                     company_id,
+                     type,
+                     sum(number) as number
+                 from data_show
+                 where company_id is not null and company_id !=''
+                 GROUP BY company_id,type
+             )t
+        GROUP BY t.company_id
+        ORDER BY (totalNumber + todayNumber) desc
+    </select>
+</mapper>

+ 17 - 0
src/main/resources/mapper/MetroMapper.xml

@@ -34,4 +34,21 @@
                  LEFT JOIN j_metro jm3 on jm3.id  = jm2.pid
         where jm1.id = #{metroId}
     </select>
+    <select id="selectMetroNameByDeviceId" resultType="java.util.Map">
+        select
+        d.device_id as deviceId,
+        CONCAT(jm3.name,"-",jm2.name,"-",jm1.name) as metroName
+        from j_devices d
+        LEFT JOIN j_devices_metro dm on d.id = dm.devices_id
+        LEFT JOIN j_metro jm1 on jm1.id  = dm.metro_id
+        LEFT JOIN j_metro jm2 on jm2.id  = jm1.pid
+        LEFT JOIN j_metro jm3 on jm3.id  = jm2.pid
+        <where>
+            jm1.id is not null and
+            d.device_id in
+            <foreach collection="list" index="index" item="deviceId" open="(" close=")" separator=",">
+                #{deviceId}
+            </foreach>
+        </where>
+    </select>
 </mapper>

+ 93 - 7
src/main/resources/mapper/PassreCordsMapper.xml

@@ -5,11 +5,13 @@
 
     <select id="warningPageList" resultType="com.metro.entity.vo.WarningVO">
         SELECT
-            card_id,
-            xm,
-            phone,
-            company_id,
-            branch_id
+        card_id,
+        xm,
+        phone,
+        company_id,
+        branch_id,
+        max(id) as id,
+        max(pass_time) as passTime
         from j_passrecords
         <where>
             <if test="warningSearch.companyId !=null">
@@ -19,7 +21,7 @@
                 and branch_id =# {warningSearch.branchId}
             </if>
             <if test="warningSearch.xm !=null and warningSearch.xm !=''">
-                and xm = #{warningSearch.xm}
+                and xm LIKE CONCAT('%',#{warningSearch.xm},'%')
             </if>
             <if test="warningSearch.cardId !=null and warningSearch.cardId !=''">
                 and card_id = #{warningSearch.cardId}
@@ -27,8 +29,92 @@
             <if test="warningSearch.phone !=null and warningSearch.phone !=''">
                 and phone = #{warningSearch.phone}
             </if>
+            <if test="warningSearch.startTime != null and warningSearch.startTime != ''">
+                AND  <![CDATA[ pass_time >= #{startTime}]]>
+            </if>
+            <if test="warningSearch.endTime != null and warningSearch.endTime != '' ">
+                AND  <![CDATA[ pass_time <= #{endTime}]]>
+            </if>
         </where>
         GROUP BY card_id,xm,phone,company_id,branch_id
-        order by xm
+        order by id desc
+    </select>
+    <select id="selectBeforDataNumber" resultType="com.metro.entity.vo.PassreCordsLessVO">
+        select
+        pass,
+        count(1) as number
+        from
+        j_passrecords
+        <where>
+            pass_time &lt; (SELECT DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'))
+            <if test="companyId != null and companyId != '' ">
+                AND company_id = #{companyId}
+            </if>
+            <if test="branchId != null and branchId != '' ">
+                AND branch_id = #{branchId}
+            </if>
+        </where>
+        group by pass
+    </select>
+    <select id="selectTodayDataNumber" resultType="com.metro.entity.vo.PassreCordsLessVO">
+        select
+        pass,
+        count(1) as number
+        from
+        j_passrecords
+        where pass_time &gt;= (SELECT DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'))
+        <if test="companyId != null and companyId != '' ">
+            AND company_id = #{companyId}
+        </if>
+        <if test="branchId != null and branchId != '' ">
+            AND branch_id = #{branchId}
+        </if>
+        group by pass
+    </select>
+    <select id="selectDataShowMiddlerSite" resultType="com.metro.entity.vo.PassreCordsGroupByTimeVO">
+        select t.number,
+            Right (t.time, 2) as time
+        from (
+            select
+            count(1) as number,
+            LEFT (pass_time, 13) as time
+            from
+            j_passrecords
+            where pass_time &gt;= (SELECT DATE_FORMAT(CURDATE(), '%Y-%m-%d %H:%i:%s'))
+                <if test="companyId != null and companyId != '' ">
+                    AND company_id = #{companyId}
+                </if>
+                <if test="branchId != null and branchId != '' ">
+                    AND branch_id = #{branchId}
+                </if>
+            GROUP BY time
+            ) t
+    </select>
+    <select id="getWarFruit" resultType="com.metro.entity.vo.PassreCordsWarFruitVO">
+        SELECT
+            t.staff_card_id as cardId,
+            max(t.number0) as arrestNumber,
+            max(t.number1) + max(t.number3) as doubtNumber,
+            max(t.number2) as normalNumber
+        from
+            (
+                select
+                    staff_card_id,
+                    if(pass = 0 ,count(1),'') as number0,
+                    if(pass = 1 ,count(1),'') as number1,
+                    if(pass = 2 ,count(1),'') as number2,
+                    if(pass = 3 ,count(1),'') as number3,
+                    pass
+                from j_passrecords
+                where staff_card_id is not null and staff_card_id !=''
+                <if test="type == 1 ">
+                    and pass_time &lt; (SELECT DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'))
+                </if>
+                <if test="type == 2 ">
+                    and pass_time &gt;= (SELECT DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'))
+                </if>
+                GROUP BY staff_card_id,pass
+            )t
+        group by t.staff_card_id
     </select>
 </mapper>

+ 33 - 0
src/main/resources/mapper/WarFruitMapper.xml

@@ -0,0 +1,33 @@
+<?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.metro.mapper.WarFruitMapper">
+
+
+    <select id="policePageList" resultType="com.metro.entity.vo.WarFruitVO">
+        select
+        p.id,
+        p.xm,
+        p.card_id,
+        p.phone,
+        <if test="policeSearch.type != null and policeSearch.type == 1">
+            p.photo,
+        </if>
+        w.total_number as totalNumber,
+        w.total_doubt_number,
+        w.total_arrest_number,
+        w.today_number as todayNumber,
+        w.today_doubt_number,
+        w.today_arrest_number
+        from j_persons p
+        left join war_fruit w on w.card_id = p.card_id
+        <where>
+            p.company_id is not null and p.company_id !=''
+            and p.branch_id is not null and p.branch_id !=''
+            <if test="policeSearch.companyId != null and policeSearch.companyId != '' ">
+                AND  p.company_id = #{policeSearch.companyId}
+            </if>
+        </where>
+        ORDER BY (totalNumber + todayNumber) desc
+
+    </select>
+</mapper>

+ 228 - 173
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -1,173 +1,228 @@
-D:\rshy\src\main\java\com\metro\utils\HttpUtil.java
-D:\rshy\src\main\java\com\metro\entity\po\Police.java
-D:\rshy\src\main\java\com\metro\exception\OpenCommomException.java
-D:\rshy\src\main\java\com\metro\service\PassreCordsService.java
-D:\rshy\src\main\java\com\metro\utils\spring\SpringUtils.java
-D:\rshy\src\main\java\com\metro\utils\Sha256Util.java
-D:\rshy\src\main\java\com\metro\service\AccountService.java
-D:\rshy\src\main\java\com\metro\exception\UtilException.java
-D:\rshy\src\main\java\com\metro\entity\error\ErrorMsg.java
-D:\rshy\src\main\java\com\metro\restful\RestResult.java
-D:\rshy\src\main\java\com\metro\baseRe\BaseResponse.java
-D:\rshy\src\main\java\com\metro\exception\base\BaseException.java
-D:\rshy\src\main\java\com\metro\controller\AreaController.java
-D:\rshy\src\main\java\com\metro\utils\ReflectUtils.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\DetailAccountResp.java
-D:\rshy\src\main\java\com\metro\utils\text\CharsetKit.java
-D:\rshy\src\main\java\com\metro\entity\ro\area\SelectAreaResp.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\InsertAccountReq.java
-D:\rshy\src\main\java\com\metro\exception\FileException.java
-D:\rshy\src\main\java\com\metro\entity\po\Metro.java
-D:\rshy\src\main\java\com\metro\enums\UserEnums.java
-D:\rshy\src\main\java\com\metro\controller\PassreCordsController.java
-D:\rshy\src\main\java\com\metro\utils\DateUtils.java
-D:\rshy\src\main\java\com\metro\entity\po\PassreCords.java
-D:\rshy\src\main\java\com\metro\exception\BusinessException.java
-D:\rshy\src\main\java\com\metro\exception\NotLoginException.java
-D:\rshy\src\main\java\com\metro\mapper\AreaMapper.java
-D:\rshy\src\main\java\com\metro\service\CanRecordService.java
-D:\rshy\src\main\java\com\metro\utils\FileUtils.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\DetailAccountReq.java
-D:\rshy\src\main\java\com\metro\utils\bean\BeanValidators.java
-D:\rshy\src\main\java\com\metro\cache\StarshowCacheManager.java
-D:\rshy\src\main\java\com\metro\MetroApplication.java
-D:\rshy\src\main\java\com\metro\utils\uuid\Seq.java
-D:\rshy\src\main\java\com\metro\config\SaTokenConfigure.java
-D:\rshy\src\main\java\com\metro\mapper\PoliceMapper.java
-D:\rshy\src\main\java\com\metro\controller\CompanyController.java
-D:\rshy\src\main\java\com\metro\utils\ServletUtils.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\UpdatePoliceReq.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\DeleteAccountResp.java
-D:\rshy\src\main\java\com\metro\exception\InvalidExtensionException.java
-D:\rshy\src\main\java\com\metro\service\AddressService.java
-D:\rshy\src\main\java\com\metro\utils\MD5UtilNew.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\SelectPolicePageResp.java
-D:\rshy\src\main\java\com\metro\service\AreaService.java
-D:\rshy\src\main\java\com\metro\restful\RestDTO.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\DeletePoliceReq.java
-D:\rshy\src\main\java\com\metro\aop\GlobalExceptionHandler.java
-D:\rshy\src\main\java\com\metro\utils\file\FileTypeUtils.java
-D:\rshy\src\main\java\com\metro\entity\po\Excel.java
-D:\rshy\src\main\java\com\metro\mapper\AccountsMapper.java
-D:\rshy\src\main\java\com\metro\utils\SearchPager.java
-D:\rshy\src\main\java\com\metro\baseRe\EnvEnum.java
-D:\rshy\src\main\java\com\metro\controller\BaseController.java
-D:\rshy\src\main\java\com\metro\controller\MetroController.java
-D:\rshy\src\main\java\com\metro\entity\ro\passrecords\SelectPassreCordsPageListResp.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\InsertPoliceReq.java
-D:\rshy\src\main\java\com\metro\config\Config.java
-D:\rshy\src\main\java\com\metro\enums\vaildated\IsPhone.java
-D:\rshy\src\main\java\com\metro\constant\Constants.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\SelectPoliceLevelReq.java
-D:\rshy\src\main\java\com\metro\entity\ro\metro\SelectMetroParentResp.java
-D:\rshy\src\main\java\com\metro\service\impl\PoliceServiceImpl.java
-D:\rshy\src\main\java\com\metro\restful\CommonException.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\SelectPolicePageReq.java
-D:\rshy\src\main\java\com\metro\utils\CGlibMapper.java
-D:\rshy\src\main\java\com\metro\entity\dto\AccountDTO.java
-D:\rshy\src\main\java\com\metro\service\base\BaseService.java
-D:\rshy\src\main\java\com\metro\entity\ro\passrecords\DeletePassreCordsReq.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\UpdatePoliceResp.java
-D:\rshy\src\main\java\com\metro\service\MetroService.java
-D:\rshy\src\main\java\com\metro\config\WebSocketConfig.java
-D:\rshy\src\main\java\com\metro\utils\text\Convert.java
-D:\rshy\src\main\java\com\metro\entity\ro\area\SelectAreaReq.java
-D:\rshy\src\main\java\com\metro\entity\ro\passrecords\DetialPassreCordsResq.java
-D:\rshy\src\main\java\com\metro\service\impl\AddressServiceImpl.java
-D:\rshy\src\main\java\com\metro\utils\StringUtils.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\UpdateAccountReq.java
-D:\rshy\src\main\java\com\metro\security\JWTUtils.java
-D:\rshy\src\main\java\com\metro\utils\Sha1Util.java
-D:\rshy\src\main\java\com\metro\baseRe\BaseException.java
-D:\rshy\src\main\java\com\metro\service\impl\CanRecordServiceImpl.java
-D:\rshy\src\main\java\com\metro\entity\model\UserOperateModel.java
-D:\rshy\src\main\java\com\metro\entity\po\Account.java
-D:\rshy\src\main\java\com\metro\entity\po\Company.java
-D:\rshy\src\main\java\com\metro\utils\ExcelUtil.java
-D:\rshy\src\main\java\com\metro\entity\ro\passrecords\SelectPassreCordsPageListReq.java
-D:\rshy\src\main\java\com\metro\service\impl\PassreCordsServiceImpl.java
-D:\rshy\src\main\java\com\metro\utils\text\StrFormatter.java
-D:\rshy\src\main\java\com\metro\exception\FileSizeLimitExceededException.java
-D:\rshy\src\main\java\com\metro\config\SwaggerConfiguration.java
-D:\rshy\src\main\java\com\metro\utils\IPUtils.java
-D:\rshy\src\main\java\com\metro\enums\vaildated\impl\IsPhoneImpl.java
-D:\rshy\src\main\java\com\metro\entity\po\Area.java
-D:\rshy\src\main\java\com\metro\utils\file\ImageUtils.java
-D:\rshy\src\main\java\com\metro\utils\MessageUtils.java
-D:\rshy\src\main\java\com\metro\utils\poi\ExcelHandlerAdapter.java
-D:\rshy\src\main\java\com\metro\utils\uuid\UUID.java
-D:\rshy\src\main\java\com\metro\service\CompanyService.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\DetailPoliceResp.java
-D:\rshy\src\main\java\com\metro\entity\ro\metro\SelectMetroResp.java
-D:\rshy\src\main\java\com\metro\exception\FileNameLengthLimitExceededException.java
-D:\rshy\src\main\java\com\metro\utils\DictUtils.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\SelectAccountPageReq.java
-D:\rshy\src\main\java\com\metro\service\impl\AccountServiceImpl.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\UpdateAccountResp.java
-D:\rshy\src\main\java\com\metro\baseRe\AjaxResult.java
-D:\rshy\src\main\java\com\metro\entity\ro\company\SelectCompanyPageResp.java
-D:\rshy\src\main\java\com\metro\service\PoliceService.java
-D:\rshy\src\main\java\com\metro\service\impl\CompanyServiceImpl.java
-D:\rshy\src\main\java\com\metro\mapper\CompanysMapper.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\SelectAccountPageResp.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\ValidAccountReq.java
-D:\rshy\src\main\java\com\metro\entity\ro\passrecords\DetailPassreCordsReq.java
-D:\rshy\src\main\java\com\metro\utils\PageUtils.java
-D:\rshy\src\main\java\com\metro\security\AdminInterceptor.java
-D:\rshy\src\main\java\com\metro\utils\HttpClientUtil.java
-D:\rshy\src\main\java\com\metro\utils\R.java
-D:\rshy\src\main\java\com\metro\annotation\NoRepeatSubmit.java
-D:\rshy\src\main\java\com\metro\cache\CacheUtil.java
-D:\rshy\src\main\java\com\metro\controller\CanRecordController.java
-D:\rshy\src\main\java\com\metro\baseRe\BaseEntity.java
-D:\rshy\src\main\java\com\metro\restful\ServiceException.java
-D:\rshy\src\main\java\com\metro\service\impl\AreaServiceImpl.java
-D:\rshy\src\main\java\com\metro\utils\SignUtil.java
-D:\rshy\src\main\java\com\metro\utils\ShiroUtils.java
-D:\rshy\src\main\java\com\metro\entity\ro\passrecords\DeletePassreCordsResq.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\SelectPoliceLevelResp.java
-D:\rshy\src\main\java\com\metro\service\impl\MetroServiceImpl.java
-D:\rshy\src\main\java\com\metro\entity\ro\metro\SelectMetroReq.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\InsertPoliceResp.java
-D:\rshy\src\main\java\com\metro\entity\ro\company\SelectCompanyPageReq.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\ValidAccountResp.java
-D:\rshy\src\main\java\com\metro\utils\file\FileUtils.java
-D:\rshy\src\main\java\com\metro\cache\redis\RedisCacheImpl.java
-D:\rshy\src\main\java\com\metro\config\WebConfig.java
-D:\rshy\src\main\java\com\metro\constant\UserConstant.java
-D:\rshy\src\main\java\com\metro\mapper\MetroMapper.java
-D:\rshy\src\main\java\com\metro\utils\MapperManager.java
-D:\rshy\src\main\java\com\metro\controller\PolicController.java
-D:\rshy\src\main\java\com\metro\baseRe\ServiceException.java
-D:\rshy\src\main\java\com\metro\annotation\Excels.java
-D:\rshy\src\main\java\com\metro\security\SessionUtils.java
-D:\rshy\src\main\java\com\metro\config\MybatisConfig.java
-D:\rshy\src\main\java\com\metro\restful\RestResponse.java
-D:\rshy\src\main\java\com\metro\baseRe\ResultCode.java
-D:\rshy\src\main\java\com\metro\utils\uuid\IdUtils.java
-D:\rshy\src\main\java\com\metro\mapper\PassreCordsMapper.java
-D:\rshy\src\main\java\com\metro\controller\AccountController.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\LoginAccountResp.java
-D:\rshy\src\main\java\com\metro\entity\error\MsgCode.java
-D:\rshy\src\main\java\com\metro\utils\file\FileUploadUtils.java
-D:\rshy\src\main\java\com\metro\config\CorsConfig.java
-D:\rshy\src\main\java\com\metro\utils\StringUtil.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\DeleteAccountReq.java
-D:\rshy\src\main\java\com\metro\annotation\Excel.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\InsertAccountResp.java
-D:\rshy\src\main\java\com\metro\utils\poi\ExcelUtil.java
-D:\rshy\src\main\java\com\metro\utils\CacheUtils.java
-D:\rshy\src\main\java\com\metro\cache\ICache.java
-D:\rshy\src\main\java\com\metro\entity\po\Devices.java
-D:\rshy\src\main\java\com\metro\restful\RestCode.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\DetailPoliceReq.java
-D:\rshy\src\main\java\com\metro\entity\error\CommonRes.java
-D:\rshy\src\main\java\com\metro\baseRe\ErrorCode.java
-D:\rshy\src\main\java\com\metro\controller\AddressController.java
-D:\rshy\src\main\java\com\metro\utils\bean\BeanUtils.java
-D:\rshy\src\main\java\com\metro\entity\ro\Police\DeletePoliceResp.java
-D:\rshy\src\main\java\com\metro\security\Authority.java
-D:\rshy\src\main\java\com\metro\entity\ro\account\LoginAccountReq.java
-D:\rshy\src\main\java\com\metro\utils\JsonUtil.java
-D:\rshy\src\main\java\com\metro\utils\file\MimeTypeUtils.java
-D:\rshy\src\main\java\com\metro\utils\ImageRepair.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\config\WebSocketConfig.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\uuid\UUID.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\DictUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\DataShowMiddleVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\file\ImageUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\passrecords\SelectPassreCordsPageListReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\PassreCordsGroupByTimeVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\CanRecordServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\MD5UtilNew.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\StringUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\DetailAccountReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\aop\GlobalExceptionHandler.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\WarningDetailOneVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\CompanyServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\PoliceService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\DataShowServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\JPersonsServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\ServletUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\passrecords\DetialPassreCordsResq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\PageUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\company\SelectCompanyPageReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\passrecords\SelectPassreCordsPageListResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\JDevices.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\bean\BeanValidators.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\AdminDataShowController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\exception\InvalidExtensionException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\SearchPager.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\constant\Constants.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\text\StrFormatter.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\error\MsgCode.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\WarFruitVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\AddressService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\MessageUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\DetailPoliceResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\baseRe\BaseEntity.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\AddressController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\job\WarFruitTask.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\config\SaTokenConfigure.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\Police.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\metro\SelectMetroParentResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\enums\vaildated\impl\IsPhoneImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\CompanyVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\ReflectUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\PassreCordsService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\MetroService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\ValidAccountReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\MetroApplication.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\PoliceServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\MetroMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\baseRe\ResultCode.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\ImageRepair.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\text\Convert.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\error\ErrorMsg.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\search\JDevicesSearch.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\AccountsMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\exception\FileSizeLimitExceededException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\baseRe\BaseException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\config\CorsConfig.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\company\SelectCompanyPageResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\JPersonVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\base\BaseService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\ValidAccountResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\enums\UserEnums.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\Metro.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\AreaService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\annotation\NoRepeatSubmit.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\InsertPoliceReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\SelectAccountPageResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\DataShowMiddleSiteVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\search\WarningSearch.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\SelectAccountPageReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\PassreCordsLessVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\baseRe\ErrorCode.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\cache\ICache.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\LoginAccountResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\uuid\Seq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\restful\ServiceException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\Devices.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\area\SelectAreaResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\enums\DataShowTopEnum.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\DataShow.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\JPersonsService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\security\Authority.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\PassreCordsController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\R.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\search\PoliceSearch.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\JDevicesVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\security\JWTUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\AccountService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\bean\BeanUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\DetailPoliceReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\MetroController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\InsertAccountResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\AreaServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\JDevicesServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\InsertAccountReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\InsertPoliceResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\cache\StarshowCacheManager.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\passrecords\DeletePassreCordsResq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\enums\vaildated\IsPhone.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\WarFruitServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\CompanysMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\CanRecordController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\StringUtil.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\AccountServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\model\UserOperateModel.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\HttpClientUtil.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\MetroVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\AreaMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\Sha256Util.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\JDevicesLessVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\JDevicesMetroMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\JDevicesService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\Account.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\JPersonsMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\AreaController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\file\FileUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\baseRe\ServiceException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\restful\CommonException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\config\Config.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\WarFruitService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\WarFruitController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\SelectPoliceLevelReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\exception\OpenCommomException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\DataShowService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\config\MybatisConfig.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\MapperManager.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\cache\CacheUtil.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\metro\SelectMetroResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\DetailAccountResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\BranchVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\LoginAccountReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\dto\JpersonEditDTO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\DeleteAccountResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\constant\UserConstant.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\DeleteAccountReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\DeletePoliceResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\CompanyController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\poi\ExcelUtil.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\spring\SpringUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\PassreCordsServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\restful\RestResult.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\dto\AccountDTO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\exception\UtilException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\job\AdminDataShowTask.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\SiteVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\config\WebConfig.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\SelectPolicePageReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\PassreCordsWarFruitVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\job\WarFruitTodayTask.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\JsonUtil.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\JDevicesController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\DataShowTopVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\DataShowMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\exception\NotLoginException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\file\MimeTypeUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\baseRe\AjaxResult.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\passrecords\DetailPassreCordsReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\JPersonsController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\passrecords\DeletePassreCordsReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\metro\SelectMetroReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\CompanyUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\cache\redis\RedisCacheImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\error\CommonRes.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\HttpUtil.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\WarFruit.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\annotation\Excels.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\JDevicesMetro.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\exception\FileNameLengthLimitExceededException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\SelectPoliceLevelResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\search\JPersonSearch.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\UpdatePoliceResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\IPUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\ShiroUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\WarFruitTopVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\uuid\IdUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\file\FileUploadUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\Area.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\WarFruitMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\dto\DataShowMiddlerDTO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\PassreCordsMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\text\CharsetKit.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\UpdateAccountResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\exception\BusinessException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\CanRecordService.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\PassreCords.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\poi\ExcelHandlerAdapter.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\Excel.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\DateUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\WarningDetailVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\dto\JpersonDTO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\FileUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\DataShowWarningVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\DeletePoliceReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\security\AdminInterceptor.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\config\SwaggerConfiguration.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\SignUtil.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\area\SelectAreaReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\PolicController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\UpdatePoliceReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\Company.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\exception\base\BaseException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\JDevicesMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\restful\RestDTO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\CacheUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\BaseController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\job\AdminDataShowTodayTask.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\security\SessionUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\controller\AccountController.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\exception\FileException.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\restful\RestCode.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\file\FileTypeUtils.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\MetroServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\account\UpdateAccountReq.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\ro\Police\SelectPolicePageResp.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\mapper\PoliceMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\dto\JDeviceUpdateDTO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\impl\AddressServiceImpl.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\vo\WarningVO.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\Sha1Util.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\CGlibMapper.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\restful\RestResponse.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\utils\ExcelUtil.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\entity\po\JPersons.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\annotation\Excel.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\baseRe\BaseResponse.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\baseRe\EnvEnum.java
+D:\code\file4\metro-question-system\src\main\java\com\metro\service\CompanyService.java