Browse Source

Merge remote-tracking branch 'origin/V1' into V1

zhengqiang 5 năm trước cách đây
mục cha
commit
e08dd5dc0b
23 tập tin đã thay đổi với 1385 bổ sung208 xóa
  1. 47 0
      common/src/main/java/com/jpsoft/smart/modules/base/dao/CheckNumCompanyDAO.java
  2. 7 2
      common/src/main/java/com/jpsoft/smart/modules/base/dao/PersonDeviceFilterLogDAO.java
  3. 4 0
      common/src/main/java/com/jpsoft/smart/modules/base/dao/PersonInfoDAO.java
  4. 36 0
      common/src/main/java/com/jpsoft/smart/modules/base/dao/TotalCheckCompanyDAO.java
  5. 69 0
      common/src/main/java/com/jpsoft/smart/modules/base/entity/CheckNumCompany.java
  6. 69 0
      common/src/main/java/com/jpsoft/smart/modules/base/entity/TotalCheckCompany.java
  7. 34 0
      common/src/main/java/com/jpsoft/smart/modules/base/service/CheckNumCompanyService.java
  8. 7 0
      common/src/main/java/com/jpsoft/smart/modules/base/service/PersonDeviceFilterLogService.java
  9. 4 0
      common/src/main/java/com/jpsoft/smart/modules/base/service/PersonInfoService.java
  10. 29 0
      common/src/main/java/com/jpsoft/smart/modules/base/service/TotalCheckCompanyService.java
  11. 88 0
      common/src/main/java/com/jpsoft/smart/modules/base/service/impl/CheckNumCompanyServiceImpl.java
  12. 140 86
      common/src/main/java/com/jpsoft/smart/modules/base/service/impl/PersonDeviceFilterLogServiceImpl.java
  13. 2 0
      common/src/main/java/com/jpsoft/smart/modules/base/service/impl/PersonDeviceLogServiceImpl.java
  14. 7 0
      common/src/main/java/com/jpsoft/smart/modules/base/service/impl/PersonInfoServiceImpl.java
  15. 63 0
      common/src/main/java/com/jpsoft/smart/modules/base/service/impl/TotalCheckCompanyServiceImpl.java
  16. 160 0
      common/src/main/resources/mapper/base/CheckNumCompanyDAO.xml
  17. 24 0
      common/src/main/resources/mapper/base/PersonDeviceFilterLog.xml
  18. 8 0
      common/src/main/resources/mapper/base/PersonInfo.xml
  19. 122 0
      common/src/main/resources/mapper/base/TotalCheckCompany.xml
  20. 203 0
      web/src/main/java/com/jpsoft/smart/modules/base/controller/HomePageController.java
  21. 112 120
      web/src/main/java/com/jpsoft/smart/modules/wechat/controller/WxController.java
  22. 95 0
      web/src/main/java/com/jpsoft/smart/schduled/CheckPersonTask.java
  23. 55 0
      web/src/test/java/com/jpsoft/smart/CheckNumCompanyTest.java

+ 47 - 0
common/src/main/java/com/jpsoft/smart/modules/base/dao/CheckNumCompanyDAO.java

@@ -0,0 +1,47 @@
+package com.jpsoft.smart.modules.base.dao;
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import org.apache.ibatis.annotations.Param;
+
+import com.jpsoft.smart.modules.base.entity.CheckNumCompany;
+import com.jpsoft.smart.modules.common.dto.Sort;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-3-27 10:35
+ */
+@Repository
+public interface CheckNumCompanyDAO {
+
+
+    int insert(CheckNumCompany entity);
+
+    int update(CheckNumCompany entity);
+
+    CheckNumCompany get(Long id);
+
+    int delete(Long id);
+
+    List<CheckNumCompany> list();
+
+    List<CheckNumCompany> search(Map<String, Object> searchParams, List<Sort> sortList);
+
+
+    CheckNumCompany  findByCompanyIdAndRecordTime(@Param("companyId")String companyId,@Param("recordTime")String recordTime);
+
+
+    Integer getDayCheckNum( @Param("recordTime") String recordTime);
+
+
+    Integer getDayCheckNumByCompanyList(@Param("recordTime") String recordTime, @Param("list") List<CompanyInfo> list);
+
+    List<CheckNumCompany> findByRecordTime(@Param("recordTime")String recordTime);
+
+
+    Integer getDayNormalNumByCompanyList(@Param("recordTime") String recordTime,@Param("list") List<CompanyInfo> list);
+
+    Integer getDayAbnormalNumByCompanyList(@Param("recordTime") String recordTime, @Param("list") List<CompanyInfo> list);
+}

+ 7 - 2
common/src/main/java/com/jpsoft/smart/modules/base/dao/PersonDeviceFilterLogDAO.java

@@ -1,4 +1,5 @@
 package com.jpsoft.smart.modules.base.dao;
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
 import org.apache.ibatis.annotations.Param;
 
 import com.jpsoft.smart.modules.base.entity.PersonDeviceFilterLog;
