Ver Fonte

1.三分钟统计查询
2.战果统计精确到时

wxg há 2 anos atrás
pai
commit
c158a1b8e1

+ 31 - 10
src/main/java/com/metro/entity/po/DataShow.java

@@ -5,9 +5,9 @@ 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 com.metro.entity.enums.DataShowTopEnum;
 import lombok.Data;
 
 import java.util.Date;
@@ -28,17 +28,38 @@ public class DataShow {
      * j_companys中的branch_id
      */
     private String branchId;
-    /**
-     *
-     * @see DataShowTopEnum
-     */
-    private Integer type;
     /*
-    * 数量
+    * 通行数量
     * */
+    @TableField("number")
     private Integer number;
-    /*
-     * 数量
-     * */
+    /**
+     * 日期
+     */
+    @TableField("date")
     private Date date;
+
+    /**
+     * 抓捕人数
+     */
+    @TableField("arrest_number")
+    private Integer arrestNumber;
+
+    /**
+     * 存疑人数
+     */
+    @TableField("doubt_number")
+    private Integer doubtNumber;
+
+    /**
+     * 正常通过人数
+     */
+    @TableField("pass_number")
+    private Integer passNumber;
+
+    /**
+     * 异常人数
+     */
+    @TableField("exception_number")
+    private Integer exceptionNumber;
 }

+ 2 - 0
src/main/java/com/metro/entity/po/PassreCords.java

@@ -170,4 +170,6 @@ public class PassreCords {
      * */
     private String healthCode;
 
+    private Boolean firstPass;
+
 }

+ 34 - 0
src/main/java/com/metro/entity/vo/DataShowBrandchVO.java

@@ -0,0 +1,34 @@
+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 DataShowBrandchVO {
+
+    /**
+     *
+     * j_companys中的company_id
+     */
+    private String companyId;
+    /**
+     *
+     * j_companys中的branch_id
+     */
+    private String branchId;
+
+    @ApiModelProperty("盘查人数")
+    private Integer number = 0;
+
+    @ApiModelProperty("预警人数")
+    private Integer warningNumber = 0;
+
+}

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

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
 public class PassreCordsGroupByTimeVO {
 
     @ApiModelProperty("时间节点")
-    private Integer time;
+    private String date;
 
     @ApiModelProperty("人数")
     private Integer number;

+ 9 - 4
src/main/java/com/metro/mapper/DataShowMapper.java

@@ -1,19 +1,24 @@
 package com.metro.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.metro.entity.dto.DataShowMiddlerDTO;
 import com.metro.entity.po.DataShow;
 import com.metro.entity.search.WarFruitSearch;
+import com.metro.entity.vo.DataShowBrandchVO;
 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);
+    /*type = 1 代表只查询今天的*/
+    DataShow selectByCompanyIdGroup(@Param("companyId")String companyId,@Param("type")Integer type);
     /*根据条件进行分组查询*/
-    List<DataShow> getDataShowListByCompanyIdAndBranchId(@Param("jPersonVO")JPersonVO jPersonVO,@Param("typeList") List<Integer> typeList);
+    List<DataShowBrandchVO> getDataShowListByCompanyIdAndBranchId(@Param("companyId")String companyId, @Param("dataShowMiddlerDTO")DataShowMiddlerDTO dataShowMiddlerDTO);
     /*派出所盘查top10*/
     List<DataShowTopVO> polliceOfficeTop10(WarFruitSearch warFruitSearch);
+
+    void initData();
+
+    List<DataShow> updateData(String passTime);
 }

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

@@ -8,6 +8,8 @@ import com.metro.entity.search.PoliceSearch;
 import com.metro.entity.vo.WarFruitVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 战果统计表 Mapper 接口
@@ -19,4 +21,8 @@ import org.apache.ibatis.annotations.Param;
 public interface WarFruitMapper extends BaseMapper<WarFruit> {
     /*民警列表分页*/
     IPage<WarFruitVO> policePageList(Page<WarFruitVO> page, @Param("policeSearch")PoliceSearch policeSearch);
+
+    void initData();
+
+    List<WarFruit> updateData(String passTime);
 }

+ 48 - 90
src/main/java/com/metro/service/impl/DataShowServiceImpl.java

@@ -9,7 +9,6 @@ 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;
@@ -30,7 +29,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @Service
@@ -66,54 +68,47 @@ public class DataShowServiceImpl implements DataShowService {
         JPersonVO jPersonVO = this.rootTrue();
         Integer adminType = jPersonVO.getType();
         DataShowTopVO dataShowTopVO = new DataShowTopVO();
-        Integer totalNumber;//盘查总人数
-        Integer totalWarningNumber;//总预警人数 = 总存疑人数 + 总抓捕人数
-        Integer totalDoubtNumber;//总存疑人数
-        Integer totalArrestNumber;//总抓捕人数
+        Integer totalNumber = 0;//盘查总人数
+        Integer totalWarningNumber = 0;//总预警人数 = 总存疑人数 + 总抓捕人数
+        Integer totalArrestNumber = 0;//总抓捕人数
+        Integer totalDoubtNumber = 0;//总存疑人数
 
         /*1.获取数据库中,今日0点之前的数据*/
-        List<Integer> list = new ArrayList<>();
-        Collections.addAll(list,
-                DataShowTopEnum.BERFORE_NUMBER.getType(),
-                DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType(),
-                DataShowTopEnum.BERFOR_ARREST_NUMBER.getType()
-        );
-        List<DataShow> dataShows = null;
+        DataShow dataShow = 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, ""));
+            dataShow = dataShowMapper.selectByCompanyIdGroup(null,null);
         } else if (adminType == 2) {
-            dataShows = dataShowMapper.selectByCompanyIdGroup(jPersonVO.getCompanyId(), list);
+            dataShow = dataShowMapper.selectByCompanyIdGroup(jPersonVO.getCompanyId(),null);
         } else {
             throw new ServiceException("无权操作");
         }
-        if (dataShows != null)
-            dataShowMap =getByDataShows(dataShows);
-//            dataShowMap = dataShows.stream().collect(Collectors.toMap(DataShow::getType, DataShow::getNumber));
+        if(dataShow != null){
+            totalNumber = dataShow.getNumber();
+            totalArrestNumber = dataShow.getArrestNumber();
+            totalDoubtNumber = dataShow.getDoubtNumber();
+            totalWarningNumber = totalArrestNumber + totalDoubtNumber;
+        }
+
 
         /*2.获取数据库中,今日0点之后的数据*/
         Integer todayNumber = 0;//今日盘查人数
         Integer todayWarningNumber = 0;//今日预警人数 = 今日存疑人数 + 今日抓捕人数
