Ver código fonte

增加机构大屏功能

suntianwu 3 anos atrás
pai
commit
1c1a1eacf4

+ 139 - 0
src/main/java/com/care/bigscreen/controller/BigScreenController.java

@@ -1,9 +1,11 @@
 package com.care.bigscreen.controller;
 
 
+import cn.hutool.core.collection.CollUtil;
 import com.care.bigscreen.service.BigScreenService;
 import com.care.bigscreen.vo.*;
 
+import com.care.common.enums.OlderLiveTypeEnum;
 import com.care.common.vo.PageResVO;
 import com.care.common.util.PageResult;
 import com.care.common.util.PageUtil;
@@ -15,7 +17,10 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -248,6 +253,140 @@ public class BigScreenController {
         }
     }
 
+    /**
+     * 机构大屏的年龄与性别分布查询
+     */
+    @ApiOperation(value = "机构大屏的年龄与性别分布查询  --三期新增", notes = "机构大屏的年龄与性别分布查询  --三期新增")
+    @GetMapping("/selectOrgBigScreenAgeSexList")
+    @ApiImplicitParams(
+            {
+                    @ApiImplicitParam(paramType = "header", required = true, name = "token", dataType = "String", value = "token验证信息"),
+                    @ApiImplicitParam(name = "orgId", value = "机构ID", dataTypeClass = Long.class,required = true)
+            }
+    )
+    public Result<List<BigScreenAgeSexVO>> selectOrgBigScreenAgeSexList(@RequestHeader("token") String token, Long orgId) {
+        try {
+            List<BigScreenAgeSexVO> result = new ArrayList<>();
+            List<BigScreenAgeSexVO> bigScreenAgeSexVOList =  bigScreenService.selectOrgBigScreenAgeSexList(orgId);
+            if(CollUtil.isNotEmpty(bigScreenAgeSexVOList)){
+                BigScreenAgeSexVO vo40_down = new BigScreenAgeSexVO();
+                vo40_down.setAge("40以下");
+                BigScreenAgeSexVO vo41_50 = new BigScreenAgeSexVO();
+                vo41_50.setAge("41-50");
+                BigScreenAgeSexVO vo51_60 = new BigScreenAgeSexVO();
+                vo51_60.setAge("51-60");
+                BigScreenAgeSexVO vo61_70 = new BigScreenAgeSexVO();
+                vo61_70.setAge("61-70");
+                BigScreenAgeSexVO vo71_80 = new BigScreenAgeSexVO();
+                vo71_80.setAge("71-80");
+                BigScreenAgeSexVO vo80_up = new BigScreenAgeSexVO();
+                vo80_up.setAge("80以上");
+
+                for (BigScreenAgeSexVO vo : bigScreenAgeSexVOList) {
+                    if((Integer)vo.getAge() <= 40){
+                       vo40_down.setManNum(vo40_down.getManNum() + vo.getManNum());
+                       vo40_down.setWomanNum(vo40_down.getWomanNum() + vo.getWomanNum());
+                    } else if((Integer)vo.getAge() >= 41 &&  (Integer)vo.getAge() <= 50){
+                        vo41_50.setManNum(vo41_50.getManNum() + vo.getManNum());
+                        vo41_50.setWomanNum(vo41_50.getWomanNum() + vo.getWomanNum());
+                    } else if((Integer)vo.getAge() >= 51 &&  (Integer)vo.getAge() <= 60){
+                        vo51_60.setManNum(vo51_60.getManNum() + vo.getManNum());
+                        vo51_60.setWomanNum(vo51_60.getWomanNum() + vo.getWomanNum());
+                    } else if((Integer)vo.getAge() >= 61 &&  (Integer)vo.getAge() <= 70){
+                        vo61_70.setManNum(vo61_70.getManNum() + vo.getManNum());
+                        vo61_70.setWomanNum(vo61_70.getWomanNum() + vo.getWomanNum());
+                    } else if((Integer)vo.getAge() >= 71 &&  (Integer)vo.getAge() <= 80){
+                        vo71_80.setManNum(vo71_80.getManNum() + vo.getManNum());
+                        vo71_80.setWomanNum(vo71_80.getWomanNum() + vo.getWomanNum());
+                    } else if( (Integer)vo.getAge() >= 80){
+                        vo80_up.setManNum(vo80_up.getManNum() + vo.getManNum());
+                        vo80_up.setWomanNum(vo80_up.getWomanNum() + vo.getWomanNum());
+                    }
+                }
+                result.add(vo40_down);
+                result.add(vo41_50);
+                result.add(vo51_60);
+                result.add(vo61_70);
+                result.add(vo71_80);
+                result.add(vo80_up);
+            }
+            return Result.success(result);
+        } catch (Exception e) {
+            log.error("机构大屏的年龄与性别分布查询出现异常",e);
+            return Result.error("系统错误,机构大屏的年龄与性别分布查询失败");
+        }
+    }
+
+    /**
+     * 机构大屏的居住类型比例查询
+     */
+    @ApiOperation(value = "机构大屏的居住类型比例查询  --三期新增", notes = "机构大屏的居住类型比例查询  --三期新增")
+    @GetMapping("/selectOrgBigScreenLiveTypeRateList")
+    @ApiImplicitParams(
+            {
+                    @ApiImplicitParam(paramType = "header", required = true, name = "token", dataType = "String", value = "token验证信息"),
+                    @ApiImplicitParam(name = "orgId", value = "机构ID", dataTypeClass = Long.class,required = true)
+            }
+    )
+    public Result<List<BigScreenLiveTypeVO>> selectOrgBigScreenLiveTypeRateList(@RequestHeader("token") String token, Long orgId) {
+        try {
+            List<BigScreenLiveTypeVO> list =  bigScreenService.selectOrgBigScreenLiveTypeRateList(orgId);
+            if(CollUtil.isNotEmpty(list)){
+                for(BigScreenLiveTypeVO vo : list){
+                    vo.setLiveTypeName(OlderLiveTypeEnum.getCodeToName(vo.getLiveType()));
+                }
+            }
+            return Result.success(list);
+        } catch (Exception e) {
+            log.error("机构大屏的居住类型比例查询出现异常",e);
+            return Result.error("系统错误,机构大屏的居住类型比例查询失败");
+        }
+    }
+
+    /**
+     * 机构大屏的上报事件趋势查询
+     */
+    @ApiOperation(value = "机构大屏的上报事件趋势查询  --三期新增", notes = "机构大屏的上报事件趋势查询  --三期新增")
+    @GetMapping("/selectOrgBigScreenEventTrendList")
+    @ApiImplicitParams(
+            {
+                    @ApiImplicitParam(paramType = "header", required = true, name = "token", dataType = "String", value = "token验证信息"),
+                    @ApiImplicitParam(name = "orgId", value = "机构ID", dataTypeClass = Long.class,required = true)
+            }
+    )
+    public Result<List<BigScreenEnventTrendVO>> selectOrgBigScreenEventTrendList(@RequestHeader("token") String token, Long orgId) {
+        try {
+            List<BigScreenEnventTrendVO> list =  bigScreenService.selectOrgBigScreenEventTrendList(orgId);
+
+            return Result.success(list);
+        } catch (Exception e) {
+            log.error("机构大屏的居住类型比例查询出现异常",e);
+            return Result.error("系统错误,机构大屏的居住类型比例查询失败");
+        }
+    }
+
+    /**
+     * 机构大屏的事件数量查询
+     */
+    @ApiOperation(value = "机构大屏的事件数量查询  --三期新增", notes = "机构大屏的事件数量查询  --三期新增")
+    @GetMapping("/selectOrgBigScreenEventCount")
+    @ApiImplicitParams(
+            {
+                    @ApiImplicitParam(paramType = "header", required = true, name = "token", dataType = "String", value = "token验证信息"),
+                    @ApiImplicitParam(name = "orgId", value = "机构ID", dataTypeClass = Long.class,required = true)
+            }
+    )
+    public Result<BigScreenEnventCountVO> selectOrgBigScreenEventCount(@RequestHeader("token") String token, Long orgId) {
+        try {
+            BigScreenEnventCountVO vo =  bigScreenService.selectOrgBigScreenEventCount(orgId);
+
+            return Result.success(vo);
+        } catch (Exception e) {
+            log.error("机构大屏的居住类型比例查询出现异常",e);
+            return Result.error("系统错误,机构大屏的居住类型比例查询失败");
+        }
+    }
+
     /////////////////////////////////////////////////////////服务站大屏////////////////////////////////////////////////////
     /**
      * 服务站大屏的站点统计查询

+ 20 - 0
src/main/java/com/care/bigscreen/mapper/BigSreenMapper.java

@@ -86,6 +86,26 @@ public interface BigSreenMapper extends BaseMapper<StStation> {
      */
     List<BigScreenDeviceVO> selectOrgBigScreenDeviceList(@Param("orgId") Long orgId, @Param("stationId") Long stationId, @Param("status") String status);
 