@@ -49,6 +50,10 @@ public interface PersonDeviceFilterLogDAO {
     long countByTimeRangeAndCompanyCode(String companyCode,Long personId,int status, Date startDate, Date endDate);
     long countUndetectedByCompanyCode(String companyCode,Long personId, Date startTime, Date endTime);
 
-    List<PersonInfo> queryUnAttendanceList(String companyCode, Date startTime, Date endTime);
-    List<PersonInfo> queryAttendanceList(String companyCode, Date startTime, Date endTime);
+    Integer getDayAbnormalNum(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+
+    Integer getDayAbnormalNumByCompanyList(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("list") List<CompanyInfo> list);
+
+    Integer getDayNormalNumByCompanyId( @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("companyId") String companyId);
 }

+ 4 - 0
common/src/main/java/com/jpsoft/smart/modules/base/dao/PersonInfoDAO.java

@@ -1,6 +1,8 @@
 package com.jpsoft.smart.modules.base.dao;
 
 import java.util.List;
+
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
 import org.springframework.stereotype.Repository;
 import com.jpsoft.smart.modules.base.entity.PersonInfo;
 import java.util.Map;
@@ -22,4 +24,6 @@ public interface PersonInfoDAO {
 
 	PersonInfo getIgnoreDelFlag(Long id);
 	List<PersonInfo> findByCompanyCode(String code,List<Sort> sortList);
+
+    long countByCompanyList(List<CompanyInfo> list);
 }

+ 36 - 0
common/src/main/java/com/jpsoft/smart/modules/base/dao/TotalCheckCompanyDAO.java

@@ -0,0 +1,36 @@
+package com.jpsoft.smart.modules.base.dao;
+import org.apache.ibatis.annotations.Param;
+
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import com.jpsoft.smart.modules.base.entity.TotalCheckCompany;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-3-27 14:39
+ */
+@Repository
+public interface TotalCheckCompanyDAO {
+
+    TotalCheckCompany get(Long id);
+
+    Integer findMinNormalDay();
+
+    Integer getTotalAbnormalNum();
+
+    Integer findMinNormalDayByCompanyList(List<CompanyInfo> list);
+
+    Integer getTotalAbnormalNumByCompanyList(List<CompanyInfo> list);
+
+    TotalCheckCompany findByCompanyId(String id);
+
+    int insert(TotalCheckCompany totalCheckCompany);
+
+    int update(TotalCheckCompany totalCheckCompany);
+
+    Integer  getTotalCheckNum(@Param("list") List<CompanyInfo> list);
+
+
+}

+ 69 - 0
common/src/main/java/com/jpsoft/smart/modules/base/entity/CheckNumCompany.java

@@ -0,0 +1,69 @@
+package com.jpsoft.smart.modules.base.entity;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(value = "base_check_num_company的实体类")
+public class CheckNumCompany {
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 公司id
+     */
+    private String companyId;
+
+    /**
+     * 检测人数
+     */
+    private Long checkNum;
+
+
+    /**
+     * 正常人数
+     */
+    private Long normalNum;
+
+    /**
+     * 异常人数
+     */
+    private Long abnormalNum;
+
+    /**
+     * 记录时间
+     */
+    private String recordTime;
+
+    /**
+     * 是否删除
+     */
+    private Boolean delFlag;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+
+}
+

+ 69 - 0
common/src/main/java/com/jpsoft/smart/modules/base/entity/TotalCheckCompany.java

@@ -0,0 +1,69 @@
+package com.jpsoft.smart.modules.base.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+import lombok.Data;
+
+@Data
+public class TotalCheckCompany {
+    /**
+     *
+     */
+    @ApiModelProperty(value = "")
+    private Long id;
+
+    /**
+     * 公司id
+     */
+    @ApiModelProperty(value = "公司id")
+    private String companyId;
+
+    /**
+     * 无异常天数
+     */
+    @ApiModelProperty(value = "无异常天数")
+    private Long normalDay;
+
+    /**
+     * 除今天外总检测人次
+     */
+    @ApiModelProperty(value = "除今天外总检测人次")
+    private Long totalCheckNum;
+
+    /**
+     * 除今天外总异常人数
+     */
+    @ApiModelProperty(value = "除今天外总异常人数")
+    private Long totalAbnormalNum;
+
+    /**
+     * 是否删除
+     */
+    @ApiModelProperty(value = "是否删除")
+    private Boolean delFlag;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}
+

+ 34 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/CheckNumCompanyService.java

@@ -0,0 +1,34 @@
+package com.jpsoft.smart.modules.base.service;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.smart.modules.base.entity.CheckNumCompany;
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import com.jpsoft.smart.modules.common.dto.Sort;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-3-27 10:32
+ */
+public interface CheckNumCompanyService {
+    CheckNumCompany get(Long id);
+    int insert(CheckNumCompany model);
+    int update(CheckNumCompany model);
+    int delete(Long id);
+    List<CheckNumCompany> list();
+    Page<CheckNumCompany> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
+
+    CheckNumCompany findByCompanyIdAndRecordTime(String companyId, String recordTime);
+
+    Integer getDayCheckNum(String recordTime);
+
+    Integer getDayCheckNumByCompanyList(String recordTime, List<CompanyInfo> list);
+
+    List<CheckNumCompany> findByRecordTime(String recordTime);
+
+    Integer getDayNormalNumByCompanyList(String day, List<CompanyInfo> list);
+
+    Integer getDayAbnormalNumByCompanyList(String day, List<CompanyInfo> list);
+}

+ 7 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/PersonDeviceFilterLogService.java

@@ -1,7 +1,9 @@
 package com.jpsoft.smart.modules.base.service;
 
+import cn.hutool.core.date.DateTime;
 import cn.hutool.json.JSONObject;
 import com.github.pagehelper.Page;
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
 import com.jpsoft.smart.modules.base.entity.PersonDeviceFilterLog;
 import com.jpsoft.smart.modules.base.entity.PersonInfo;
 import com.jpsoft.smart.modules.common.dto.Sort;
@@ -50,4 +52,9 @@ public interface PersonDeviceFilterLogService {
     long countByTimeRangeAndCompanyCode(String companyCode,Long personId,int status,Date startTime, Date endTime);
     long countUndetectedByCompanyCode(String companyCode,Long personId, Date startTime, Date endTime);
 
+    Integer getDayAbnormalNum(Date startTime, Date endTime);
+
+    Integer getDayAbnormalNumByCompanyList(Date startTime, Date endTime, List<CompanyInfo> list);
+
+    Integer getDayNormalNumByCompanyId(Date startTime,Date endTime, String companyId);
 }

+ 4 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/PersonInfoService.java

@@ -2,6 +2,8 @@ package com.jpsoft.smart.modules.base.service;
 
 import java.util.List;
 import java.util.Map;
+
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
 import com.jpsoft.smart.modules.base.entity.PersonInfo;
 import com.github.pagehelper.Page;
 import com.jpsoft.smart.modules.common.dto.Sort;
@@ -24,4 +26,6 @@ public interface PersonInfoService {
     long countByCompanyCode(String code,Long relatePersonId);
 
 	List<PersonInfo> findByCompanyCode(String code,List<Sort> sortList);
+
+	long countByCompanyList(List<CompanyInfo> list);
 }

+ 29 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/TotalCheckCompanyService.java

@@ -0,0 +1,29 @@
+package com.jpsoft.smart.modules.base.service;
+
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import com.jpsoft.smart.modules.base.entity.TotalCheckCompany;
+
+import java.util.List;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-3-27 14:37
+ */
+public interface TotalCheckCompanyService {
+
+    int insert(TotalCheckCompany totalCheckCompany);
+
+    Integer findMinNormalDay();
+
+    Integer getTotalAbnormalNum();
+
+    Integer findMinNormalDayByCompanyList(List<CompanyInfo> list);
+
+    Integer getTotalAbnormalNumByCompanyList(List<CompanyInfo> list);
+
+    TotalCheckCompany findByCompanyId(String id);
+
+    int update(TotalCheckCompany totalCheckCompany);
+
+    Integer getTotalCheckNum(List<CompanyInfo> list);
+}

+ 88 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/impl/CheckNumCompanyServiceImpl.java

@@ -0,0 +1,88 @@
+package com.jpsoft.smart.modules.base.service.impl;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.smart.modules.base.dao.CheckNumCompanyDAO;
+import com.jpsoft.smart.modules.base.entity.CheckNumCompany;
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import com.jpsoft.smart.modules.base.service.CheckNumCompanyService;
+import com.jpsoft.smart.modules.common.dto.Sort;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-3-27 10:32
+ */
+@Transactional
+@Component(value="checkNumCompanyService")
+public class CheckNumCompanyServiceImpl implements CheckNumCompanyService {
+
+    @Resource(name="checkNumCompanyDAO")
+    private CheckNumCompanyDAO checkNumCompanyDAO;
+
+
+    @Override
+    public CheckNumCompany get(Long id) {
+        return checkNumCompanyDAO.get(id);
+    }
+
+
+    @Override
+    public int insert(CheckNumCompany model) {
+        return checkNumCompanyDAO.insert(model);
+    }
+
+    @Override
+    public int update(CheckNumCompany model) {
+        return checkNumCompanyDAO.update(model);
+    }
+
+    @Override
+    public int delete(Long id) {
+        return checkNumCompanyDAO.delete(id);
+    }
+
+    @Override
+    public List<CheckNumCompany> list() {
+        return checkNumCompanyDAO.list();
+    }
+
+    @Override
+    public Page<CheckNumCompany> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList) {
+        return null;
+    }
+
+    @Override
+    public CheckNumCompany findByCompanyIdAndRecordTime(String companyId, String recordTime) {
+        return checkNumCompanyDAO.findByCompanyIdAndRecordTime(companyId,recordTime);
+    }
+
+    @Override
+    public Integer getDayCheckNum(String recordTime) {
+        return checkNumCompanyDAO.getDayCheckNum(recordTime);
+    }
+
+    @Override
+    public Integer getDayCheckNumByCompanyList(String recordTime, List<CompanyInfo> list) {
+        return checkNumCompanyDAO.getDayCheckNumByCompanyList(recordTime,list);
+    }
+
+    @Override
+    public List<CheckNumCompany> findByRecordTime(String recordTime) {
+        return checkNumCompanyDAO.findByRecordTime(recordTime);
+    }
+
+    @Override
+    public Integer getDayNormalNumByCompanyList(String day, List<CompanyInfo> list) {
+        return checkNumCompanyDAO.getDayNormalNumByCompanyList(day,list);
+    }
+
+    @Override
+    public Integer getDayAbnormalNumByCompanyList(String day, List<CompanyInfo> list) {
+        return checkNumCompanyDAO.getDayAbnormalNumByCompanyList(day,list);
+    }
+}

+ 140 - 86
common/src/main/java/com/jpsoft/smart/modules/base/service/impl/PersonDeviceFilterLogServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jpsoft.smart.modules.base.service.impl;
 
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONObject;
 import com.github.pagehelper.Page;
@@ -7,9 +8,10 @@ import com.github.pagehelper.PageHelper;
 import com.jpsoft.smart.config.OSSConfig;
 import com.jpsoft.smart.modules.base.dao.PersonDeviceFilterLogDAO;
 import com.jpsoft.smart.modules.base.dao.PersonDeviceLogDAO;
-import com.jpsoft.smart.modules.base.entity.PersonDeviceFilterLog;
-import com.jpsoft.smart.modules.base.entity.PersonInfo;
+import com.jpsoft.smart.modules.base.entity.*;
+import com.jpsoft.smart.modules.base.service.CheckNumCompanyService;
 import com.jpsoft.smart.modules.base.service.PersonDeviceFilterLogService;
+import com.jpsoft.smart.modules.base.service.PersonInfoService;
 import com.jpsoft.smart.modules.common.dto.Sort;
 import com.jpsoft.smart.modules.common.utils.LApiUtil;
 import com.jpsoft.smart.modules.common.utils.OSSUtil;
@@ -33,13 +35,19 @@ import java.util.Map;
  */
 @Slf4j
 @Transactional