-        Integer todayDoubtNumber = 0;//今日存疑人数
         Integer todayArrestNumber = 0;//今日抓捕人数
+        Integer todayDoubtNumber = 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).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);
-            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);
-            totalWarningNumber = totalDoubtNumber + totalArrestNumber;
-        }else {
-            totalNumber = todayNumber;
-            totalWarningNumber = todayDoubtNumber + todayArrestNumber;
-            totalDoubtNumber = todayDoubtNumber;
-            totalArrestNumber = todayArrestNumber;
+        if (adminType == 1) {
+            dataShow = dataShowMapper.selectByCompanyIdGroup(null,1);
+        } else if (adminType == 2) {
+            dataShow = dataShowMapper.selectByCompanyIdGroup(jPersonVO.getCompanyId(),1);
+        } else {
+            throw new ServiceException("无权操作");
+        }
+        if(dataShow != null){
+            todayNumber = dataShow.getNumber();
+            todayArrestNumber = dataShow.getArrestNumber();
+            todayDoubtNumber = dataShow.getDoubtNumber();
+            todayWarningNumber = todayArrestNumber + todayDoubtNumber;
         }
         /*3.获取站点数量*/
         LambdaQueryWrapper<Company> companyWrapper = new LambdaQueryWrapper<>();
@@ -137,68 +132,29 @@ public class DataShowServiceImpl implements DataShowService {
 
         return BaseResponse.ok(dataShowTopVO);
     }
-    private Map<Integer, Integer> getByDataShows(List<DataShow> dataShows){
-        Map<Integer, Integer> map = new HashMap<>();
-        int totalNumber = 0;
-        int totalDoubtNumber = 0;
-        int totalArrestNumber = 0;
-        for (DataShow dataShow : dataShows) {
-            if(dataShow.getType().equals(DataShowTopEnum.BERFORE_NUMBER.getType())) totalNumber+=dataShow.getNumber();
-            else if(dataShow.getType().equals(DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType())) {totalDoubtNumber+=dataShow.getNumber();}
-            else if(dataShow.getType().equals(DataShowTopEnum.BERFOR_ARREST_NUMBER.getType())){ totalArrestNumber+=dataShow.getNumber();}
-        }
-        map.put(DataShowTopEnum.BERFORE_NUMBER.getType(),totalNumber);
-        map.put(DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType(),totalDoubtNumber);
-        map.put(DataShowTopEnum.BERFOR_ARREST_NUMBER.getType(),totalArrestNumber);
-        return map;
-    }
 
     @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_DOUBT_NUMBER.getType(),
-                    DataShowTopEnum.BERFOR_ARREST_NUMBER.getType(),
-                    DataShowTopEnum.TODAY_DOUBT_NUMBER.getType(),
-                    DataShowTopEnum.TODAY_ARREST_NUMBER.getType()
-            );
-        }
-        /*3.今日 +盘查*/
-        else if(timeType == 2 && passType == 1){
-            Collections.addAll(list,
-                    DataShowTopEnum.TODAY_NUMBER.getType()
-            );
+        List<DataShowBrandchVO> dataShowList = null;
+        if(jPersonVO.getType() == 1){
+            dataShowList = dataShowMapper.getDataShowListByCompanyIdAndBranchId(null,dataShowMiddlerDTO);
+        }else if(jPersonVO.getType() == 2) {
+            dataShowList = dataShowMapper.getDataShowListByCompanyIdAndBranchId(jPersonVO.getCompanyId(),dataShowMiddlerDTO);
+        }else {
+            throw new ServiceException("无权操作");
         }
-        /*4.今日 +预警*/
-        else if(timeType == 2 && passType == 2){
-            Collections.addAll(list,
-                    DataShowTopEnum.TODAY_DOUBT_NUMBER.getType(),
-                    DataShowTopEnum.TODAY_ARREST_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);
+        Map<String, Company> barnchMap = companyService.getBranchMapByList(dataShowList,DataShowBrandchVO::getBranchId);
         List<String> siteList = new ArrayList<>();
         List<Integer> numberList = new ArrayList<>();
-        for (DataShow dataShow : dataShowList) {
-            numberList.add(dataShow.getNumber());
+        for (DataShowBrandchVO dataShow : dataShowList) {
+            if(dataShowMiddlerDTO.getPassType() == 1){
+                numberList.add(dataShow.getNumber());
+            }else {
+                numberList.add(dataShow.getWarningNumber());
+            }
             siteList.add(barnchMap.get(dataShow.getCompanyId()+dataShow.getBranchId()) == null ?
                     "" : barnchMap.get(dataShow.getCompanyId()+dataShow.getBranchId()).getBranchName());
         }
@@ -227,7 +183,8 @@ public class DataShowServiceImpl implements DataShowService {
             Integer number = 0;
             for (int j = 0; j < list.size(); j++) {
                 PassreCordsGroupByTimeVO pco = list.get(j);
-                Integer time = pco.getTime();
+                String substring = pco.getDate().substring(11,13);
+                Integer time = Integer.valueOf(substring);
                 int start = i*2;
                 int end = (i*2) + 2;
                 if(time >= start && time < end){
@@ -264,6 +221,7 @@ public class DataShowServiceImpl implements DataShowService {
         List<Integer> list = new ArrayList<>();
         Collections.addAll(list,0,1);//去掉了健康码异常的实时预警
         PassreCordsWrapper.in(PassreCords::getPass,list);
+        PassreCordsWrapper.eq(PassreCords::getFirstPass,true);
         PassreCordsWrapper.orderByDesc(PassreCords::getPassTime);
         Page<PassreCords> selectPage = passreCordsMapper.selectPage(new Page<>(0, 6), PassreCordsWrapper);
         List<PassreCords> records = selectPage.getRecords();

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

@@ -130,6 +130,7 @@ public class PassreCordsServiceImpl extends BaseService implements PassreCordsSe
         if(idList.size() == 0)return page;
         LambdaQueryWrapper<PassreCords> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.in(PassreCords::getId, idList);
+        lambdaQueryWrapper.eq(PassreCords::getFirstPass, true);
         lambdaQueryWrapper.orderByDesc(PassreCords::getId);
         List<PassreCords> passreCords = passreCordsMapper.selectList(lambdaQueryWrapper);
         Map<Integer, PassreCords> map = passreCords.stream().collect(Collectors.toMap(PassreCords::getId, Function.identity()));
@@ -145,6 +146,7 @@ public class PassreCordsServiceImpl extends BaseService implements PassreCordsSe
             wrapper.eq(PassreCords::getCardId,passreCords1.getCardId());
             wrapper.ne(PassreCords::getId,passreCords1.getId());
             wrapper.in(PassreCords::getPass,list);
+            wrapper.eq(PassreCords::getFirstPass, true);
             wrapper.orderByDesc(PassreCords::getId);
             wrapper.last("limit 1");
             PassreCords passreCord = passreCordsMapper.selectOne(wrapper);
@@ -325,6 +327,7 @@ public class PassreCordsServiceImpl extends BaseService implements PassreCordsSe
         wrapper.eq(StringUtils.isNotEmpty(req.getStaffCardId()), PassreCords::getStaffCardId, req.getStaffCardId());
         wrapper.eq(StringUtils.isNotEmpty(req.getPhone()), PassreCords::getPhone, req.getPhone());
         wrapper.eq(req.getPass() != null, PassreCords::getPass, req.getPass());
+        wrapper.eq(PassreCords::getFirstPass, true);
         wrapper.gt(StringUtils.isNotEmpty(req.getStartTime()), PassreCords::getPassTime, req.getStartTime());
         wrapper.lt(StringUtils.isNotEmpty(req.getEndTime()), PassreCords::getPassTime, req.getEndTime());
         wrapper.orderByDesc(PassreCords::getPassTime);

+ 3 - 9
src/main/java/com/metro/service/impl/WarFruitServiceImpl.java

@@ -68,15 +68,9 @@ public class WarFruitServiceImpl implements WarFruitService {
         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);//之前抓捕 + 今日
+            numberList.add(dataShowTopVO.getTotalNumber());//盘查
+            doubtList.add(dataShowTopVO.getTotalDoubtNumber());//存疑
+            arrestList.add(dataShowTopVO.getTotalArrestNumber());//抓捕
         }
         WarFruitTopVO warFruitTopVO = new WarFruitTopVO();
         warFruitTopVO.setSiteList(siteList);

+ 83 - 86
src/main/java/com/metro/service/job/AdminDataShowTask.java

@@ -1,14 +1,9 @@
 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.DependsOn;
@@ -16,12 +11,8 @@ 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.*;
-import java.util.stream.Collectors;
 
 /**
  * @description:
@@ -48,91 +39,97 @@ public class AdminDataShowTask {
     /*
     * 每天0点 统计一下DataShowTopEnum中 type 1-4的数据
     * */
-    @Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai")
-    @PostConstruct
+//    @Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai")
     @Async
     public void dailyDataStatistics() {
-        log.info("----------开始------每日数据统计-------------");
-        LambdaQueryWrapper<Company> companyWrapper = new LambdaQueryWrapper<>();
-        companyWrapper.isNotNull(Company::getBranchId);
-
-        /*查询出所有*/
-        List<Company> companyList = companysMapper.selectList(companyWrapper);
-        companyList = companyList.stream().filter(p -> StringUtils.isNotEmpty(p.getCompanyId()) && StringUtils.isNotEmpty(p.getBranchId())).collect(Collectors.toList());
-        companyList.add(new Company().setCompanyId("").setBranchId(""));
-
-        for (Company company : companyList) {
-
-            List<PassreCordsLessVO> passreCordsLessVO = passreCordsMapper.selectBeforDataNumber(company);
-            Map<Date, List<PassreCordsLessVO>> dateListMap = this.dataChange(passreCordsLessVO);
-            for (Date date : dateListMap.keySet()){
-                List<PassreCordsLessVO> list = dateListMap.get(date);
+        log.info("查询dataShow是否需要数据的数据初始化操作");
+        Integer count = dataShowMapper.selectCount(new LambdaQueryWrapper<>());
+        if(count != null && count >0){
+            log.info("dataShow不需要初始化");
+            return;
+        }
+        log.info("----------开始------站点数据初始化-------------");
+        dataShowMapper.initData();//数据初始化
+//        LambdaQueryWrapper<Company> companyWrapper = new LambdaQueryWrapper<>();
+//        companyWrapper.isNotNull(Company::getBranchId);
+//
+//        /*查询出所有*/
+//        List<Company> companyList = companysMapper.selectList(companyWrapper);
+//        companyList = companyList.stream().filter(p -> StringUtils.isNotEmpty(p.getCompanyId()) && StringUtils.isNotEmpty(p.getBranchId())).collect(Collectors.toList());
+//        companyList.add(new Company().setCompanyId("").setBranchId(""));
+//
+//        for (Company company : companyList) {
+//
+//            List<PassreCordsLessVO> passreCordsLessVO = passreCordsMapper.selectBeforDataNumber(company);
+//            Map<Date, List<PassreCordsLessVO>> dateListMap = this.dataChange(passreCordsLessVO);
+//            for (Date date : dateListMap.keySet()){
+//                List<PassreCordsLessVO> list = dateListMap.get(date);
 //                Integer totalNumber = 0;//date的盘查人数
 //                Integer totalWarningNumber = 0;//date的异常人数
 //                Integer totalDoubtNumber = 0;//date的存疑人数
 //                Integer totalArrestNumber = 0;//date的抓铺人数
-                int totalNumber = list.stream().mapToInt(PassreCordsLessVO::getNumber).sum();
-                int totalDoubtNumber = list.stream().filter(p -> p.getPass() == 1 /*|| p.getPass() == 3*/).mapToInt(PassreCordsLessVO::getNumber).sum();
-                int totalArrestNumber = list.stream().filter(p -> p.getPass() == 0).mapToInt(PassreCordsLessVO::getNumber).sum();
-                int totalWarningNumber = list.stream().filter(p -> p.getPass() == 3).mapToInt(PassreCordsLessVO::getNumber).sum();
-
-                DataShow dataShow1 = selectByCompanyIdAndType(date,company,DataShowTopEnum.BERFORE_NUMBER.getType());
-                DataShow dataShow2 = selectByCompanyIdAndType(date,company,DataShowTopEnum.BERFOR_EXCEPTION_NUMBER.getType());
-                DataShow dataShow3 = selectByCompanyIdAndType(date,company,DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType());
-                DataShow dataShow4 = selectByCompanyIdAndType(date,company,DataShowTopEnum.BERFOR_ARREST_NUMBER.getType());
-                new Thread(()->{
-                    DataShowEdit(date,dataShow1,DataShowTopEnum.BERFORE_NUMBER.getType(), totalNumber,company);
-                    DataShowEdit(date,dataShow2,DataShowTopEnum.BERFOR_EXCEPTION_NUMBER.getType(), totalWarningNumber,company);
-                    DataShowEdit(date,dataShow3,DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType(), totalDoubtNumber,company);
-                    DataShowEdit(date,dataShow4,DataShowTopEnum.BERFOR_ARREST_NUMBER.getType(), totalArrestNumber,company);
-                }).start();
-            }
-
-
-
-        }
-
-
-        log.info("----------完成------每日数据统计-------------");
+//                int totalNumber = list.stream().mapToInt(PassreCordsLessVO::getNumber).sum();
+//                int totalDoubtNumber = list.stream().filter(p -> p.getPass() == 1 /*|| p.getPass() == 3*/).mapToInt(PassreCordsLessVO::getNumber).sum();
+//                int totalArrestNumber = list.stream().filter(p -> p.getPass() == 0).mapToInt(PassreCordsLessVO::getNumber).sum();
+//                int totalWarningNumber = list.stream().filter(p -> p.getPass() == 3).mapToInt(PassreCordsLessVO::getNumber).sum();
+//
+//                DataShow dataShow1 = selectByCompanyIdAndType(date,company,DataShowTopEnum.BERFORE_NUMBER.getType());
+//                DataShow dataShow2 = selectByCompanyIdAndType(date,company,DataShowTopEnum.BERFOR_EXCEPTION_NUMBER.getType());
+//                DataShow dataShow3 = selectByCompanyIdAndType(date,company,DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType());
+//                DataShow dataShow4 = selectByCompanyIdAndType(date,company,DataShowTopEnum.BERFOR_ARREST_NUMBER.getType());
+//                new Thread(()->{
+//                    DataShowEdit(date,dataShow1,DataShowTopEnum.BERFORE_NUMBER.getType(), totalNumber,company);
+//                    DataShowEdit(date,dataShow2,DataShowTopEnum.BERFOR_EXCEPTION_NUMBER.getType(), totalWarningNumber,company);
+//                    DataShowEdit(date,dataShow3,DataShowTopEnum.BERFOR_DOUBT_NUMBER.getType(), totalDoubtNumber,company);
+//                    DataShowEdit(date,dataShow4,DataShowTopEnum.BERFOR_ARREST_NUMBER.getType(), totalArrestNumber,company);
+//                }).start();
+//            }
+//
+//
+//
+//        }
+
+
+        log.info("----------完成------站点数据初始化-------------");
     }
     /*数据转换*/
-    private Map<Date,List<PassreCordsLessVO>> dataChange(List<PassreCordsLessVO> passreCordsLessVO){
-        Map<Date,List<PassreCordsLessVO>> map = new HashMap<>();
-        for (PassreCordsLessVO cordsLessVO : passreCordsLessVO) {
-            List<PassreCordsLessVO> list = null;
-            if(map.containsKey(cordsLessVO.getDate())){
-                list = map.get(cordsLessVO.getDate());
-            }else {
-                list = new ArrayList<>();
-            }
-            list.add(cordsLessVO);
-            map.put(cordsLessVO.getDate(),list);
-        }
-        return map;
-    }
-    private DataShow selectByCompanyIdAndType(Date date ,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());
-        dataShow.eq(DataShow::getDate, date);
-        return dataShowMapper.selectOne(dataShow);
-    }
-
-    private void DataShowEdit(Date date,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());
-            dataShow.setDate(date);
-            dataShowMapper.insert(dataShow);
-        }
-    }
+//    private Map<Date,List<PassreCordsLessVO>> dataChange(List<PassreCordsLessVO> passreCordsLessVO){
+//        Map<Date,List<PassreCordsLessVO>> map = new HashMap<>();
+//        for (PassreCordsLessVO cordsLessVO : passreCordsLessVO) {
+//            List<PassreCordsLessVO> list = null;
+//            if(map.containsKey(cordsLessVO.getDate())){
+//                list = map.get(cordsLessVO.getDate());
+//            }else {
+//                list = new ArrayList<>();
+//            }
+//            list.add(cordsLessVO);
+//            map.put(cordsLessVO.getDate(),list);
+//        }
+//        return map;
+//    }
+//    private DataShow selectByCompanyIdAndType(Date date ,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());
+//        dataShow.eq(DataShow::getDate, date);
+//        return dataShowMapper.selectOne(dataShow);
+//    }
+//
+//    private void DataShowEdit(Date date,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());
+//            dataShow.setDate(date);
+//            dataShowMapper.insert(dataShow);
+//        }
+//    }
 
 
 }

+ 63 - 47
src/main/java/com/metro/service/job/AdminDataShowTodayTask.java

@@ -1,13 +1,13 @@
 package com.metro.service.job;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 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.DateUtils;
 import com.metro.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Configuration;
@@ -18,8 +18,9 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 
 import javax.annotation.Resource;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @description:
@@ -43,59 +44,74 @@ public class AdminDataShowTodayTask {
     @Resource
     private CompanysMapper companysMapper;
     /*
-    * 每10分钟 统计一下DataShowTopEnum中 type 5-6的数据
+    *
     * */
-    @Scheduled(fixedRate = 600000,zone = "Asia/Shanghai")
+    @Scheduled(fixedRate = 600000,zone = "Asia/Shanghai" ,initialDelay=120000)
     @Async
     public void dailyDataStatistics() {
         log.info("----------开始------每日10分钟数据统计-------------");
 
-        /*查询出所有站点*/
-        List<Company> companyList = companysMapper.selectList(new LambdaQueryWrapper<Company>().isNotNull(Company::getBranchId));
-        companyList = companyList.stream().filter(p -> StringUtils.isNotEmpty(p.getCompanyId()) && StringUtils.isNotEmpty(p.getBranchId())).collect(Collectors.toList());
-        for (Company company : companyList) {
-            List<PassreCordsLessVO> passreCordsLessVOS = passreCordsMapper.selectTodayDataNumber(company.getCompanyId(), company.getBranchId());
-
-            /*2.获取数据库中,今日0点之后的数据*/
-            Integer todayNumber = 0;//今日盘查人数
-            Integer todayExceptionNumber = 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();
-            todayExceptionNumber = passreCordsLessVOS.stream().filter(p -> p.getPass() == 3).mapToInt(PassreCordsLessVO::getNumber).sum();
-
-            DataShow dataShow5 = selectByCompanyIdAndType(company, DataShowTopEnum.TODAY_NUMBER.getType());
-            DataShow dataShow6 = selectByCompanyIdAndType(company, DataShowTopEnum.TODAY_EXCEPTION_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_EXCEPTION_NUMBER.getType(),todayExceptionNumber,company);
-            DataShowEdit(dataShow7,DataShowTopEnum.TODAY_DOUBT_NUMBER.getType(),todayDoubtNumber,company);
-            DataShowEdit(dataShow8,DataShowTopEnum.TODAY_ARREST_NUMBER.getType(),todayArrestNumber,company);
+        Date date = DateUtils.addHours(new Date(), -12);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        String passTime = DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", calendar.getTime());
 
+        List<DataShow> list = dataShowMapper.updateData(passTime);
+        if(CollectionUtil.isNotEmpty(list)){
+            for (DataShow dataShow : list) {
+                this.DataShowEdit(dataShow);
+            }
         }
+
+        /*查询出所有站点*/
+//        List<Company> companyList = companysMapper.selectList(new LambdaQueryWrapper<Company>().isNotNull(Company::getBranchId));
+//        companyList = companyList.stream().filter(p -> StringUtils.isNotEmpty(p.getCompanyId()) && StringUtils.isNotEmpty(p.getBranchId())).collect(Collectors.toList());
+//        for (Company company : companyList) {
+//            List<PassreCordsLessVO> passreCordsLessVOS = passreCordsMapper.selectTodayDataNumber(company.getCompanyId(), company.getBranchId());
+//            if(CollectionUtil.isNotEmpty(passreCordsLessVOS)){
+//
+//            }
+//            /*2.获取数据库中,今日0点之后的数据*/
+//            Integer todayNumber = 0;//今日盘查人数
+//            Integer todayExceptionNumber = 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();
+//            todayExceptionNumber = passreCordsLessVOS.stream().filter(p -> p.getPass() == 3).mapToInt(PassreCordsLessVO::getNumber).sum();
+//
+//            DataShow dataShow5 = selectByCompanyIdAndType(company, DataShowTopEnum.TODAY_NUMBER.getType());
+//            DataShow dataShow6 = selectByCompanyIdAndType(company, DataShowTopEnum.TODAY_EXCEPTION_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_EXCEPTION_NUMBER.getType(),todayExceptionNumber,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);
+//    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){
+        LambdaQueryWrapper<DataShow> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(StringUtils.isNotNull(dataShow.getCompanyId()),DataShow::getCompanyId, dataShow.getCompanyId());
+        lambdaQueryWrapper.eq(StringUtils.isNotNull(dataShow.getBranchId()),DataShow::getBranchId, dataShow.getBranchId());
+        lambdaQueryWrapper.eq(StringUtils.isNotNull(dataShow.getDate()),DataShow::getDate, dataShow.getDate());
+        DataShow dataShow1 = dataShowMapper.selectOne(lambdaQueryWrapper);
+        if(dataShow1 != null){
+            BeanUtil.copyProperties(dataShow,dataShow1);
+            dataShowMapper.updateById(dataShow1);
         }else {
-            dataShow = new DataShow();
-            dataShow.setType(type);
-            dataShow.setNumber(number);
-            dataShow.setCompanyId(company.getCompanyId());
-            dataShow.setBranchId(company.getBranchId());
             dataShowMapper.insert(dataShow);
         }
     }

+ 31 - 0
src/main/java/com/metro/service/job/AsyncTask.java

@@ -0,0 +1,31 @@
+package com.metro.service.job;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+/**
+ * @description:
+ * @ClassName AsyncTask
+ * @Author WXG
+ * @Date 2022/9/14 14:49
+ */
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@EnableAsync
+@Slf4j
+public class AsyncTask {
+    @Resource
+    private AdminDataShowTask adminDataShowTask;
+    @Resource
+    private WarFruitTask warFruitTask;
+    @PostConstruct
+    private void start(){
+        adminDataShowTask.dailyDataStatistics();//每日数据统计
+        warFruitTask.dailyDataStatistics();//民警每日数据统计
+    }
+}

+ 2 - 9
src/main/java/com/metro/service/job/JperSonTask.java

@@ -1,7 +1,5 @@
 package com.metro.service.job;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.metro.mapper.DataShowMapper;
 import com.metro.mapper.JPersonsMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Configuration;
@@ -28,20 +26,15 @@ public class JperSonTask {
     @Resource
     @Lazy
     private JPersonsMapper jPersonsMapper;
-    @Resource
-    @Lazy
-    private DataShowMapper dataShowMapper;
-
     /*
     * 因为地铁盘查生产的admin的companyId和branchId是null
     * */
     @PostConstruct
     @Async
     public void dailyDataStatistics() {
-        log.info("----------开始------数据初始化-------------");
-        dataShowMapper.delete(new LambdaQueryWrapper<>());
+        log.info("----------开始------jPersons数据初始化-------------");
         jPersonsMapper.updateJperson();
         jPersonsMapper.updateJperson1();
-        log.info("----------完成------数据初始化-------------");
+        log.info("----------完成------jPersons数据初始化-------------");
     }
 }

+ 40 - 43
src/main/java/com/metro/service/job/WarFruitTask.java

@@ -1,8 +1,6 @@
 package com.metro.service.job;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.metro.entity.po.WarFruit;
-import com.metro.entity.vo.NewPassreCordsWarFruitVO;
 import com.metro.mapper.PassreCordsMapper;
 import com.metro.mapper.WarFruitMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -11,11 +9,8 @@ import org.springframework.context.annotation.DependsOn;
 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:
@@ -34,49 +29,51 @@ public class WarFruitTask {
     private PassreCordsMapper passreCordsMapper;
     @Resource
     private WarFruitMapper warFruitMapper;
-    /*
-    * 每天0点 民警的每日数据统计
-    * */
-    @Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai")
-    @PostConstruct
     @Async
     public void dailyDataStatistics() {
+        log.info("查询warFruit是否需要数据的数据初始化操作");
+        Integer count = warFruitMapper.selectCount(new LambdaQueryWrapper<>());
+        if(count != null && count >0){
+            log.info("warFruit不需要初始化");
+            return;
+        }
         log.info("----------开始------民警每日数据统计-------------");
-        /*1.查出需要的数据*/
-//        List<PassreCordsWarFruitVO> passreCordsWarFruitVOList = passreCordsMapper.getWarFruit(1);
-        List<NewPassreCordsWarFruitVO> list = passreCordsMapper.getWarFruitNew(1);
+        warFruitMapper.initData();//数据初始化
 
-        for (NewPassreCordsWarFruitVO vo : list) {
-            this.warFruitEdit(vo);
-        }
+//        /*1.查看战果统计中是否含有数据*/
+//        List<NewPassreCordsWarFruitVO> list = passreCordsMapper.getWarFruitNew(1);
+//
+//        for (NewPassreCordsWarFruitVO vo : list) {
+//            this.warFruitEdit(vo);
+//        }
         log.info("----------完成------民警每日数据统计-------------");
     }
 
-    private void warFruitEdit(NewPassreCordsWarFruitVO vo){
-        LambdaQueryWrapper<WarFruit> warFruitWrapper = new LambdaQueryWrapper<>();
-        warFruitWrapper.eq(WarFruit::getCardId,vo.getCardId());
-        warFruitWrapper.eq(WarFruit::getDate,vo.getDate());
-        WarFruit warFruit = warFruitMapper.selectOne(warFruitWrapper);
-        int type = 0;// 1-insert 0=update
-        if(warFruit == null){
-            warFruit = new WarFruit();
-            type = 1;
-        }
-        Integer arrestNumber = vo.getArrestNumber() == null? 0 : vo.getArrestNumber();
-        Integer doubtNumber = vo.getDoubtNumber() == null? 0 : vo.getDoubtNumber();
-        Integer passNumber = vo.getPassNumber() == null? 0 : vo.getPassNumber();
-        Integer exceptionNumber = vo.getExceptionNumber() == null? 0 : vo.getExceptionNumber();
-        warFruit.setCardId(vo.getCardId());
-        warFruit.setDate(vo.getDate());
-        warFruit.setArrestNumber(arrestNumber);
-        warFruit.setDoubtNumber(doubtNumber);
-        warFruit.setPassNumber(passNumber);
-        warFruit.setExceptionNumber(exceptionNumber);
-        warFruit.setNumber(arrestNumber + doubtNumber + passNumber + exceptionNumber);
-        if(type == 1 ){
-            warFruitMapper.insert(warFruit);
-        }else {
-            warFruitMapper.updateById(warFruit);
-        }
-    }
+//    private void warFruitEdit(NewPassreCordsWarFruitVO vo){
+//        LambdaQueryWrapper<WarFruit> warFruitWrapper = new LambdaQueryWrapper<>();
+//        warFruitWrapper.eq(WarFruit::getCardId,vo.getCardId());
+//        warFruitWrapper.eq(WarFruit::getDate,vo.getDate());
+//        WarFruit warFruit = warFruitMapper.selectOne(warFruitWrapper);
+//        int type = 0;// 1-insert 0=update
+//        if(warFruit == null){
+//            warFruit = new WarFruit();
+//            type = 1;
+//        }
+//        Integer arrestNumber = vo.getArrestNumber() == null? 0 : vo.getArrestNumber();
+//        Integer doubtNumber = vo.getDoubtNumber() == null? 0 : vo.getDoubtNumber();
+//        Integer passNumber = vo.getPassNumber() == null? 0 : vo.getPassNumber();
+//        Integer exceptionNumber = vo.getExceptionNumber() == null? 0 : vo.getExceptionNumber();
+//        warFruit.setCardId(vo.getCardId());
+//        warFruit.setDate(vo.getDate());
+//        warFruit.setArrestNumber(arrestNumber);
+//        warFruit.setDoubtNumber(doubtNumber);
+//        warFruit.setPassNumber(passNumber);
+//        warFruit.setExceptionNumber(exceptionNumber);
+//        warFruit.setNumber(arrestNumber + doubtNumber + passNumber + exceptionNumber);
+//        if(type == 1 ){
+//            warFruitMapper.insert(warFruit);
+//        }else {
+//            warFruitMapper.updateById(warFruit);
+//        }
+//    }
 }

+ 46 - 29
src/main/java/com/metro/service/job/WarFruitTodayTask.java

@@ -1,10 +1,12 @@
 package com.metro.service.job;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.metro.entity.po.WarFruit;
-import com.metro.entity.vo.NewPassreCordsWarFruitVO;
 import com.metro.mapper.PassreCordsMapper;
 import com.metro.mapper.WarFruitMapper;
+import com.metro.utils.DateUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
@@ -14,6 +16,8 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 
 import javax.annotation.Resource;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -37,43 +41,56 @@ public class WarFruitTodayTask {
     /*
     * 每天0点 民警的每日数据统计
     * */
-    @Scheduled(fixedRate = 600000,zone = "Asia/Shanghai")
+    @Scheduled(fixedRate = 600000,zone = "Asia/Shanghai",initialDelay=120000)
     @Async
     public void dailyDataStatistics() {
         log.info("----------开始------民警每10分钟数据统计-------------");
-        /*1.查出需要的数据*/
-        List<NewPassreCordsWarFruitVO> list = passreCordsMapper.getWarFruitNew(2);
-        for (NewPassreCordsWarFruitVO vo : list) {
-            warFruitEdit(vo);
+        Date date = DateUtils.addHours(new Date(), -12);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        String passTime = DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", calendar.getTime());
+        List<WarFruit> list = warFruitMapper.updateData(passTime);
+        if(CollectionUtil.isNotEmpty(list)){
+            for (WarFruit warFruit : list) {
+                this.warFruitEdit(warFruit);
+            }
         }
         log.info("----------完成------民警每10分钟数据统计-------------");
     }
 
-    private void warFruitEdit(NewPassreCordsWarFruitVO vo){
+    private void warFruitEdit(WarFruit warFruit){
         LambdaQueryWrapper<WarFruit> warFruitWrapper = new LambdaQueryWrapper<>();
-        warFruitWrapper.eq(WarFruit::getCardId,vo.getCardId());
-        warFruitWrapper.eq(WarFruit::getDate,vo.getDate());
-        WarFruit warFruit = warFruitMapper.selectOne(warFruitWrapper);
-        int type = 0;// 1-insert 0=update
-        if(warFruit == null){
-            warFruit = new WarFruit();
-            type = 1;
-        }
-        Integer arrestNumber = vo.getArrestNumber() == null? 0 : vo.getArrestNumber();
-        Integer doubtNumber = vo.getDoubtNumber() == null? 0 : vo.getDoubtNumber();
-        Integer passNumber = vo.getPassNumber() == null? 0 : vo.getPassNumber();
-        Integer exceptionNumber = vo.getExceptionNumber() == null? 0 : vo.getExceptionNumber();
-        warFruit.setCardId(vo.getCardId());
-        warFruit.setDate(vo.getDate());
-        warFruit.setArrestNumber(arrestNumber);
-        warFruit.setDoubtNumber(doubtNumber);
-        warFruit.setPassNumber(passNumber);
-        warFruit.setExceptionNumber(exceptionNumber);
-        warFruit.setNumber(arrestNumber + doubtNumber + passNumber + exceptionNumber);
-        if(type == 1 ){
-            warFruitMapper.insert(warFruit);
+        warFruitWrapper.eq(WarFruit::getCardId,warFruit.getCardId());
+        warFruitWrapper.eq(WarFruit::getDate,warFruit.getDate());
+        WarFruit warFruit1 = warFruitMapper.selectOne(warFruitWrapper);
+        if(warFruit1 != null){
+            BeanUtil.copyProperties(warFruit,warFruit1);
+            warFruitMapper.updateById(warFruit1);
         }else {
-            warFruitMapper.updateById(warFruit);
+            warFruitMapper.insert(warFruit);
         }
+//        int type = 0;// 1-insert 0=update
+//        if(warFruit == null){
+//            warFruit = new WarFruit();
+//            type = 1;
+//        }
+//        Integer arrestNumber = vo.getArrestNumber() == null? 0 : vo.getArrestNumber();
+//        Integer doubtNumber = vo.getDoubtNumber() == null? 0 : vo.getDoubtNumber();
+//        Integer passNumber = vo.getPassNumber() == null? 0 : vo.getPassNumber();
+//        Integer exceptionNumber = vo.getExceptionNumber() == null? 0 : vo.getExceptionNumber();
+//        warFruit.setCardId(vo.getCardId());
+//        warFruit.setDate(vo.getDate());
+//        warFruit.setArrestNumber(arrestNumber);
+//        warFruit.setDoubtNumber(doubtNumber);
+//        warFruit.setPassNumber(passNumber);
+//        warFruit.setExceptionNumber(exceptionNumber);
+//        warFruit.setNumber(arrestNumber + doubtNumber + passNumber + exceptionNumber);
+//        if(type == 1 ){
+//            warFruitMapper.insert(warFruit);
+//        }else {
+//            warFruitMapper.updateById(warFruit);
+//        }
     }
 }

+ 113 - 60
src/main/resources/mapper/DataShowMapper.xml

@@ -5,81 +5,134 @@
 
     <select id="selectByCompanyIdGroup" resultType="com.metro.entity.po.DataShow">
         select
-            company_id,
-            type,
-            sum(number) as number
+        sum(number) as number,
+        sum(arrest_number) as arrestNumber,
+        sum(doubt_number) as doubtNumber
         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
+        <where>
+            <if test="companyId != null and companyId != ''">
+                and company_id = #{companyId}
+            </if>
+            <if test="type != null">
+                and date &gt;= (SELECT DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'))
+            </if>
+        </where>
     </select>
-    <select id="getDataShowListByCompanyIdAndBranchId" resultType="com.metro.entity.po.DataShow">
+    <select id="getDataShowListByCompanyIdAndBranchId" resultType="com.metro.entity.vo.DataShowBrandchVO">
         select
         company_id,
         branch_id,
-        sum(number) as number
+        number,
+        arrestNumber + doubtNumber as warningNumber
+        from (
+        select
+        company_id,
+        branch_id,
+        sum(number) as number,
+        sum(arrest_number) as arrestNumber,
+        sum(doubt_number) as doubtNumber
         from data_show
         <where>
-            company_id != '' and  branch_id !=''
-            <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}
+            company_id != '' and branch_id !=''
+            <if test="companyId != null and companyId != '' ">
+                AND company_id = #{companyId}
             </if>
-            <if test="jPersonVO.branchId != null and jPersonVO.branchId != '' ">
-                AND  branch_id = #{jPersonVO.branchId}
+            <if test="dataShowMiddlerDTO.timeType == 2">
+                and date &gt;= (SELECT DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'))
             </if>
         </where>
         group by company_id,branch_id
-        order by number desc
+        )d
+        <if test="dataShowMiddlerDTO.timeType == 1">
+            order by number desc
+        </if>
+        <if test="dataShowMiddlerDTO.timeType == 2">
+            order by warningNumber desc
+        </if>
+
         limit 20
     </select>
     <select id="polliceOfficeTop10" resultType="com.metro.entity.vo.DataShowTopVO">
-        SELECT * from(
-                         SELECT
-                             t.company_id,
-                             SUM(if(t.type = 1,t.number,0)) as totalNumber,
-                             SUM(if(t.type = 2,t.number,0)) as totalWarningNumber,
-                             SUM(if(t.type = 3,t.number,0)) as totalDoubtNumber,
-                             SUM(if(t.type = 4,t.number,0)) as totalArrestNumber,
-                             SUM(if(t.type = 5,t.number,0)) as todayNumber,
-                             SUM(if(t.type = 6,t.number,0)) as todayWarningNumber,
-                             SUM(if(t.type = 7,t.number,0)) as todayDoubtNumber,
-                             SUM(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 !=''
-                                  <if test="companyId != null and companyId !=''">
-                                      and company_id = #{companyId}
-                                  </if>
-                                  <if test="startTime != null and startTime != ''">
-                                      AND  <![CDATA[ date >= #{startTime}]]>
-                                  </if>
-                                  <if test="endTime != null and endTime != '' ">
-                                      AND  <![CDATA[ date <= #{endTime}]]>
-                                  </if>
-                                  GROUP BY company_id,type
-                              )t
-                         GROUP BY t.company_id
-                     )d
-        ORDER BY (totalNumber + todayNumber) desc
+        select * from (
+        select
+        company_id,
+        sum(arrest_number) as totalArrestNumber,
+        sum(doubt_number) as totalDoubtNumber,
+        sum(number) as totalNumber
+        from data_show
+        where company_id is not null and company_id !=''
+        <if test="companyId != null and companyId !=''">
+            and company_id = #{companyId}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            AND  <![CDATA[ date >= #{startTime}]]>
+        </if>
+        <if test="endTime != null and endTime != '' ">
+            AND  <![CDATA[ date <= #{endTime}]]>
+        </if>
+        GROUP BY company_id
+        )d
+        ORDER BY (totalArrestNumber + totalDoubtNumber) desc
         <if test="limitNumber != null">
-        limit #{limitNumber}
+            limit #{limitNumber}
         </if>
     </select>
+
+    <insert id="initData">
+        INSERT INTO data_show ( company_id, branch_id, date, arrest_number, doubt_number, pass_number, exception_number,
+        number )
+        <include refid="data"></include>
+    </insert>
+
+    <select id="updateData" resultType="com.metro.entity.po.DataShow">
+        <include refid="data"></include>
+    </select>
+    <sql id="data">
+        SELECT
+        company_id,
+        branch_id,
+        date,
+        arrest_number,
+        doubt_number,
+        pass_number,
+        exception_number,
+        arrest_number + doubt_number + pass_number + exception_number AS number
+        FROM
+        (
+        SELECT
+        company_id,
+        branch_id,
+        CONCAT( date, ':00:00' ) AS date,
+        MAX(IF( pass = 0, number, 0 )) AS arrest_number,
+        MAX(IF( pass = 1, number, 0 )) AS doubt_number,
+        MAX(IF( pass = 2, number, 0 )) AS pass_number,
+        MAX(IF( pass = 3, number, 0 )) AS exception_number
+        FROM
+        (
+        SELECT
+        company_id,
+        branch_id,
+        pass,
+        count( 1 ) AS number,
+        LEFT ( pass_time, 13 ) AS date
+        FROM
+        j_passrecords
+        <where>
+            first_pass = 1
+            <if test="passTime != null and passTime != ''">
+                and pass_time > #{passTime}
+            </if>
+        </where>
+        GROUP BY
+        company_id,
+        branch_id,
+        pass,
+        date
+        ) jp
+        GROUP BY
+        company_id,
+        branch_id,
+        date
+        ) jd
+    </sql>
 </mapper>

+ 55 - 43
src/main/resources/mapper/PassreCordsMapper.xml

@@ -8,7 +8,7 @@
         max(id) as id
         from j_passrecords
         <where>
-            pass in(0,1)
+            first_pass = 1 and pass in(0,1)
             <if test="warningSearch.companyId !=null and warningSearch.companyId !=''">
                 and company_id = #{warningSearch.companyId}
             </if>
@@ -39,57 +39,67 @@
     </select>
     <select id="selectBeforDataNumber" resultType="com.metro.entity.vo.PassreCordsLessVO">
         select
-        pass,
-        count(1) as number,
-        LEFT(pass_time,10) as date
-        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,date
-        order by date,pass
+            e.pass,
+            e.number,
+            concat(e.date,':00:00') as date
+        from(
+            select
+            pass,
+            count(1) as number,
+            LEFT(pass_time,13) as date
+            from
+            j_passrecords
+            <where>
+                first_pass = 1 and 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,date
+            order by date,pass
+        )e
     </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 (
+        e.pass,
+        e.number,
+        concat(e.date,':00:00') as date
+        from(
             select
+            pass,
             count(1) as number,
-            LEFT (pass_time, 13) as time
+            LEFT(pass_time,13) as date
             from
             j_passrecords
-            where pass_time &gt;= (SELECT DATE_FORMAT(CURDATE(), '%Y-%m-%d %H:%i:%s'))
+            where first_pass = 1 and 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,date
+        )e
+    </select>
+    <select id="selectDataShowMiddlerSite" resultType="com.metro.entity.vo.PassreCordsGroupByTimeVO">
+        select
+        date,
+        number
+        from
+        data_show
+            <where>
+                date &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>
+            </where>
+        order by date
+</select>
     <select id="getWarFruit" resultType="com.metro.entity.vo.PassreCordsWarFruitVO">
         SELECT
             t.staff_card_id as cardId,
@@ -106,7 +116,7 @@
                     if(pass = 3 ,count(1),'') as number3,
                     pass
                 from j_passrecords
-                where staff_card_id is not null and staff_card_id !=''
+                where first_pass = 1 and 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>
@@ -163,7 +173,7 @@
             face_compare,
             pass_mode
         from j_passrecords
-        where id in
+        where first_pass = 1 and id in
         <foreach collection="idList" index="index" item="id" open="(" close=")" separator=",">
             #{id}
         </foreach>
@@ -173,7 +183,8 @@
 
         SELECT
         cardId,
-        date,
+        CONCAT( date, ':00:00' ) AS date,
+        sum( number ) AS number,
         Max(If(pass=0,number,0)) AS arrestNumber,
         Max(If(pass=1,number,0)) AS doubtNumber,
         Max(If(pass=2,number,0)) AS passNumber,
@@ -183,10 +194,11 @@
             staff_card_id as cardId,
             pass,
             count(1) as number,
-            LEFT(pass_time,10) as date
+            LEFT(pass_time,13) as date
             from
             j_passrecords
             <where>
+                first_pass = 1
                 <if test="type == 1 ">
                     and pass_time &lt; (SELECT DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'))
                 </if>

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

@@ -1,6 +1,8 @@
 <?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
         Max(p.xm) as xm,
@@ -34,4 +36,58 @@
         GROUP BY p.card_id
         ORDER BY number desc
     </select>
+
+    <insert id="initData">
+        INSERT INTO war_fruit ( card_id, date, arrest_number, doubt_number, pass_number, exception_number, number )
+        <include refid="data"></include>
+    </insert>
+
+    <select id="updateData" resultType="com.metro.entity.po.WarFruit">
+        <include refid="data"></include>
+    </select>
+    <sql id="data">
+        SELECT
+            staff_card_id as cardid,
+            date,
+            arrest_number,
+            doubt_number,
+            pass_number,
+            exception_number,
+            arrest_number + doubt_number + pass_number + exception_number AS number
+        FROM
+            (
+            SELECT
+            staff_card_id,
+            CONCAT( date, ':00:00' ) AS date,
+            MAX(IF( pass = 0, number, 0 )) AS arrest_number,
+            MAX(IF( pass = 1, number, 0 )) AS doubt_number,
+            MAX(IF( pass = 2, number, 0 )) AS pass_number,
+            MAX(IF( pass = 3, number, 0 )) AS exception_number
+            FROM
+            (
+            SELECT
+            staff_card_id,
+            pass,
+            count( 1 ) AS number,
+            LEFT ( pass_time, 13 ) AS date
+            FROM
+            j_passrecords
+            <where>
+                first_pass = 1
+                <if test="passTime != null and passTime != ''">
+                    and pass_time > #{passTime}
+                </if>
+            </where>
+            GROUP BY
+            staff_card_id,
+            pass,
+            date
+            ) jp
+            GROUP BY
+            staff_card_id,
+            date
+            ) jd
+    </sql>
+
+
 </mapper>