+    /**
+     * 机构大屏的年龄性别列表查询
+     */
+    List<BigScreenAgeSexVO> selectOrgBigScreenAgeSexList(@Param("orgId") Long orgId);
+
+    /**
+     * 机构大屏的居住类型比例列表查询
+     */
+    List<BigScreenLiveTypeVO> selectOrgBigScreenLiveTypeRateList(@Param("orgId") Long orgId);
+
+    /**
+     * 机构大屏的事件趋势列表查询
+     */
+    List<BigScreenEnventTrendVO> selectOrgBigScreenEventTrendList(@Param("orgId") Long orgId);
+
+    /**
+     * 机构大屏的事件数量查询
+     */
+    BigScreenEnventCountVO selectOrgBigScreenEventCount(@Param("orgId") Long orgId);
+
     /**
      * 服务站大屏的已完成安全事件总记录数
      */

+ 19 - 0
src/main/java/com/care/bigscreen/service/BigScreenService.java

@@ -77,6 +77,25 @@ public interface BigScreenService {
      */
     List<BigScreenDeviceVO> selectOrgBigScreenDeviceList(Long orgId, Long stationId,String status);
 
+    /**
+     * 机构大屏的年龄性别分布列表查询
+     */
+    List<BigScreenAgeSexVO> selectOrgBigScreenAgeSexList(Long orgId);
+
+    /**
+     * 机构大屏的居住类型比例列表查询
+     */
+    List<BigScreenLiveTypeVO> selectOrgBigScreenLiveTypeRateList(Long orgId);
+
+    /**
+     * 机构大屏的事件趋势列表查询
+     */
+    List<BigScreenEnventTrendVO> selectOrgBigScreenEventTrendList(Long orgId);
+    /**
+     * 机构大屏的事件数量查询
+     */
+    BigScreenEnventCountVO selectOrgBigScreenEventCount(Long orgId);
+
     /**
      * 服务站大屏的已完成安全事件列表分页查询
      */

+ 26 - 0
src/main/java/com/care/bigscreen/service/impl/BigScreenServiceImpl.java

@@ -162,6 +162,32 @@ public class BigScreenServiceImpl implements BigScreenService {
         return bigSreenMapper.selectOrgBigScreenDeviceList(orgId, stationId,status);
     }
 
+    @Override
+    public List<BigScreenAgeSexVO> selectOrgBigScreenAgeSexList(Long orgId) {
+        return bigSreenMapper.selectOrgBigScreenAgeSexList(orgId);
+    }
+    /**
+     * 机构大屏的居住类型比例列表查询
+     */
+    @Override
+    public List<BigScreenLiveTypeVO> selectOrgBigScreenLiveTypeRateList(Long orgId){
+        return bigSreenMapper.selectOrgBigScreenLiveTypeRateList(orgId);
+    }
+
+    /**
+     * 机构大屏的事件趋势列表查询
+     */
+    @Override
+    public List<BigScreenEnventTrendVO> selectOrgBigScreenEventTrendList(Long orgId){
+        return bigSreenMapper.selectOrgBigScreenEventTrendList(orgId);
+    }
+    /**
+     * 机构大屏的事件数量查询
+     */
+    @Override
+    public BigScreenEnventCountVO selectOrgBigScreenEventCount(Long orgId){
+        return bigSreenMapper.selectOrgBigScreenEventCount(orgId);
+    }
     /**
      * 服务站大屏的已完成安全事件列表分页查询
      */

+ 29 - 0
src/main/java/com/care/bigscreen/vo/BigScreenAgeSexVO.java

@@ -0,0 +1,29 @@
+package com.care.bigscreen.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+ * 大屏年龄性别响应类
+ *
+ * @author stw
+ * @since 2021-05-20
+ */
+@Data
+@ApiModel(value = "大屏年龄性别响应类", description = "大屏年龄性别响应类")
+public class BigScreenAgeSexVO {
+
+    @ApiModelProperty(value = "年龄")
+    private Object age;
+
+    @ApiModelProperty(value = "男数量")
+    private Integer manNum = 0;
+
+    @ApiModelProperty(value = "女数量")
+    private Integer womanNum = 0;
+
+}

+ 24 - 0
src/main/java/com/care/bigscreen/vo/BigScreenEnventCountVO.java

@@ -0,0 +1,24 @@
+package com.care.bigscreen.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 大屏事件数量响应类
+ *
+ * @author stw
+ * @since 2021-05-20
+ */
+@Data
+@ApiModel(value = "大屏事件数量响应类", description = "大屏事件数量响应类")
+public class BigScreenEnventCountVO {
+
+    @ApiModelProperty(value = "今日上报事件数量")
+    private String todayCount;
+    @ApiModelProperty(value = "累计上报事件数量")
+    private Integer total;
+
+}

+ 26 - 0
src/main/java/com/care/bigscreen/vo/BigScreenEnventTrendVO.java

@@ -0,0 +1,26 @@
+package com.care.bigscreen.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * 大屏事件趋势响应类
+ *
+ * @author stw
+ * @since 2021-05-20
+ */
+@Data
+@ApiModel(value = "大屏事件趋势响应类", description = "大屏事件趋势响应类")
+public class BigScreenEnventTrendVO {
+
+    @ApiModelProperty(value = "日期")
+    private String dataDate;
+    @ApiModelProperty(value = "数量")
+    private Integer number;
+
+}

+ 28 - 0
src/main/java/com/care/bigscreen/vo/BigScreenLiveTypeVO.java

@@ -0,0 +1,28 @@
+package com.care.bigscreen.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * 大屏居住类型比例响应类
+ *
+ * @author stw
+ * @since 2021-05-20
+ */
+@Data
+@ApiModel(value = "大屏居住类型比例响应类", description = "大屏居住类型比例响应类")
+public class BigScreenLiveTypeVO {
+
+    @ApiModelProperty(value = "居住类别:1:独居 2:非独居 3:集中居住 4:其他")
+    private String liveType;
+    @ApiModelProperty(value = "居住类别:1:独居 2:非独居 3:集中居住 4:其他")
+    private String liveTypeName;
+    @ApiModelProperty(value = "比率")
+    private BigDecimal rate;
+
+}

+ 13 - 0
src/main/java/com/care/client/schedule/HealthDataStaSchedule.java

@@ -23,6 +23,9 @@ public class HealthDataStaSchedule {
     @Autowired
     private CareBedroomInbedHourStaService careBedroomInbedHourStaService;
 
+    @Autowired
+    private CareToiletInoutHourStaService careToiletInoutHourStaService;
+
     @Autowired
     private CareWalkingDistanceHourStaService careWalkingDistanceHourStaService;
 
@@ -45,6 +48,16 @@ public class HealthDataStaSchedule {
         careBedroomInbedHourStaService.exeBedroomInbedHourSta();
     }
 
+    /**
+     * 每小时进出卫生间统计
+     * 1小时调用一次
+     */
+    @Async
+    @Scheduled(cron = "0 0 0/1 * * ?")
+    public void exeToiletInoutHourSta() {
+        careToiletInoutHourStaService.exeToiletInoutHourSta();
+    }
+
     /**
      * 每小时行走距离统计
      * 1小时调用一次

+ 1 - 1
src/main/java/com/care/common/mapper/CareToiletInoutHourStaMapper.java

@@ -11,5 +11,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2021-11-24 17:54:24
  */
 public interface CareToiletInoutHourStaMapper extends BaseMapper<CareToiletInoutHourSta> {
-
+    void exeToiletInoutHourSta();
 }

+ 1 - 1
src/main/java/com/care/common/service/CareToiletInoutHourStaService.java

@@ -10,5 +10,5 @@ import com.care.common.entity.CareToiletInoutHourSta;
  * @since 2021-11-24 17:54:24
  */
 public interface CareToiletInoutHourStaService extends IService<CareToiletInoutHourSta> {
-
+    void exeToiletInoutHourSta();
 }

+ 3 - 1
src/main/java/com/care/common/service/impl/CareToiletInoutHourStaServiceImpl.java

@@ -14,5 +14,7 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class CareToiletInoutHourStaServiceImpl extends ServiceImpl<CareToiletInoutHourStaMapper, CareToiletInoutHourSta> implements CareToiletInoutHourStaService {
-
+   public void exeToiletInoutHourSta(){
+       this.baseMapper.exeToiletInoutHourSta();
+   }
 }

+ 35 - 0
src/main/resources/mybatis/BigSreenMapper.xml

@@ -176,6 +176,41 @@
         </where>
     </select>
 
+    <select id="selectOrgBigScreenAgeSexList" resultType="com.care.bigscreen.vo.BigScreenAgeSexVO">
+        SELECT
+         ROUND(DATEDIFF(CURDATE(), a.birthday)/365.2422) age,
+        sum(case when a.gender='M'then 1 else 0 end) manNum,
+        sum(case when a.gender='W'then 1 else 0 end) womanNum
+        FROM care_older a where a.org_id = #{orgId}
+        group by age
+    </select>
+
+    <select id="selectOrgBigScreenLiveTypeRateList" resultType="com.care.bigscreen.vo.BigScreenLiveTypeVO">
+        SELECT
+        live_type liveType,
+        convert(count(1)/(select count(1) from care_older b where b.org_id = #{orgId}),decimal(20,4)) rate
+        FROM care_older a where a.org_id = #{orgId}
+        group by live_type
+        order by live_type
+    </select>
+
+    <select id="selectOrgBigScreenEventTrendList" resultType="com.care.bigscreen.vo.BigScreenEnventTrendVO">
+        SELECT
+        DATE_FORMAT(a.create_time,'%Y-%m-%d') dataDate,
+        count(1) number
+        FROM care_event_order a where a.org_id = #{orgId}
+        and DATE_FORMAT(a.create_time,'%Y-%m-%d') >= DATE_FORMAT(date_sub(curdate(),interval 30 day),'%Y-%m-%d')
+        group by dataDate
+        order by dataDate
+    </select>
+
+    <select id="selectOrgBigScreenEventCount" resultType="com.care.bigscreen.vo.BigScreenEnventCountVO">
+      select
+        (SELECT count(1) number FROM care_event_order a where a.org_id = #{orgId}
+        and DATE_FORMAT(a.create_time,'%Y-%m-%d') = DATE_FORMAT(curdate(),'%Y-%m-%d')) todayCount,
+        (SELECT count(1) number FROM care_event_order a where a.org_id = #{orgId}) total
+      from dual
+    </select>
 
     <select id="selectStationBigScreenStatisticsByStation" resultType="com.care.bigscreen.vo.StationBigScreenStatisticsVO">
         SELECT

+ 6 - 1
src/main/resources/mybatis/CareToiletInoutHourStaMapper.xml

@@ -1,6 +1,11 @@
 <?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.care.common.mapper.CareToiletInoutHourStaMapper">
-
+    <insert id="exeToiletInoutHourSta">
+        insert into care_toilet_inout_hour_sta(data_hour,dev_id,frequency,duration)
+        select DATE_FORMAT(t.create_time,'%Y%m%d%H') data_hour,t.dev_id,COUNT(1) frequency, convert(sum(t.duration)/60,decimal(20,0)) duration from care_toilet_inout_detail t
+        where DATE_FORMAT(t.create_time,'%Y%m%d%H') = DATE_FORMAT(DATE_SUB(now(), INTERVAL 1 DAY), '%Y%m%d%H')
+        group by data_hour,t.dev_id
+    </insert>
 
 </mapper>

+ 2 - 2
src/main/resources/mybatis/CareWalkingDistanceHourStaMapper.xml

@@ -4,8 +4,8 @@
 
   <insert id="exeWalkingDistanceHourSta">
           insert into care_walking_distance_hour_sta(data_hour,dev_id,dev_scene,walking_distance)
-      select DATE_FORMAT(t.create_time,'%Y%m%d%H') data_date,t.dev_id,t.dev_scene, sum(walking_distance) walking_distance from care_walking_distance_detail t
+      select DATE_FORMAT(t.create_time,'%Y%m%d%H') data_hour,t.dev_id,t.dev_scene, sum(walking_distance) walking_distance from care_walking_distance_detail t
       where DATE_FORMAT(t.create_time,'%Y%m%d%H') = DATE_FORMAT(DATE_SUB(now(), INTERVAL 1 DAY), '%Y%m%d%H')
-      group by data_date,t.dev_id,t.dev_scene
+      group by data_hour,t.dev_id,t.dev_scene
   </insert>
 </mapper>