-@Component(value="personDeviceFilterLogService")
+@Component(value = "personDeviceFilterLogService")
 public class PersonDeviceFilterLogServiceImpl implements PersonDeviceFilterLogService {
 
     @Autowired
     private OSSConfig ossConfig;
 
-    @Resource(name="personDeviceFilterLogDAO")
+    @Autowired
+    private PersonInfoService personInfoService;
+
+    @Autowired
+    private CheckNumCompanyService checkNumCompanyService;
+
+    @Resource(name = "personDeviceFilterLogDAO")
     private PersonDeviceFilterLogDAO personDeviceFilterLogDAO;
 
     @Override
@@ -51,155 +59,201 @@ public class PersonDeviceFilterLogServiceImpl implements PersonDeviceFilterLogSe
     @Override
     public void deviceInsertFilterLog(String deviceNo, BigDecimal temperature, JSONObject faceImageJson, JSONObject libMatInfoListJson, JSONObject matchPersonInfo, Date date) {
 
-        try{
+        try {
 
 
-        String retFileUrl = "";
-        try{
+            String retFileUrl = "";
+            try {
 
-            BASE64Decoder decoder = new BASE64Decoder();
+                BASE64Decoder decoder = new BASE64Decoder();
 
-            byte[] imgData = decoder.decodeBuffer(faceImageJson.getStr("Data"));
+                byte[] imgData = decoder.decodeBuffer(faceImageJson.getStr("Data"));
 
-            for (int i = 0; i < imgData.length; ++i) {
-                if (imgData[i] < 0) {// 调整异常数据
-                    imgData[i] += 256;
+                for (int i = 0; i < imgData.length; ++i) {
+                    if (imgData[i] < 0) {// 调整异常数据
+                        imgData[i] += 256;
+                    }
                 }
-            }
 
-            ByteArrayInputStream inputStream = new ByteArrayInputStream(imgData);
+                ByteArrayInputStream inputStream = new ByteArrayInputStream(imgData);
 
 
+                retFileUrl = OSSUtil.upload(ossConfig, "/devicePersonLog", faceImageJson.getStr("Name"), inputStream);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
 
-            retFileUrl = OSSUtil.upload(ossConfig,"/devicePersonLog",faceImageJson.getStr("Name"), inputStream);
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-
-        //记录的时间段
-        String timeZones = DateUtil.format(date, "yyyy-MM-dd-HH");
-        Integer personId = LApiUtil.getPersonCode(libMatInfoListJson,matchPersonInfo);
-        if (personId !=0 && temperature.compareTo(BigDecimal.ZERO)==1){
-            PersonDeviceFilterLog personDeviceFilterLog = personDeviceFilterLogDAO.findByPersonIdAndDeviceNoAndTimeZones(personId,deviceNo,timeZones);
-
-            if (personDeviceFilterLog != null){
-                BigDecimal oldTemper = personDeviceFilterLog.getTemperature();
-                personDeviceFilterLog.setUpdateTime(new Date());
-                personDeviceFilterLog.setTemperature(temperature);
-                personDeviceFilterLog.setRecordTime(date);
-                personDeviceFilterLog.setFaceImage(retFileUrl);
-                personDeviceFilterLog.setCreateTime(new Date());
-
-                if (StringUtils.isNotBlank(libMatInfoListJson.getStr("MatchStatus"))){
-                    personDeviceFilterLog.setMatchStatus(libMatInfoListJson.getInt("MatchStatus"));
-                    personDeviceFilterLog.setMatchMsg(LApiUtil.getMatchMsg(libMatInfoListJson.getInt("MatchStatus")));
-                    personDeviceFilterLog.setMatchFaceId(libMatInfoListJson.getInt("MatchFaceID"));
-                }else {
-                    personDeviceFilterLog.setMatchStatus(0);
-                    personDeviceFilterLog.setMatchFaceId(0);
-                }
+            //记录的时间段
+            String timeZones = DateUtil.format(date, "yyyy-MM-dd-HH");
+            Integer personId = LApiUtil.getPersonCode(libMatInfoListJson, matchPersonInfo);
+            if (personId != 0 && temperature.compareTo(BigDecimal.ZERO) == 1) {
+
+
+                PersonDeviceFilterLog personDeviceFilterLog = personDeviceFilterLogDAO.findByPersonIdAndDeviceNoAndTimeZones(personId, deviceNo, timeZones);
+
+                if (personDeviceFilterLog != null) {
+                    BigDecimal oldTemper = personDeviceFilterLog.getTemperature();
+                    personDeviceFilterLog.setUpdateTime(new Date());
+                    personDeviceFilterLog.setTemperature(temperature);
+                    personDeviceFilterLog.setRecordTime(date);
+                    personDeviceFilterLog.setFaceImage(retFileUrl);
+                    personDeviceFilterLog.setCreateTime(new Date());
+
+                    if (StringUtils.isNotBlank(libMatInfoListJson.getStr("MatchStatus"))) {
+                        personDeviceFilterLog.setMatchStatus(libMatInfoListJson.getInt("MatchStatus"));
+                        personDeviceFilterLog.setMatchMsg(LApiUtil.getMatchMsg(libMatInfoListJson.getInt("MatchStatus")));
+                        personDeviceFilterLog.setMatchFaceId(libMatInfoListJson.getInt("MatchFaceID"));
+                    } else {
+                        personDeviceFilterLog.setMatchStatus(0);
+                        personDeviceFilterLog.setMatchFaceId(0);
+                    }
 
-                if (!LApiUtil.compareToInterval(oldTemper,36,37)){
-                    if (LApiUtil.compareToInterval(temperature,36,37)){
+                    if (!LApiUtil.compareToInterval(oldTemper, 36, 37)) {
+                        if (LApiUtil.compareToInterval(temperature, 36, 37)) {
 
-                        personDeviceFilterLogDAO.update(personDeviceFilterLog);
-                    }else {
-                        if (temperature.compareTo(oldTemper)==-1){
                             personDeviceFilterLogDAO.update(personDeviceFilterLog);
+                        } else {
+                            if (temperature.compareTo(oldTemper) == -1) {
+                                personDeviceFilterLogDAO.update(personDeviceFilterLog);
+                            }
                         }
                     }
+                } else {
+                    PersonDeviceFilterLog personDeviceFilterLog1 = new PersonDeviceFilterLog();
+                    personDeviceFilterLog1.setDeviceNo(deviceNo);
+                    personDeviceFilterLog1.setPersonId(personId);
+                    personDeviceFilterLog1.setTemperature(temperature);
+                    if (StringUtils.isNotBlank(libMatInfoListJson.getStr("MatchStatus"))) {
+                        personDeviceFilterLog1.setMatchStatus(libMatInfoListJson.getInt("MatchStatus"));
+                        personDeviceFilterLog1.setMatchMsg(LApiUtil.getMatchMsg(libMatInfoListJson.getInt("MatchStatus")));
+                        personDeviceFilterLog1.setMatchFaceId(libMatInfoListJson.getInt("MatchFaceID"));
+                    } else {
+                        personDeviceFilterLog1.setMatchStatus(0);
+                        personDeviceFilterLog1.setMatchFaceId(0);
+                    }
+                    personDeviceFilterLog1.setFaceImage(retFileUrl);
+                    personDeviceFilterLog1.setRecordTime(date);
+                    personDeviceFilterLog1.setTimeZones(timeZones);
+                    personDeviceFilterLog1.setDelFlag(false);
+                    personDeviceFilterLog1.setCreateTime(new Date());
+
+                    personDeviceFilterLogDAO.insert(personDeviceFilterLog1);
                 }
-            }else {
-                PersonDeviceFilterLog personDeviceFilterLog1 = new PersonDeviceFilterLog();
-                personDeviceFilterLog1.setDeviceNo(deviceNo);
-                personDeviceFilterLog1.setPersonId(personId);
-                personDeviceFilterLog1.setTemperature(temperature);
-                if (StringUtils.isNotBlank(libMatInfoListJson.getStr("MatchStatus"))){
-                    personDeviceFilterLog1.setMatchStatus(libMatInfoListJson.getInt("MatchStatus"));
-                    personDeviceFilterLog1.setMatchMsg(LApiUtil.getMatchMsg(libMatInfoListJson.getInt("MatchStatus")));
-                    personDeviceFilterLog1.setMatchFaceId(libMatInfoListJson.getInt("MatchFaceID"));
-                }else {
-                    personDeviceFilterLog1.setMatchStatus(0);
-                    personDeviceFilterLog1.setMatchFaceId(0);
-                }
-                personDeviceFilterLog1.setFaceImage(retFileUrl);
-                personDeviceFilterLog1.setRecordTime(date);
-                personDeviceFilterLog1.setTimeZones(timeZones);
-                personDeviceFilterLog1.setDelFlag(false);
-                personDeviceFilterLog1.setCreateTime(new Date());
 
-                personDeviceFilterLogDAO.insert(personDeviceFilterLog1);
+                new Thread(() -> {
+                    try {
+                        addCheckNumForCompany(personId, temperature, date);
+                    } catch (Exception e) {
+                        log.error(e.getMessage(), e);
+                    }
+                }).start();
             }
-        }
 
-        }catch (Exception e){
+        } catch (Exception e) {
 
             log.error(e.getMessage());
         }
 
 
+    }
+
+    public void addCheckNumForCompany(Integer personId, BigDecimal temperature, Date date) {
+
+        String recordTime = DateUtil.format(date, "yyyy-MM-dd");
+        PersonInfo personInfo = personInfoService.get(personId.longValue());
+        if (StringUtils.isNotBlank(personInfo.getCompanyId())) {
+            CheckNumCompany checkNumCompany = checkNumCompanyService.findByCompanyIdAndRecordTime(personInfo.getCompanyId(), recordTime);
+            if (checkNumCompany != null) {
+                Integer checkNum = checkNumCompany.getCheckNum().intValue() + 1;
+                checkNumCompany.setCheckNum(checkNum.longValue());
+                checkNumCompanyService.update(checkNumCompany);
+            } else {
+                CheckNumCompany checkNumCompany1 = new CheckNumCompany();
+                checkNumCompany1.setCompanyId(personInfo.getCompanyId());
+                checkNumCompany1.setCheckNum(1L);
+                checkNumCompany1.setDelFlag(false);
+                checkNumCompany1.setRecordTime(recordTime);
+                checkNumCompany1.setCreateTime(new Date());
+                checkNumCompanyService.insert(checkNumCompany1);
+            }
+        }
 
     }
 
 
     @Override
-    public  Page<PersonDeviceFilterLog> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize, boolean count, List<Sort> sortList){
-        Page<PersonDeviceFilterLog> page = PageHelper.startPage(pageNumber,pageSize,count).doSelectPage(()->{
-            personDeviceFilterLogDAO.search(searchParams,sortList);
+    public Page<PersonDeviceFilterLog> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize, boolean count, List<Sort> sortList) {
+        Page<PersonDeviceFilterLog> page = PageHelper.startPage(pageNumber, pageSize, count).doSelectPage(() -> {
+            personDeviceFilterLogDAO.search(searchParams, sortList);
         });
 
         return page;
     }
 
     @Override
-    public List<PersonDeviceFilterLog> findByPersonAndDate(Long personId,String startDate,String endDate){
-        return personDeviceFilterLogDAO.findByPersonAndDate(personId,startDate,endDate);
+    public List<PersonDeviceFilterLog> findByPersonAndDate(Long personId, String startDate, String endDate) {
+        return personDeviceFilterLogDAO.findByPersonAndDate(personId, startDate, endDate);
     }
 
     @Override
-    public PersonDeviceFilterLog findByPersonOrderTemperature(Long personId,String startDate,String endDate){
-        return personDeviceFilterLogDAO.findByPersonOrderTemperature(personId,startDate,endDate);
+    public PersonDeviceFilterLog findByPersonOrderTemperature(Long personId, String startDate, String endDate) {
+        return personDeviceFilterLogDAO.findByPersonOrderTemperature(personId, startDate, endDate);
     }
 
     @Override
-    public PersonDeviceFilterLog lastPersonLog(Long personId){
+    public PersonDeviceFilterLog lastPersonLog(Long personId) {
         return personDeviceFilterLogDAO.lastPersonLog(personId);
     }
 
     @Override
-    public PersonDeviceFilterLog getByPersonIdAndDate(Long personId,String startDate,String endDate){
-        return personDeviceFilterLogDAO.getByPersonIdAndDate(personId,startDate,endDate);
+    public PersonDeviceFilterLog getByPersonIdAndDate(Long personId, String startDate, String endDate) {
+        return personDeviceFilterLogDAO.getByPersonIdAndDate(personId, startDate, endDate);
     }
 
 
     @Override
-    public List<PersonDeviceFilterLog> list(){
+    public List<PersonDeviceFilterLog> list() {
         return personDeviceFilterLogDAO.list();
     }
 
     @Override
-    public long countByTimeRangeAndCompanyCode(String companyCode,Long personId,int status, Date startDate, Date endDate) {
-        return personDeviceFilterLogDAO.countByTimeRangeAndCompanyCode(companyCode,personId,status,startDate,endDate);
+    public long countByTimeRangeAndCompanyCode(String companyCode, Long personId, int status, Date startDate, Date endDate) {
+        return personDeviceFilterLogDAO.countByTimeRangeAndCompanyCode(companyCode, personId, status, startDate, endDate);
     }
 
     @Override
     public List<PersonDeviceFilterLog> temperatureNormalStatistics(String companyCode, BigDecimal temperature, Date startDate, Date endDate) {
 
-        return personDeviceFilterLogDAO.temperatureNormalStatistics(companyCode,temperature,startDate,endDate);
+        return personDeviceFilterLogDAO.temperatureNormalStatistics(companyCode, temperature, startDate, endDate);
     }
 
     @Override
     public List<PersonDeviceFilterLog> temperatureUnusualStatistics(String companyCode, BigDecimal temperature, Date startDate, Date endDate) {
-        return personDeviceFilterLogDAO.temperatureUnusualStatistics(companyCode,temperature,startDate,endDate);
+        return personDeviceFilterLogDAO.temperatureUnusualStatistics(companyCode, temperature, startDate, endDate);
+    }
+
+    @Override
+    public List<Map<String, Object>> unusualStatistics(String companyCode, Long personId, BigDecimal temperature, Date startDate, Date endDate) {
+        return personDeviceFilterLogDAO.unusualStatistics(companyCode, personId, temperature, startDate, endDate);
+    }
+
+    @Override
+    public long countUndetectedByCompanyCode(String companyCode, Long personId, Date startTime, Date endTime) {
+        return personDeviceFilterLogDAO.countUndetectedByCompanyCode(companyCode, personId, startTime, endTime);
+    }
+
+    @Override
+    public Integer getDayAbnormalNum(Date startTime, Date endTime) {
+        return personDeviceFilterLogDAO.getDayAbnormalNum(startTime,endTime);
     }
 
     @Override
-    public List<Map<String, Object>> unusualStatistics(String companyCode,Long personId, BigDecimal temperature, Date startDate, Date endDate) {
-        return personDeviceFilterLogDAO.unusualStatistics(companyCode,personId,temperature,startDate,endDate);
+    public Integer getDayAbnormalNumByCompanyList(Date startTime, Date endTime, List<CompanyInfo> list) {
+        return personDeviceFilterLogDAO.getDayAbnormalNumByCompanyList(startTime,endTime,list);
     }
 
     @Override
-    public long countUndetectedByCompanyCode(String companyCode,Long personId, Date startTime, Date endTime) {
-        return personDeviceFilterLogDAO.countUndetectedByCompanyCode(companyCode,personId,startTime,endTime);
+    public Integer getDayNormalNumByCompanyId(Date startTime,Date endTime, String companyId) {
+        return personDeviceFilterLogDAO.getDayNormalNumByCompanyId(startTime,endTime,companyId);
     }
 }

+ 2 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/impl/PersonDeviceLogServiceImpl.java

@@ -168,6 +168,8 @@ public class PersonDeviceLogServiceImpl implements PersonDeviceLogService {
 
     }
 
+
+
     @Override
     public Page<PersonDeviceLog> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize, boolean count, List<Sort> sortList) {
         Page<PersonDeviceLog> page = PageHelper.startPage(pageNumber, pageSize, count).doSelectPage(() -> {

+ 7 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/impl/PersonInfoServiceImpl.java

@@ -4,6 +4,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import javax.annotation.Resource;
+
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import com.jpsoft.smart.modules.base.dao.PersonInfoDAO;
@@ -93,6 +95,11 @@ public class PersonInfoServiceImpl implements PersonInfoService {
 		return personInfoDAO.findByCompanyCode(code,sortList);
 	}
 
+	@Override
+	public long countByCompanyList(List<CompanyInfo> list) {
+		return personInfoDAO.countByCompanyList(list);
+	}
+
 	@Override
 	public PersonInfo getIgnoreDelFlag(Long id) {
 		return personInfoDAO.getIgnoreDelFlag(id);

+ 63 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/impl/TotalCheckCompanyServiceImpl.java

@@ -0,0 +1,63 @@
+package com.jpsoft.smart.modules.base.service.impl;
+
+import com.jpsoft.smart.modules.base.dao.TotalCheckCompanyDAO;
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import com.jpsoft.smart.modules.base.entity.TotalCheckCompany;
+import com.jpsoft.smart.modules.base.service.TotalCheckCompanyService;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-3-27 14:38
+ */
+@Transactional
+@Component(value="totalCheckCompanyService")
+public class TotalCheckCompanyServiceImpl implements TotalCheckCompanyService {
+
+    @Resource(name = "totalCheckCompanyDAO")
+    private TotalCheckCompanyDAO totalCheckCompanyDAO;
+
+    @Override
+    public int insert(TotalCheckCompany totalCheckCompany) {
+        return totalCheckCompanyDAO.insert(totalCheckCompany);
+    }
+
+    @Override
+    public Integer findMinNormalDay() {
+        return totalCheckCompanyDAO.findMinNormalDay();
+    }
+
+    @Override
+    public Integer getTotalAbnormalNum() {
+        return totalCheckCompanyDAO.getTotalAbnormalNum();
+    }
+
+    @Override
+    public Integer findMinNormalDayByCompanyList(List<CompanyInfo> list) {
+        return totalCheckCompanyDAO.findMinNormalDayByCompanyList(list);
+    }
+
+    @Override
+    public Integer getTotalAbnormalNumByCompanyList(List<CompanyInfo> list) {
+        return totalCheckCompanyDAO.getTotalAbnormalNumByCompanyList(list);
+    }
+
+    @Override
+    public TotalCheckCompany findByCompanyId(String id) {
+        return totalCheckCompanyDAO.findByCompanyId(id);
+    }
+
+    @Override
+    public int update(TotalCheckCompany totalCheckCompany) {
+        return totalCheckCompanyDAO.update(totalCheckCompany);
+    }
+
+    @Override
+    public Integer getTotalCheckNum(List<CompanyInfo> list) {
+        return totalCheckCompanyDAO.getTotalCheckNum(list);
+    }
+}

+ 160 - 0
common/src/main/resources/mapper/base/CheckNumCompanyDAO.xml

@@ -0,0 +1,160 @@
+<?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.jpsoft.smart.modules.base.dao.CheckNumCompanyDAO">
+
+
+    <sql id="Base_Column_List">
+    id_,
+    company_id,
+    check_num,
+    normal_num,
+    abnormal_num,
+    record_time,
+    del_flag,
+    create_by,
+    create_time,
+    update_by,
+    update_time
+</sql>
+    <resultMap id="CheckNumCompanyMap" type="com.jpsoft.smart.modules.base.entity.CheckNumCompany">
+        <id property="id" column="id_"/>
+        <result property="companyId" column="company_id"/>
+        <result property="checkNum" column="check_num" />
+        <result property="normalNum" column="normal_num" />
+        <result property="abnormalNum" column="abnormal_num"/>
+        <result property="recordTime" column="record_time"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="get" parameterType="long" resultMap="CheckNumCompanyMap">
+        select *  from base_check_num_company where id_=#{0}
+    </select>
+    <insert id="insert" parameterType="com.jpsoft.smart.modules.base.entity.CheckNumCompany">
+    insert into base_check_num_company
+    (company_id,check_num,normal_num,abnormal_num,record_time,del_flag,
+    create_by,create_time,update_by,update_time)
+    values
+    (
+    #{companyId,jdbcType=VARCHAR}
+    ,#{checkNum,jdbcType=NUMERIC}
+    ,#{normalNum,jdbcType=NUMERIC}
+    ,#{abnormalNum,jdbcType=NUMERIC}
+    ,#{recordTime,jdbcType=VARCHAR}
+    ,#{delFlag,jdbcType= NUMERIC }
+    ,#{createBy,jdbcType=VARCHAR}
+    ,#{createTime,jdbcType= TIMESTAMP }
+    ,#{updateBy,jdbcType=VARCHAR}
+    ,#{updateTime,jdbcType= TIMESTAMP }
+    )
+</insert>
+    <update id="update" parameterType="com.jpsoft.smart.modules.base.entity.CheckNumCompany">
+        update base_check_num_company
+        <set>
+            <if test="companyId!=null">
+                company_id=#{companyId,jdbcType=VARCHAR},
+            </if>
+            <if test="checkNum!=null">
+                check_num=#{checkNum,jdbcType=NUMERIC},
+            </if>
+            <if test="normalNum!=null">
+                normal_num=#{normalNum,jdbcType=NUMERIC},
+            </if>
+
+            <if test="abnormalNum!=null">
+                abnormal_num=#{abnormalNum,jdbcType=NUMERIC},
+            </if>
+            <if test="recordTime!=null">
+                record_time=#{recordTime,jdbcType=VARCHAR},
+            </if>
+            <if test="delFlag!=null">
+                del_flag=#{delFlag,jdbcType= NUMERIC },
+            </if>
+            <if test="createBy!=null">
+                create_by=#{createBy,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime!=null">
+                create_time=#{createTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="updateBy!=null">
+                update_by=#{updateBy,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime!=null">
+                update_time=#{updateTime,jdbcType= TIMESTAMP },
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+    <delete id="delete" parameterType="long">
+        delete from base_check_num_company where id_=#{id,jdbcType=NUMERIC}
+    </delete>
+    <select id="list" resultMap="CheckNumCompanyMap">
+        select * from base_check_num_company where del_flag = 0
+    </select>
+    <select id="search" resultMap="CheckNumCompanyMap"></select>
+
+<!--auto generated by MybatisCodeHelper on 2020-03-27-->
+    <select id="findByCompanyIdAndRecordTime" resultMap="CheckNumCompanyMap">
+        select
+        <include refid="Base_Column_List"/>
+        from base_check_num_company
+        where company_id=#{companyId} and record_time=#{recordTime} and del_flag = false
+    </select>
+    <select id="getDayCheckNum" parameterType="String" resultType="Integer">
+        select sum(check_num) from  base_check_num_company where del_flag = 0
+        <if test="recordTime!=null">
+           and record_time = #{recordTime}
+        </if>
+    </select>
+
+    <select id="getDayCheckNumByCompanyList"  resultType="Integer">
+        select sum(check_num) from  base_check_num_company where del_flag = 0
+        and
+        company_id in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">   #{item.id}
+        </foreach>
+
+        <if test="recordTime!=null">
+            and record_time = #{recordTime}
+        </if>
+    </select>
+
+
+    <select id="findByRecordTime" parameterType="String" resultMap="CheckNumCompanyMap">
+        select
+        *
+        from base_check_num_company
+        where record_time=#{recordTime} and del_flag = 0
+    </select>
+
+    <select id="getDayNormalNumByCompanyList" resultType="Integer">
+        select sum(normal_num) from  base_check_num_company where del_flag = 0
+        <if test="recordTime!=null">
+            and record_time = #{recordTime}
+        </if>
+
+        <if test="list!=null">
+            and
+            company_id in
+            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">   #{item.id}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="getDayAbnormalNumByCompanyList" resultType="Integer">
+        select sum(abnormal_num) from  base_check_num_company where del_flag = 0
+        <if test="recordTime!=null">
+            and record_time = #{recordTime}
+        </if>
+
+        <if test="list!=null">
+            and
+            company_id in
+            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">   #{item.id}
+            </foreach>
+        </if>
+    </select>
+</mapper>

+ 24 - 0
common/src/main/resources/mapper/base/PersonDeviceFilterLog.xml

@@ -298,4 +298,28 @@
         </if>
         )
     </select>
+    <select id="getDayAbnormalNum" resultType="java.lang.Integer">
+        select count(DISTINCT person_id) from base_person_device_filter_log where record_time >=#{startTime} and record_time &lt;= #{endTime} and temperature_>37.3
+    </select>
+    <select id="getDayAbnormalNumByCompanyList" resultType="Integer">
+        select count(DISTINCT person_id) from base_person_device_filter_log a left join base_person_info b
+        on a.person_id = b.id_
+        where a.record_time >=#{startTime}
+        and a.record_time &lt;= #{endTime}
+        and a.temperature_>37.3
+        and b.company_id in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">   #{item.id}
+        </foreach>
+        and a.del_flag = 0
+    </select>
+
+    <select id="getDayNormalNumByCompanyId" resultType="Integer">
+        select count(DISTINCT person_id) from base_person_device_filter_log a left join base_person_info b
+        on a.person_id = b.id_
+        where a.record_time >=#{startTime}
+        and a.record_time &lt;= #{endTime}
+        and a.temperature_&lt;= 37.3
+        and b.company_id = #{companyId}
+        and a.del_flag = 0
+    </select>
 </mapper>

+ 8 - 0
common/src/main/resources/mapper/base/PersonInfo.xml

@@ -288,4 +288,12 @@
         left join base_company_info b on a.company_id = b.id_
         where a.id_=#{0}  limit 1
     </select>
+
+    <select id="countByCompanyList" resultType="Long">
+        select count(*) from base_person_info where del_flag = 0 and
+        company_id in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+            #{item.id}
+        </foreach>
+    </select>
 </mapper>

+ 122 - 0
common/src/main/resources/mapper/base/TotalCheckCompany.xml

@@ -0,0 +1,122 @@
+<?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.jpsoft.smart.modules.base.dao.TotalCheckCompanyDAO">
+    <sql id="Base_Column_List">
+    id_,
+    company_id,
+    normal_day,
+    total_check_num,
+    total_abnormal_num,
+    del_flag,
+    create_by,
+    create_time,
+    update_by,
+    update_time
+</sql>
+    <resultMap id="TotalCheckCompanyMap" type="com.jpsoft.smart.modules.base.entity.TotalCheckCompany">
+        <id property="id" column="id_"/>
+        <result property="companyId" column="company_id"/>
+        <result property="normalDay" column="normal_day" />
+        <result property="totalCheckNum" column="total_check_num" />
+        <result property="totalAbnormalNum" column="total_abnormal_num"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <select id="get" parameterType="long" resultMap="TotalCheckCompanyMap">
+            select * from base_total_check_company where id_=#{0} and del_flag = false
+    </select>
+
+    <insert id="insert" parameterType="com.jpsoft.smart.modules.base.entity.TotalCheckCompany">
+        insert into base_total_check_company
+        (company_id,normal_day,total_check_num,total_abnormal_num,del_flag,
+        create_by,create_time,update_by,update_time)
+        values
+        (
+        #{companyId,jdbcType=VARCHAR}
+        ,#{normalDay,jdbcType=NUMERIC}
+        ,#{totalCheckNum,jdbcType=NUMERIC}
+        ,#{totalAbnormalNum,jdbcType=NUMERIC}
+        ,#{delFlag,jdbcType= NUMERIC }
+        ,#{createBy,jdbcType=VARCHAR}
+        ,#{createTime,jdbcType= TIMESTAMP }
+        ,#{updateBy,jdbcType=VARCHAR}
+        ,#{updateTime,jdbcType= TIMESTAMP }
+        )
+    </insert>
+    <update id="update" parameterType = "com.jpsoft.smart.modules.base.entity.TotalCheckCompany">
+        update base_total_check_company
+        <set>
+            <if test="companyId!=null">
+                company_id=#{companyId,jdbcType=VARCHAR},
+            </if>
+            <if test="normalDay!=null">
+                normal_day=#{normalDay,jdbcType=NUMERIC},
+            </if>
+            <if test="totalCheckNum!=null">
+                total_check_num=#{totalCheckNum,jdbcType=NUMERIC},
+            </if>
+
+            <if test="totalAbnormalNum!=null">
+                total_abnormal_num=#{totalAbnormalNum,jdbcType=NUMERIC},
+            </if>
+            <if test="delFlag!=null">
+                del_flag=#{delFlag,jdbcType= NUMERIC },
+            </if>
+            <if test="createBy!=null">
+                create_by=#{createBy,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime!=null">
+                create_time=#{createTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="updateBy!=null">
+                update_by=#{updateBy,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime!=null">
+                update_time=#{updateTime,jdbcType= TIMESTAMP },
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+    <select id="findMinNormalDay" resultType="Integer">
+        select min(normal_day) from base_total_check_company where del_flag = false
+    </select>
+
+    <select id="findMinNormalDayByCompanyList" resultType="Integer">
+        select min(normal_day) from base_total_check_company where company_id in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">   #{item.id}
+        </foreach>
+        and del_flag = 0
+
+    </select>
+
+    <select id="getTotalAbnormalNum" resultType="Integer">
+        select sum(total_abnormal_num) from  base_total_check_company where del_flag = 0
+    </select>
+
+    <select id="getTotalAbnormalNumByCompanyList" resultType="Integer">
+        select sum(total_abnormal_num) from  base_total_check_company where del_flag = 0
+        and company_id in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+            #{item.id}
+        </foreach>
+    </select>
+
+    <select id="findByCompanyId" parameterType="String" resultMap="TotalCheckCompanyMap">
+        select * from base_total_check_company where company_id = #{id} and del_flag = 0
+    </select>
+
+<!--auto generated by MybatisCodeHelper on 2020-03-28-->
+    <select id="getTotalCheckNum" resultType="Integer">
+        select sum(total_check_num) from base_total_check_company where del_flag =0
+        <if test="list!=null">
+            and
+            company_id in
+            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                #{item.id}
+            </foreach>
+        </if>
+    </select>
+</mapper>

+ 203 - 0
web/src/main/java/com/jpsoft/smart/modules/base/controller/HomePageController.java

@@ -0,0 +1,203 @@
+package com.jpsoft.smart.modules.base.controller;
+
+import cn.hutool.core.date.DateUtil;
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import com.jpsoft.smart.modules.base.entity.EmployeeInfo;
+import com.jpsoft.smart.modules.base.service.*;
+import com.jpsoft.smart.modules.common.dto.MessageResult;
+import com.jpsoft.smart.modules.sys.entity.User;
+import com.jpsoft.smart.modules.sys.service.UserService;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.*;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-3-27 13:40
+ */
+@RestController
+@RequestMapping("/home")
+@Slf4j
+public class HomePageController {
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private PersonInfoService personInfoService;
+
+    @Autowired
+    private PersonDeviceFilterLogService personDeviceFilterLogService;
+
+    @Autowired
+    private CompanyInfoService companyInfoService;
+
+    @Autowired
+    private CheckNumCompanyService checkNumCompanyService;
+
+    @Autowired
+    private TotalCheckCompanyService totalCheckCompanyService;
+
+
+    @ApiOperation(value = "获取首页第一行数据")
+    @GetMapping("getFirstData")
+    @ResponseBody
+    public MessageResult<Map> getFirstData(HttpServletRequest request) {
+        MessageResult<Map> msgResult = new MessageResult<>();
+        HashMap<String, Object> map = new HashMap<>();
+        try {
+
+
+            String subject = (String) request.getAttribute("subject");
+            User user = userService.get(subject);
+            List<CompanyInfo> list = new ArrayList<>();
+
+            Integer companyNum = 0;
+            Integer personNum = 0;
+            Integer normalDays = 0;
+            Integer dayCheckNum = 0;
+            Integer totalCheckNum = 0;
+            Integer dayAbnormalNum = 0;
+            Integer totalAbnormalNum = 0;
+            if (userService.hasRole(subject, "SYSADMIN")) {
+                companyNum = companyInfoService.list().size();
+                personNum = personInfoService.list().size();
+                Integer normalDaysNum =  totalCheckCompanyService.findMinNormalDay();
+                normalDays = normalDaysNum==null?0:normalDaysNum;
+                Integer num = checkNumCompanyService.getDayCheckNum(DateUtil.format(new Date(), "yyyy-MM-dd"));
+                Integer totalNum = totalCheckCompanyService.getTotalCheckNum(null);
+                dayCheckNum = num == null ? 0 : num;
+                totalCheckNum = totalNum == null ?dayCheckNum : totalNum+dayCheckNum;
+                dayAbnormalNum = personDeviceFilterLogService.getDayAbnormalNum(DateUtil.beginOfDay(new Date()), new Date());
+                totalAbnormalNum = totalCheckCompanyService.getTotalAbnormalNum() + dayAbnormalNum;
+            } else  {
+                CompanyInfo companyInfo = companyInfoService.get(user.getCompanyId());
+                list = companyInfoService.findByCompanyCode(companyInfo.getCode() + "%", null);
+                companyNum = list.size();
+                personNum = Math.toIntExact(personInfoService.countByCompanyList(list));
+
+                Integer normalDaysNum = totalCheckCompanyService.findMinNormalDayByCompanyList(list);
+                normalDays = normalDaysNum==null?0:normalDaysNum;
+                Integer num = checkNumCompanyService.getDayCheckNumByCompanyList(DateUtil.format(new Date(), "yyyy-MM-dd"), list);
+                Integer totalNum = totalCheckCompanyService.getTotalCheckNum(list);
+                dayCheckNum = num == null ? 0 : num;
+                totalCheckNum = totalNum == null ?dayCheckNum : totalNum+dayCheckNum;
+                Integer num2 = personDeviceFilterLogService.getDayAbnormalNumByCompanyList(DateUtil.beginOfDay(new Date()), new Date(), list);
+                Integer totalNum2 = totalCheckCompanyService.getTotalAbnormalNumByCompanyList(list);
+                dayAbnormalNum = num2 == null ? 0 : num2;
+                totalAbnormalNum = totalNum2 == null ? 0 : totalNum2 + dayAbnormalNum;
+
+
+            }
+
+
+            map.put("companyNum", companyNum);
+            map.put("personNum", personNum);
+            map.put("normalDays", normalDays);
+            map.put("dayCheckNum", dayCheckNum);
+            map.put("totalCheckNum", totalCheckNum);
+            map.put("dayAbnormalNum", dayAbnormalNum);
+            map.put("totalAbnormalNum", totalAbnormalNum);
+
+
+            msgResult.setData(map);
+            msgResult.setResult(true);
+            msgResult.setMessage("获取成功");
+
+
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            msgResult.setData(map);
+            msgResult.setResult(false);
+            msgResult.setMessage(e.getMessage());
+
+        }
+        return msgResult;
+    }
+
+    @ApiOperation(value = "获取首页第一个表格数据")
+    @GetMapping("getFirstExcelData")
+    @ResponseBody
+    public MessageResult<Map> getFirstExcelData(HttpServletRequest request) {
+        MessageResult<Map> msgResult = new MessageResult<>();
+        HashMap<String, Object> map = new HashMap<>();
+        try {
+
+
+            String subject = (String) request.getAttribute("subject");
+            User user = userService.get(subject);
+            List<CompanyInfo> list = new ArrayList<>();
+            List<String> dayList = new ArrayList<>();
+            List<Integer> normalNumList = new ArrayList<>();
+            List<Integer> abnormalNumList = new ArrayList<>();
+
+
+
+            if (userService.hasRole(subject, "SYSADMIN")) {
+                for (int i=30;i>0;i--){
+                    Calendar   calendar   =   new GregorianCalendar();
+                    calendar.setTime(new Date());
+                    calendar.add(Calendar.DATE,-i);
+                    Date date  =calendar.getTime();
+                    String day = DateUtil.format(date, "yyyy-MM-dd");
+                    dayList.add(day);
+                    Integer normalNum = checkNumCompanyService.getDayNormalNumByCompanyList(day,null);
+                    Integer abnormalNum = checkNumCompanyService.getDayAbnormalNumByCompanyList(day,null);
+                    normalNumList.add(normalNum==null?0:normalNum);
+                    abnormalNumList.add(abnormalNum==null?0:abnormalNum);
+
+
+                }
+
+
+            } else  {
+                CompanyInfo companyInfo = companyInfoService.get(user.getCompanyId());
+                list = companyInfoService.findByCompanyCode(companyInfo.getCode() + "%", null);
+                for (int i=30;i>0;i--) {
+                    Calendar calendar = new GregorianCalendar();
+                    calendar.setTime(new Date());
+                    calendar.add(Calendar.DATE, -i);
+                    Date date = calendar.getTime();
+                    String day = DateUtil.format(date, "yyyy-MM-dd");
+                    dayList.add(day);
+                    Integer normalNum = checkNumCompanyService.getDayNormalNumByCompanyList(day, list);
+                    Integer abnormalNum = checkNumCompanyService.getDayAbnormalNumByCompanyList(day, list);
+                    normalNumList.add(normalNum == null ? 0 : normalNum);
+                    abnormalNumList.add(abnormalNum == null ? 0 : abnormalNum);
+                }
+
+            }
+
+
+            map.put("day", dayList);
+            map.put("normalNum", normalNumList);
+            map.put("abnormalNum", abnormalNumList);
+
+
+
+            msgResult.setData(map);
+            msgResult.setResult(true);
+            msgResult.setMessage("获取成功");
+
+
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            msgResult.setData(map);
+            msgResult.setResult(false);
+            msgResult.setMessage(e.getMessage());
+
+        }
+        return msgResult;
+    }
+
+}

+ 112 - 120
web/src/main/java/com/jpsoft/smart/modules/wechat/controller/WxController.java

@@ -2,9 +2,11 @@ package com.jpsoft.smart.modules.wechat.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.jpsoft.smart.config.WxConfig;
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
 import com.jpsoft.smart.modules.base.entity.InformationInfo;
 import com.jpsoft.smart.modules.base.entity.OwnerInfo;
 import com.jpsoft.smart.modules.base.entity.WarningPusher;
+import com.jpsoft.smart.modules.base.service.CompanyInfoService;
 import com.jpsoft.smart.modules.base.service.InformationInfoService;
 import com.jpsoft.smart.modules.base.service.OwnerInfoService;
 import com.jpsoft.smart.modules.base.service.WarningPusherService;
@@ -74,7 +76,7 @@ public class WxController {
     private ReplyMessageService replyMessageService;
 
     @Autowired
-    private ValueOperations<String,Object> valueOperations;
+    private ValueOperations<String, Object> valueOperations;
 
     @Autowired
     private RedisServiceImpl redisService;
@@ -91,6 +93,9 @@ public class WxController {
     @Autowired
     private InformationInfoService informationInfoService;
 
+    @Autowired
+    private CompanyInfoService companyInfoService;
+
 
     @ApiOperation(value = "获取微信配置")
     @GetMapping(value = "/getConfig")
@@ -177,15 +182,15 @@ public class WxController {
 
         try {
 
-                HashMap<String, Object> wxMap = new HashMap<>();
+            HashMap<String, Object> wxMap = new HashMap<>();
 
-                wxMap.put("appId", wxPayProperties.getAppId());
+            wxMap.put("appId", wxPayProperties.getAppId());
 
-                HashMap<String, Object> dataMap = new HashMap<String, Object>();
+            HashMap<String, Object> dataMap = new HashMap<String, Object>();
 
-                dataMap.put("wxConfig", wxMap);
+            dataMap.put("wxConfig", wxMap);
 
-                data = dataMap;
+            data = dataMap;
 
         } catch (Exception ex) {
             code = 500;
@@ -216,7 +221,7 @@ public class WxController {
             } else {
                 OwnerInfo ownerInfo = ownerInfoService.get(accessControl.getOwnerId());
                 AccessControlVo accessControlVo = new AccessControlVo();
-                BeanUtils.copyProperties(accessControl,accessControlVo);
+                BeanUtils.copyProperties(accessControl, accessControlVo);
                 accessControlVo.setName(ownerInfo.getName());
                 accessControlVo.setPhoneNum(ownerInfo.getTel());
 
@@ -236,7 +241,7 @@ public class WxController {
 
         }
 
-        return new MessageResult(result, message, data,code);
+        return new MessageResult(result, message, data, code);
     }
 
 
@@ -371,7 +376,7 @@ public class WxController {
 
 
             List<Map> ownerInfoList = ownerInfoService.findByTel(bindPhoneVo.getPhoneNum());
-            if (ownerInfoList.size()<=0){
+            if (ownerInfoList.size() <= 0) {
                 throw new Exception("人员信息未录入,请联系物业公司");
             }
             AccessControl accessControl = accessControlService.findByOwnerId(ownerInfoList.get(0).get("id").toString());
@@ -536,7 +541,7 @@ public class WxController {
         }
 
         JSONObject resultJSON = apiUtil.httpRequest("https://api.parkline.cc/api/facecgi", apiToken, "300", "215301", "01", bindFaceVo.getPhoneNum(), bindFaceVo.getFiledata());
-        System.out.println("返回码:"+resultJSON.getInteger("code")+"-------------");
+        System.out.println("返回码:" + resultJSON.getInteger("code") + "-------------");
         if (!resultJSON.getString("code").equals("100101")) {
             code = resultJSON.getInteger("code");
             if (code == 100100) {
@@ -576,7 +581,7 @@ public class WxController {
         if (accessControl == null) {
             return new MessageResult(false, "此微信还未绑定住户", "", 400);
         }
-        List<InformationInfo> informationInfoList = informationInfoService.findByOwnerIdAndType(accessControl.getOwnerId(),repairsVo.getType());
+        List<InformationInfo> informationInfoList = informationInfoService.findByOwnerIdAndType(accessControl.getOwnerId(), repairsVo.getType());
 
         data = informationInfoList;
 
@@ -594,35 +599,35 @@ public class WxController {
         Object data = "";
         boolean result = true;
 
-        try{
+        try {
 
 
-        if (StringUtils.isBlank(repairsVo.getOpenId()) || StringUtils.isBlank(repairsVo.getContent())) {
-            throw new Exception("参数错误");
-        }
-        if (repairsVo.getType() == null) {
-            throw new Exception("类型不能为空");
-        }
+            if (StringUtils.isBlank(repairsVo.getOpenId()) || StringUtils.isBlank(repairsVo.getContent())) {
+                throw new Exception("参数错误");
+            }
+            if (repairsVo.getType() == null) {
+                throw new Exception("类型不能为空");
+            }
 
-        AccessControl accessControl = accessControlService.findByOpenId(repairsVo.getOpenId());
-        if (accessControl == null) {
-            throw new Exception("此微信还未绑定住户");
-        }
-        InformationInfo informationInfo = new InformationInfo();
-        informationInfo.setId(UUID.randomUUID().toString());
-        informationInfo.setDelFlag(false);
-        informationInfo.setCreateBy(repairsVo.getOpenId());
-        informationInfo.setCreateTime(new Date());
-        informationInfo.setStatus("0");
-        informationInfo.setContent(repairsVo.getContent());
-        informationInfo.setOwnerId(accessControl.getOwnerId());
-        informationInfo.setType(repairsVo.getType());
-
-        informationInfoService.insert(informationInfo);
-
-        }catch (Exception e){
+            AccessControl accessControl = accessControlService.findByOpenId(repairsVo.getOpenId());
+            if (accessControl == null) {
+                throw new Exception("此微信还未绑定住户");
+            }
+            InformationInfo informationInfo = new InformationInfo();
+            informationInfo.setId(UUID.randomUUID().toString());
+            informationInfo.setDelFlag(false);
+            informationInfo.setCreateBy(repairsVo.getOpenId());
+            informationInfo.setCreateTime(new Date());
+            informationInfo.setStatus("0");
+            informationInfo.setContent(repairsVo.getContent());
+            informationInfo.setOwnerId(accessControl.getOwnerId());
+            informationInfo.setType(repairsVo.getType());
+
+            informationInfoService.insert(informationInfo);
+
+        } catch (Exception e) {
             e.printStackTrace();
-            log.error(e.getMessage(),e);
+            log.error(e.getMessage(), e);
             message = e.getMessage();
             result = false;
             code = 400;
@@ -642,22 +647,21 @@ public class WxController {
         Object data = "";
         boolean result = true;
 
-        try{
-
+        try {
 
 
-        if (id == null) {
-            throw new Exception("id为空");
-        }
+            if (id == null) {
+                throw new Exception("id为空");
+            }
 
 
-        InformationInfo informationInfo = informationInfoService.get(id);
-        data = informationInfo;
+            InformationInfo informationInfo = informationInfoService.get(id);
+            data = informationInfo;
 
 
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
-            log.error(e.getMessage(),e);
+            log.error(e.getMessage(), e);
             message = e.getMessage();
             code = 400;
             result = false;
@@ -665,22 +669,21 @@ public class WxController {
         return new MessageResult(result, message, data, code);
     }
 
-    @ApiOperation(value="验证服务器地址的有效性")
+    @ApiOperation(value = "验证服务器地址的有效性")
     @GetMapping("/get")
     @ResponseBody
     public String index(@RequestParam(defaultValue = "") String signature,
                         @RequestParam(defaultValue = "") String timestamp,
                         @RequestParam(defaultValue = "") String nonce,
-                        @RequestParam(defaultValue = "") String echostr){
+                        @RequestParam(defaultValue = "") String echostr) {
         log.warn("signature=" + signature);
         log.warn("timestamp=" + timestamp);
         log.warn("nonce=" + nonce);
         log.warn("echostr=" + echostr);
 
-        if (WeixinUtil.checkSignature(wxConfig.getToken(),signature,timestamp,nonce)){
+        if (WeixinUtil.checkSignature(wxConfig.getToken(), signature, timestamp, nonce)) {
             return echostr;
-        }
-        else{
+        } else {
             return "index";
         }
     }
@@ -690,24 +693,24 @@ public class WxController {
     @ApiOperation(value = "创建二维码")
     @PostMapping("/qrcode/create")
     @ApiImplicitParams({
-            @ApiImplicitParam(name="expire_seconds", paramType="query", required=true, value="该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。"),
-            @ApiImplicitParam(name="action_name", paramType="query", required=true, value="二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值"),
-            @ApiImplicitParam(name="scene_id", paramType="query", value="场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)"),
-            @ApiImplicitParam(name="scene_str", paramType="query", value="场景值ID(字符串形式的ID),字符串类型,长度限制为1到64")
+            @ApiImplicitParam(name = "expire_seconds", paramType = "query", required = true, value = "该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。"),
+            @ApiImplicitParam(name = "action_name", paramType = "query", required = true, value = "二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值"),
+            @ApiImplicitParam(name = "scene_id", paramType = "query", value = "场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)"),
+            @ApiImplicitParam(name = "scene_str", paramType = "query", value = "场景值ID(字符串形式的ID),字符串类型,长度限制为1到64")
     })
-    public cn.hutool.json.JSONObject createQrcode(@RequestParam(name = "expire_seconds",defaultValue = "300") long expireSeconds,
-                                                  @RequestParam(name = "action_name",defaultValue = "QR_STR_SCENE") String actionName,
-                                                  @RequestParam(name = "scene_id",required = false) String sceneId,
-                                                  @RequestParam(name = "scene_str",required = false) String sceneStr){
+    public cn.hutool.json.JSONObject createQrcode(@RequestParam(name = "expire_seconds", defaultValue = "300") long expireSeconds,
+                                                  @RequestParam(name = "action_name", defaultValue = "QR_STR_SCENE") String actionName,
+                                                  @RequestParam(name = "scene_id", required = false) String sceneId,
+                                                  @RequestParam(name = "scene_str", required = false) String sceneStr) {
         cn.hutool.json.JSONObject resultObj = new cn.hutool.json.JSONObject();
 
         try {
             StringBuilder urlBuilder = new StringBuilder();
-            AccessToken accessToken = WeixinUtil.getAccessToken(wxConfig.getAppId(),wxConfig.getAppSecret());
+            AccessToken accessToken = WeixinUtil.getAccessToken(wxConfig.getAppId(), wxConfig.getAppSecret());
 
             urlBuilder.append(wxConfig.getCreateQrCodeUrl())
                     .append("?access_token=")
-                    .append(URLEncoder.encode(accessToken.getToken(),"UTF-8"));
+                    .append(URLEncoder.encode(accessToken.getToken(), "UTF-8"));
 
             cn.hutool.json.JSONObject jsonObject = new cn.hutool.json.JSONObject();
             jsonObject.put("expire_seconds", expireSeconds);
@@ -720,24 +723,23 @@ public class WxController {
 
             keyBuilder.append(accessToken);
 
-            if(StringUtils.isNotEmpty(sceneId)) {
+            if (StringUtils.isNotEmpty(sceneId)) {
                 scene.put("scene_id", sceneId);
                 keyBuilder.append(sceneId);
             }
 
-            if(StringUtils.isNotEmpty(sceneStr)) {
+            if (StringUtils.isNotEmpty(sceneStr)) {
                 scene.put("scene_str", sceneStr);
                 keyBuilder.append(sceneStr);
             }
 
-            String qrcodeUrl = (String)valueOperations.get("QRCODE_" + keyBuilder.toString());
+            String qrcodeUrl = (String) valueOperations.get("QRCODE_" + keyBuilder.toString());
 
-            if (StringUtils.isNotEmpty(qrcodeUrl)){
-                resultObj.put("data",qrcodeUrl);
+            if (StringUtils.isNotEmpty(qrcodeUrl)) {
+                resultObj.put("data", qrcodeUrl);
                 resultObj.put("result", true);
-            }
-            else{
-                actionInfo.put("scene",scene);
+            } else {
+                actionInfo.put("scene", scene);
 
                 jsonObject.put("action_info", actionInfo);
 
@@ -771,18 +773,16 @@ public class WxController {
                         resultObj.put("data", qrcodeUrl);
                         resultObj.put("result", true);
                     }
-                }
-                else{
+                } else {
                     resultObj.put("result", false);
                     resultObj.put("message", "weixin服务器未正常返回!");
                 }
             }
-        }
-        catch (Exception ex){
-            log.error(ex.getMessage(),ex);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
 
-            resultObj.put("message",ex.getMessage());
-            resultObj.put("result",false);
+            resultObj.put("message", ex.getMessage());
+            resultObj.put("result", false);
         }
 
         return resultObj;
@@ -790,19 +790,18 @@ public class WxController {
 
     @ApiOperation(value = "处理消息事件")
     @PostMapping("/get")
-    public void processEvent(HttpServletRequest request, HttpServletResponse response){
-        try{
+    public void processEvent(HttpServletRequest request, HttpServletResponse response) {
+        try {
             log.warn("收到post请求");
 
             cn.hutool.json.JSONObject requestJson = null;
 
-            if("json".equals(wxConfig.getContentType())){
+            if ("json".equals(wxConfig.getContentType())) {
                 String jsonStr = new BufferedReader(new InputStreamReader(request.getInputStream()))
                         .lines().parallel().collect(Collectors.joining(System.lineSeparator()));
 
                 requestJson = new cn.hutool.json.JSONObject(jsonStr);
-            }
-            else {
+            } else {
                 requestJson = WeixinUtil.xmlToJson(request.getInputStream());
             }
 
@@ -819,10 +818,10 @@ public class WxController {
             正常扫码是:"EventKey":"7000,2142006";
             当未关注时,扫码是"EventKey":"qrscene_7000,2142006"
             */
-            if(StringUtils.isNotEmpty(eventKey) && eventKey.indexOf("_")!=-1){
+            if (StringUtils.isNotEmpty(eventKey) && eventKey.indexOf("_") != -1) {
                 String[] arr = eventKey.split("_");
 
-                if(arr.length>0){
+                if (arr.length > 0) {
                     eventKey = arr[1];
                 }
             }
@@ -835,7 +834,7 @@ public class WxController {
 
             boolean processed = false;
 
-            if (StringUtils.isNotEmpty(eventKey) && eventKey.indexOf(",")!=-1) {
+            if (StringUtils.isNotEmpty(eventKey) && eventKey.indexOf(",") != -1) {
                 String[] keys = eventKey.split(",");
                 String eventCode = keys[0];
                 String id = keys[1];
@@ -844,51 +843,46 @@ public class WxController {
                 ReplyMessage replyMessage = replyMessageService.findByEvent(eventCode);
 
                 if (replyMessage != null) {
+                    if (eventCode == "5000") {
+                        WarningPusher warningPusher = warningPusherService.get(id);
+                        if (warningPusher == null) {
+                            WeixinUtil.replyTextMessage(response, wechatId, openId, "绑定信息不存在,请联系管理员");
+                        } else if (StringUtils.isNotBlank(warningPusher.getOpenId())) {
+                            WeixinUtil.replyTextMessage(response, wechatId, openId, "此二维码已被绑定,请联系管理员");
+                        } else {
+                            warningPusher.setOpenId(openId);
+                            warningPusher.setUpdateTime(new Date());
+                            warningPusherService.update(warningPusher);
+                            WeixinUtil.replyTextMessage(response, wechatId, openId, replyMessage.getMessage());
+                        }
 
-                    WarningPusher warningPusher = warningPusherService.get(id);
-                    if (warningPusher == null){
-                        WeixinUtil.replyTextMessage(response, wechatId, openId,"绑定信息不存在,请联系管理员");
                     }
-                    else if (StringUtils.isNotBlank(warningPusher.getOpenId())){
-                        WeixinUtil.replyTextMessage(response, wechatId, openId,"此二维码已被绑定,请联系管理员");
-                    }else {
-                        warningPusher.setOpenId(openId);
-                        warningPusher.setUpdateTime(new Date());
-                        warningPusherService.update(warningPusher);
-                        WeixinUtil.replyTextMessage(response, wechatId, openId,replyMessage.getMessage());
+                    if ("4000".equals(eventCode)){
+                        CompanyInfo companyInfo = companyInfoService.get(id);
+                        if (companyInfo == null){
+                            WeixinUtil.replyTextMessage(response,wechatId,openId,"您的公司暂时不在我们的管辖内,请联系管理员!");
+                        }else {
+                            WeixinUtil.replyArticlesMessage(response,wechatId,openId,companyInfo.getName(),replyMessage.getMessage(),companyInfo.getLogo(),"http://wisdomhousewechat.sudaonline.net/prevention-xxd/upyes.html");
+                        }
                     }
 
 
-
                     processed = true;
                 }
-            }
-            else if ("文章".equals(eventKey)){
+            } else if ("文章".equals(eventKey)) {
 
-                WeixinUtil.replyArticlesMessage(response,wechatId,openId,"复工复学疫情防控监管平台","即日起接受预定,货源紧张,先订先得。\n预定电话:13972127999 市企业联合会蔡秘书长;\n19971390396 刘经理;15607217777 付经理。","http://wisdomhousewechat.sudaonline.net/1111.jpg","https://mp.weixin.qq.com/s/nXYp0m8OOYdWBRu-80SnmQ");
-            }
-            else {
-                WeixinUtil.replyTextMessage(response, wechatId, openId,"您好,欢迎关注荆鹏云管家。\n" +
+                WeixinUtil.replyArticlesMessage(response, wechatId, openId, "复工复学疫情防控监管平台", "即日起接受预定,货源紧张,先订先得。\n预定电话:13972127999 市企业联合会蔡秘书长;\n19971390396 刘经理;15607217777 付经理。", "http://wisdomhousewechat.sudaonline.net/1111.jpg", "https://mp.weixin.qq.com/s/nXYp0m8OOYdWBRu-80SnmQ");
+            } else {
+                WeixinUtil.replyTextMessage(response, wechatId, openId, "您好,欢迎关注荆鹏云管家。\n" +
                         "\n" +
                         "疫情监管产品介绍:<a href=\"https://mp.weixin.qq.com/s/nXYp0m8OOYdWBRu-80SnmQ\">点击查看详情</a>");
             }
-            //开发者在5秒内未回复任何内容
-//                for (EventCallback callback : callbackList) {
-//                    if (StringUtils.isNotEmpty(eventKey) && eventKey.startsWith(callback.getCode())) {
-//                        callback.process(wechatId, openId, eventKey);
-//
-//                        WeixinUtil.replyTextMessage(response, wechatId, openId, callback.getMessage());
-//
-//                        processed = true;
-//                        break;
-//                    }
-//                }
-//            }
-
-            if(!processed) {
+
+
+            if (!processed) {
                 String responseText = "success";
 
-                if("subscribe".equals(event)){
+                if ("subscribe".equals(event)) {
                    /* ReplyMessage replyMessage = replyMessageService.findByEvent(wechatId,event);
 
                     if(replyMessage!=null) {
@@ -898,14 +892,12 @@ public class WxController {
                         log.warn(openId + ",事件:" + event + "未设置自动回复!");
                         response.getWriter().print(responseText);
                     }*/
-                }
-                else {
+                } else {
                     response.getWriter().print(responseText);
                 }
             }
-        }
-        catch (Exception ex){
-            log.error(ex.getMessage(),ex);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
 
             try {
                 response.getWriter().print("fail");

+ 95 - 0
web/src/main/java/com/jpsoft/smart/schduled/CheckPersonTask.java

@@ -0,0 +1,95 @@
+package com.jpsoft.smart.schduled;
+
+import cn.hutool.core.date.DateUtil;
+import com.jpsoft.smart.modules.base.entity.CheckNumCompany;
+import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import com.jpsoft.smart.modules.base.entity.TotalCheckCompany;
+import com.jpsoft.smart.modules.base.service.CheckNumCompanyService;
+import com.jpsoft.smart.modules.base.service.CompanyInfoService;
+import com.jpsoft.smart.modules.base.service.PersonDeviceFilterLogService;
+import com.jpsoft.smart.modules.base.service.TotalCheckCompanyService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-3-28 10:28
+ */
+@Component
+@Slf4j
+@Transactional
+public class CheckPersonTask {
+
+    @Autowired
+    private CheckNumCompanyService checkNumCompanyService;
+
+    @Autowired
+    private TotalCheckCompanyService totalCheckCompanyService;
+
+    @Autowired
+    private PersonDeviceFilterLogService personDeviceFilterLogService;
+
+    @Autowired
+    private CompanyInfoService companyInfoService;
+
+    @Scheduled(cron = "0 59 23 ? * *")
+    public  void run() {
+
+        log.warn("公司每日过人记录定时任务开始");
+        Date date = new Date();
+        Date startTime = DateUtil.beginOfDay(date);
+        Date endTime = DateUtil.endOfDay(date);
+        String recordTime = DateUtil.format(new Date(),"yyyy-MM-dd");
+        List<CheckNumCompany> checkNumCompanyList = checkNumCompanyService.findByRecordTime(recordTime);
+        if (checkNumCompanyList.size()>0){
+            for (CheckNumCompany checkNumCompany: checkNumCompanyList){
+                CompanyInfo companyInfo = companyInfoService.get(checkNumCompany.getCompanyId());
+                List<CompanyInfo> list = new ArrayList<>();
+                list.add(companyInfo);
+                Integer normal = personDeviceFilterLogService.getDayNormalNumByCompanyId(startTime,endTime,checkNumCompany.getCompanyId());
+                Integer abNormal = personDeviceFilterLogService.getDayAbnormalNumByCompanyList(startTime,endTime,list);
+                checkNumCompany.setNormalNum(normal==null?0:normal.longValue());
+                checkNumCompany.setAbnormalNum(abNormal == null?0:abNormal.longValue());
+                checkNumCompanyService.update(checkNumCompany);
+
+                TotalCheckCompany totalCheckCompany = totalCheckCompanyService.findByCompanyId(companyInfo.getId());
+                if (totalCheckCompany == null){
+                    TotalCheckCompany totalCheckCompany1 = new TotalCheckCompany();
+                    totalCheckCompany1.setCompanyId(companyInfo.getId());
+                    if (checkNumCompany.getAbnormalNum()>0){
+                        totalCheckCompany1.setNormalDay(0L);
+                    }else {
+                        totalCheckCompany1.setNormalDay(1L);
+                    }
+                    totalCheckCompany1.setTotalCheckNum(checkNumCompany.getCheckNum());
+                    totalCheckCompany1.setTotalAbnormalNum(checkNumCompany.getAbnormalNum());
+                    totalCheckCompany1.setDelFlag(false);
+                    totalCheckCompany1.setCreateTime(new Date());
+                    totalCheckCompanyService.insert(totalCheckCompany1);
+                }else {
+                    if (checkNumCompany.getAbnormalNum()>0){
+                        totalCheckCompany.setNormalDay(0L);
+                    }else {
+                        Long normalDay = totalCheckCompany.getNormalDay();
+                        totalCheckCompany.setNormalDay(normalDay+1L);
+                    }
+                    Long totalCheckNum = totalCheckCompany.getTotalCheckNum();
+                    totalCheckCompany.setTotalCheckNum(totalCheckNum+checkNumCompany.getCheckNum());
+                    Long totalAbnormalNum = totalCheckCompany.getTotalAbnormalNum();
+                    totalCheckCompany.setTotalAbnormalNum(totalAbnormalNum+checkNumCompany.getAbnormalNum());
+                    totalCheckCompany.setUpdateTime(date);
+                    totalCheckCompanyService.update(totalCheckCompany);
+                }
+            }
+        }
+
+
+    }
+}

+ 55 - 0
web/src/test/java/com/jpsoft/smart/CheckNumCompanyTest.java

@@ -0,0 +1,55 @@
+package com.jpsoft.smart;
+
+import com.jpsoft.smart.modules.base.dao.CheckNumCompanyDAO;
+import com.jpsoft.smart.modules.base.dao.TotalCheckCompanyDAO;
+import com.jpsoft.smart.modules.base.entity.CheckNumCompany;
+import com.jpsoft.smart.modules.base.entity.TotalCheckCompany;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-3-27 11:25
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class CheckNumCompanyTest {
+
+    @Autowired
+    private CheckNumCompanyDAO checkNumCompanyDAO;
+
+    @Autowired
+    private TotalCheckCompanyDAO totalCheckCompanyDAO;
+
+    @Test
+    public void testGet(){
+       // CheckNumCompany checkNumCompany = checkNumCompanyDAO.get(1L);
+        List<CheckNumCompany> list = checkNumCompanyDAO.findByRecordTime("2020-03-28");
+        System.out.println(list);
+    }
+
+    @Test
+    public void testList(){
+        List<CheckNumCompany> list = checkNumCompanyDAO.list();
+        System.out.println(list);
+    }
+
+    @Test
+    public void testGetDayCheckNum(){
+
+        Integer  i = checkNumCompanyDAO.getDayCheckNum("2020-03-26");
+        System.out.println(i==null?0:i);
+    }
+
+    @Test
+    public void testFindMinNormal(){
+        Integer i = totalCheckCompanyDAO.findMinNormalDay();
+        System.out.println(i);
+    }
+
+}