chejianzheng 1 сар өмнө
parent
commit
73949a03c2

+ 2 - 1
portal-service-common/src/main/java/com/hfln/portal/common/dto/data/stat/ScreenStatsDTO.java

@@ -26,7 +26,8 @@ public class ScreenStatsDTO {
     @Schema(description = "当天检测到人数")
     private Integer detectedCount;
 
-    // 今日活跃度
+    @Schema(description = "今日活跃度")
+    private double activeRate;
 
     @Schema(description = "年龄统计信息")
     private List<AgeInfo> ageList;

+ 8 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebStatsGatewayImpl.java

@@ -56,6 +56,9 @@ public class WebStatsGatewayImpl implements WebStatsGateway {
     @Autowired
     private TblTenantService tblTenantService;
 
+    @Autowired
+    private PersonInOutService personInOutService;
+
 
     @Override
     public PageRecord<EventListDTO> fallQuery(EventListParams params) {
@@ -213,6 +216,11 @@ public class WebStatsGatewayImpl implements WebStatsGateway {
                 .eq(DevInfo::getOnline, DevInfo.Constants.OnlineStatus.ONLINE)
                 .count()));
 
+        if (res.getOnlineCount() != 0) {
+
+            Long activeCount = personInOutService.countActive(params.getTenantId());
+            res.setActiveRate((double) activeCount / res.getOnlineCount());
+        }
 
 
         res.setFallingCount(Math.toIntExact(eventListService.lambdaQuery()

+ 20 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mapper/PersonInOutMapper.java

@@ -0,0 +1,20 @@
+package com.hfln.portal.infrastructure.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.hfln.portal.infrastructure.po.PersonInOutInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDate;
+
+/**
+ *  Mapper 接口
+ */
+@Mapper
+public interface PersonInOutMapper extends BaseMapper<PersonInOutInfo> {
+
+    @Select("" +
+            "SELECT COUNT(*) FROM " +
+            "(SELECT dev_id FROM tbl_person_in_out WHERE tenant_id = #{tenantId} AND create_time >= #{startTime} GROUP BY dev_id HAVING COUNT(*) > 3)")
+    Long countActive(Long tenantId, LocalDate startTime);
+}

+ 18 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mqtt/MqttSubHandle.java

@@ -69,6 +69,9 @@ public class MqttSubHandle {
     @Autowired
     private AlarmPlanService alarmPlanService;
 
+    @Autowired
+    private PersonInOutService personInOutService;
+
     /**
      * MQTT消息统一入口处理方法
      *
@@ -370,6 +373,21 @@ public class MqttSubHandle {
 //                                        :
                                         LocalDateTime.now())
         );
+
+        if (presence == 1) {
+            PersonInOutInfo personInOut = new PersonInOutInfo();
+            personInOut.setTenantId(dev.getTenantId());
+            personInOut.setDevId(dev.getDevId());
+            personInOut.setEnterTime(LocalDateTime.now());
+            personInOutService.save(personInOut);
+        } else if (presence == 0) {
+            PersonInOutInfo personInOut = personInOutService.queryOneByDevId(dev.getDevId());
+            if (personInOut != null) {
+                personInOut.setLeaveTime(LocalDateTime.now());
+                personInOutService.updateById(personInOut);
+            }
+        }
+
     }
 
     private void subDevLastWill(String topic, String payload) {

+ 44 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/po/PersonInOutInfo.java

@@ -0,0 +1,44 @@
+package com.hfln.portal.infrastructure.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 人员进出表
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("tbl_dic")
+public class PersonInOutInfo extends BasePO {
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long perIoId;
+
+    /**
+     * 租户表id
+     */
+    private Long tenantId;
+
+    /**
+     * dev_info表id
+     */
+    private Long devId;
+
+    /**
+     * 进入时间
+     */
+    private LocalDateTime enterTime;
+
+    /**
+     * 离开时间
+     */
+    private LocalDateTime leaveTime;
+} 

+ 11 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/PersonInOutService.java

@@ -0,0 +1,11 @@
+package com.hfln.portal.infrastructure.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.hfln.portal.infrastructure.po.PersonInOutInfo;
+
+public interface PersonInOutService extends IService<PersonInOutInfo> {
+
+    PersonInOutInfo queryOneByDevId(Long devId);
+
+    Long countActive(Long tenantId);
+}

+ 30 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/PersonInOutServiceImpl.java

@@ -0,0 +1,30 @@
+package com.hfln.portal.infrastructure.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hfln.portal.infrastructure.mapper.PersonInOutMapper;
+import com.hfln.portal.infrastructure.po.PersonInOutInfo;
+import com.hfln.portal.infrastructure.service.PersonInOutService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+
+@Service
+@Slf4j
+public class PersonInOutServiceImpl extends ServiceImpl<PersonInOutMapper, PersonInOutInfo> implements PersonInOutService {
+    @Override
+    public PersonInOutInfo queryOneByDevId(Long devId) {
+
+        LambdaUpdateWrapper<PersonInOutInfo> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(PersonInOutInfo::getDevId, devId)
+                .orderByDesc(PersonInOutInfo::getCreateTime)
+                .last("limit 1");
+        return this.baseMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public Long countActive(Long tenantId) {
+        return this.baseMapper.countActive(tenantId, LocalDate.now());
+    }
+}