Quellcode durchsuchen

增加定时删除超过48小时访客记录。

tomatozq vor 5 Jahren
Ursprung
Commit
a9f0af160b

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

@@ -65,4 +65,6 @@ public interface PersonDeviceFilterLogDAO {
     List<PersonInfo> findUndetectedByCompanyCode(@Param("searchParams") Map<String, Object> searchParams);
 
     Integer getDayCheckedPersonNumByCompanyList(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("list") List<CompanyInfo> list,  @Param("popedom") String popedom);
+
+    int deleteExpiredVisitorRecord(@Param("limit") int limit);
 }

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

@@ -48,4 +48,8 @@ public interface PersonDeviceLogDAO {
     List<PersonDeviceLog> findLastStudentLogByCompanyList(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("list") List<CompanyInfo> list);
 
     Integer getDayCheckedPersonNumByCompanyList(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("list") List<CompanyInfo> list,  @Param("popedom") String popedom);
+
+    int delete(String id);
+
+    List<PersonDeviceLog> findExpiredVisitorRecord(@Param("limit") int limit);
 }

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

@@ -75,4 +75,6 @@ public interface PersonDeviceFilterLogService {
     Page<PersonInfo> findUndetectedPersonList(Map<String,Object> searchParams,int pageNumber,int pageSize,boolean count);
 
     Integer getDayCheckedPersonNumByCompanyList(Date startTime,Date endTime, List<CompanyInfo> list,String popedom);
+
+    int deleteExpiredVisitorRecord(int limit);
 }

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

@@ -52,4 +52,8 @@ public interface PersonDeviceLogService {
     Page<PersonDeviceLog> findLastStudentLogByCompanyList(Date beginOfDay, Date endOfDay, List<CompanyInfo> list, int pageIndex, int pageSize);
 
     Integer getDayCheckedPersonTotalByCompanyList(Date startTime,Date endTime, List<CompanyInfo> list,String popedom);
+
+    List<PersonDeviceLog> findExpiredVisitorRecord(int limit);
+
+    int delete(String id);
 }

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

@@ -283,4 +283,9 @@ public class PersonDeviceFilterLogServiceImpl implements PersonDeviceFilterLogSe
     public Integer countDetectedByCompanyId(String companyId, Date startDate, Date endDate) {
         return personDeviceFilterLogDAO.countDetectedByCompanyId(companyId,startDate,endDate);
     }
+
+    @Override
+    public int deleteExpiredVisitorRecord(int limit) {
+        return personDeviceFilterLogDAO.deleteExpiredVisitorRecord(limit);
+    }
 }

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

@@ -268,8 +268,23 @@ public class PersonDeviceLogServiceImpl implements PersonDeviceLogService {
 
     @Override
     public Integer getDayCheckedPersonTotalByCompanyList(Date startTime, Date endTime, List<CompanyInfo> list, String popedom) {
-        return personDeviceLogDAO.getDayCheckedPersonNumByCompanyList(startTime, endTime, list, popedom) == null?0:personDeviceLogDAO.getDayCheckedPersonNumByCompanyList(startTime, endTime, list, popedom);
+        Integer total = personDeviceLogDAO.getDayCheckedPersonNumByCompanyList(startTime, endTime, list, popedom);
 
+        if (total!=null){
+            return total;
+        }
+        else{
+            return 0;
+        }
     }
 
+    @Override
+    public List<PersonDeviceLog> findExpiredVisitorRecord(int limit) {
+        return personDeviceLogDAO.findExpiredVisitorRecord(limit);
+    }
+
+    @Override
+    public int delete(String id) {
+        return personDeviceLogDAO.delete(id);
+    }
 }

+ 14 - 4
common/src/main/java/com/jpsoft/smart/modules/common/utils/OSSUtil.java

@@ -132,15 +132,25 @@ public class OSSUtil {
     public static boolean deleteFile(OSSConfig ossConfig,String filePath) {
         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
 
-        boolean exist = ossClient.doesObjectExist(ossConfig.getBucketName(), filePath);
+        String key = "";
+
+        if (filePath.startsWith(ossConfig.getUrlPrefix())) {
+            key = filePath.substring(ossConfig.getUrlPrefix().length());
+        }
+
+        if (key.startsWith("/")) {
+            key = key.substring(1);
+        }
+
+        boolean exist = ossClient.doesObjectExist(ossConfig.getBucketName(), key);
 
         if (!exist) {
-            log.error("文件不存在,filePath={}", filePath);
+            log.error("文件不存在,key={}", key);
             return false;
         }
 
-        log.info("删除文件,filePath={}", filePath);
-        ossClient.deleteObject(ossConfig.getBucketName(), filePath);
+        log.info("删除文件,key={}", key);
+        ossClient.deleteObject(ossConfig.getBucketName(), key);
 
         ossClient.shutdown();
 

+ 19 - 0
common/src/main/java/com/jpsoft/smart/modules/sys/dao/SysLogDAO.java

@@ -0,0 +1,19 @@
+package com.jpsoft.smart.modules.sys.dao;
+
+import com.jpsoft.smart.modules.common.dto.Sort;
+import com.jpsoft.smart.modules.sys.entity.SysLog;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface SysLogDAO {
+	int insert(SysLog entity);
+	int update(SysLog entity);
+	int exist(Long id);
+	SysLog get(Long id);
+	int delete(Long id);
+	List<SysLog> list();
+	List<SysLog> search(Map<String, Object> searchParams, List<Sort> sortList);
+}

+ 37 - 0
common/src/main/java/com/jpsoft/smart/modules/sys/entity/SysLog.java

@@ -0,0 +1,37 @@
+package com.jpsoft.smart.modules.sys.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+  描述:sys_log的实体类
+ */
+@Data
+@ApiModel(value = "sys_log的实体类")
+public class SysLog {
+    @ApiModelProperty(value = "日志编号")
+	private Long id;
+    @ApiModelProperty(value = "客户端IP")
+	private String remoteIp;
+    @ApiModelProperty(value = "访问url")
+	private String url;
+    @ApiModelProperty(value = "提交参数")
+	private String data;
+    @ApiModelProperty(value = "用户编号")
+	private String userId;
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
+    @ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	@ApiModelProperty(value = "备注")
+	private String remark;
+	@ApiModelProperty(value = "耗时(毫秒)")
+	private Long elapse;
+	@ApiModelProperty(value = "入口")
+	private String pointcut;
+}

+ 18 - 0
common/src/main/java/com/jpsoft/smart/modules/sys/service/SysLogService.java

@@ -0,0 +1,18 @@
+package com.jpsoft.smart.modules.sys.service;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.smart.modules.common.dto.Sort;
+import com.jpsoft.smart.modules.sys.entity.SysLog;
+
+import java.util.List;
+import java.util.Map;
+
+public interface SysLogService {
+	SysLog get(Long id);
+	boolean exist(Long id);
+	int insert(SysLog model);
+	int update(SysLog model);
+	int delete(Long id);
+	List<SysLog> list();
+	Page<SysLog> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, List<Sort> sortList);
+}

+ 70 - 0
common/src/main/java/com/jpsoft/smart/modules/sys/service/impl/SysLogServiceImpl.java

@@ -0,0 +1,70 @@
+package com.jpsoft.smart.modules.sys.service.impl;
+
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.jpsoft.smart.modules.common.dto.Sort;
+import com.jpsoft.smart.modules.sys.dao.SysLogDAO;
+import com.jpsoft.smart.modules.sys.entity.SysLog;
+import com.jpsoft.smart.modules.sys.service.SysLogService;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@Transactional
+@Component(value="sysLogService")
+public class SysLogServiceImpl implements SysLogService {
+	@Resource(name="sysLogDAO")
+	private SysLogDAO sysLogDAO;
+
+	@Override
+	public SysLog get(Long id) {
+		// TODO Auto-generated method stub
+		return sysLogDAO.get(id);
+	}
+
+	@Override
+	public int insert(SysLog model) {
+		// TODO Auto-generated method stub
+		//model.setId(UUID.randomUUID().toString());
+		
+		return sysLogDAO.insert(model);
+	}
+
+	@Override
+	public int update(SysLog model) {
+		// TODO Auto-generated method stub
+		return sysLogDAO.update(model);		
+	}
+
+	@Override
+	public int delete(Long id) {
+		// TODO Auto-generated method stub
+		return sysLogDAO.delete(id);
+	}
+
+	@Override
+	public boolean exist(Long id) {
+		// TODO Auto-generated method stub
+		int count = sysLogDAO.exist(id);
+		
+		return count > 0 ? true : false;
+	}
+	
+	@Override
+	public List<SysLog> list() {
+		// TODO Auto-generated method stub
+		return sysLogDAO.list();
+	}
+		
+	@Override
+	public Page<SysLog> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,List<Sort> sortList) {
+        Page<SysLog> page = PageHelper.startPage(pageNumber,pageSize).doSelectPage(()->{
+            sysLogDAO.search(searchParams,sortList);
+        });
+        
+        return page;
+	}
+}

+ 9 - 1
common/src/main/resources/mapper/base/PersonDeviceFilterLog.xml

@@ -17,7 +17,15 @@
 	face_image,
 	record_time,
 	time_zones
-</sql>
+    </sql>
+    <delete id="deleteExpiredVisitorRecord">
+        <![CDATA[
+            delete from base_person_device_filter_log
+            where datediff(now(),record_time)>1
+            and person_id=0
+            order by record_time asc limit ${limit}
+        ]]>
+    </delete>
     <resultMap id="PersonDeviceFilterLogMap" type="com.jpsoft.smart.modules.base.entity.PersonDeviceFilterLog">
         <id property="id" column="id_" />
         <result property="createBy" column="create_by" />

+ 12 - 3
common/src/main/resources/mapper/base/PersonDeviceLog.xml

@@ -22,6 +22,9 @@
 	face_image,
 	record_time
 </sql>
+    <delete id="delete">
+        delete from base_person_device_log where id_=#{0}
+    </delete>
     <resultMap id="SimpleMap" type="com.jpsoft.smart.modules.base.entity.PersonDeviceLog">
         <id property="id" column="id_" />
         <result property="createBy" column="create_by" />
@@ -279,18 +282,24 @@
         where person_id <> 0 and temperature_>0  GROUP BY a.person_id ORDER BY record_time desc
         ]]>
     </select>
-
     <select id="getDayCheckedPersonNumByCompanyList" resultType="Integer">
         select count(*) from base_person_device_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 b.company_id in
-        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">   #{item.id}
+        <foreach collection="list" index="index" item="item" open=" and b.company_id in (" separator="," close=")">   #{item.id}
         </foreach>
         and a.del_flag = 0
         <if test="popedom!=null">
             and b.popedom_ like #{popedom}
         </if>
     </select>
+    <select id="findExpiredVisitorRecord" resultMap="PersonDeviceLogMap">
+        <![CDATA[
+            select * from base_person_device_log
+            where datediff(now(),record_time)>1
+            and person_id=0
+            order by record_time asc limit ${limit}
+        ]]>
+    </select>
 </mapper>

+ 108 - 0
common/src/main/resources/mapper/sys/SysLog.xml

@@ -0,0 +1,108 @@
+<?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">
+<!-- namespace必须指向DAO接口 -->
+<mapper namespace="com.jpsoft.smart.modules.sys.dao.SysLogDAO">
+    <resultMap id="SysLogMap" type="com.jpsoft.smart.modules.sys.entity.SysLog">
+        <id property="id" column="id_"/>
+        <result property="remoteIp" column="remote_ip"/>
+        <result property="url" column="url_"/>
+        <result property="data" column="data_"/>
+        <result property="userId" column="user_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="remark" column="remark_"/>
+        <result property="elapse" column="elapse_"/>
+        <result property="pointcut" column="pointcut_"/>
+    </resultMap>
+    <insert id="insert" parameterType="com.jpsoft.smart.modules.sys.entity.SysLog">
+        <selectKey resultType="long" keyColumn="id_" keyProperty="id">
+            SELECT LAST_INSERT_ID() AS id_
+        </selectKey>
+        <![CDATA[
+		insert into sys_log
+	    (remote_ip,url_,data_,user_id,create_time,remark_,elapse_,pointcut_)
+		values
+		(
+            #{remoteIp,jdbcType=VARCHAR}
+            ,#{url,jdbcType=VARCHAR}
+            ,#{data,jdbcType=VARCHAR}
+            ,#{userId,jdbcType=VARCHAR}
+            ,#{createTime,jdbcType= TIMESTAMP }
+            ,#{remark,jdbcType=VARCHAR}
+            ,#{elapse,jdbcType=NUMERIC}
+            ,#{pointcut,jdbcType=VARCHAR}
+		)
+	]]>
+    </insert>
+    <delete id="delete" parameterType="string">
+        delete from sys_log where id_=#{id,jdbcType=VARCHAR}
+    </delete>
+    <update id="update" parameterType="com.jpsoft.smart.modules.sys.entity.SysLog">
+        update sys_log
+        <set>
+            <if test="remoteIp!=null">
+                remote_ip=#{remoteIp,jdbcType=VARCHAR},
+            </if>
+            <if test="url!=null">
+                url_=#{url,jdbcType=VARCHAR},
+            </if>
+            <if test="data!=null">
+                data_=#{data,jdbcType=VARCHAR},
+            </if>
+            <if test="userId!=null">
+                user_id=#{userId,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime!=null">
+                create_time=#{createTime,jdbcType= TIMESTAMP },
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+    <select id="get" parameterType="string" resultMap="SysLogMap">
+        select * from sys_log where id_=#{0}
+    </select>
+    <select id="exist" parameterType="string" resultType="int">
+        select count(*) from sys_log where id_=#{0}
+    </select>
+    <select id="list" resultMap="SysLogMap">
+        select * from sys_log
+    </select>
+    <select id="search" parameterType="hashmap" resultMap="SysLogMap">
+        <![CDATA[
+			select * from sys_log
+		]]>
+        <where>
+            <if test="searchParams.userId != null">
+                and user_id = #{searchParams.userId}
+            </if>
+            <if test="searchParams.remoteIP != null">
+                and remote_ip like #{searchParams.remoteIP}
+            </if>
+            <if test="searchParams.url != null">
+                and url_ like #{searchParams.url}
+            </if>
+            <if test="searchParams.pointcut != null">
+                and pointcut_ like #{searchParams.pointcut}
+            </if>
+            <if test="searchParams.startTime != null">
+                and create_time >= #{searchParams.startTime}
+            </if>
+            <if test="searchParams.endTime != null">
+                <![CDATA[
+                    and create_time <= #{searchParams.endTime}
+                ]]>
+            </if>
+            <if test="searchParams.elapseMin != null">
+                and elapse_ >= #{searchParams.elapseMin}
+            </if>
+            <if test="searchParams.elapseMax != null">
+                <![CDATA[
+                    and elapse_ <= #{searchParams.elapseMax}
+                ]]>
+            </if>
+        </where>
+        <foreach item="sort" collection="sortList" open="order by" separator=",">
+            ${sort.name} ${sort.order}
+        </foreach>
+    </select>
+</mapper>

+ 64 - 0
web/src/main/java/com/jpsoft/smart/schduled/CleanVisitorRecordTask.java

@@ -0,0 +1,64 @@
+package com.jpsoft.smart.schduled;
+
+import com.jpsoft.smart.config.OSSConfig;
+import com.jpsoft.smart.modules.base.entity.PersonDeviceLog;
+import com.jpsoft.smart.modules.base.service.PersonDeviceFilterLogService;
+import com.jpsoft.smart.modules.base.service.PersonDeviceLogService;
+import com.jpsoft.smart.modules.common.utils.OSSUtil;
+import com.jpsoft.smart.modules.sys.entity.SysLog;
+import com.jpsoft.smart.modules.sys.service.SysLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import java.util.Date;
+import java.util.List;
+
+@Component
+@Slf4j
+public class CleanVisitorRecordTask {
+
+    @Autowired
+    private PersonDeviceFilterLogService personDeviceFilterLogService;
+
+    @Autowired
+    private PersonDeviceLogService personDeviceLogService;
+
+    @Autowired
+    private SysLogService sysLogService;
+
+    @Autowired
+    private OSSConfig ossConfig;
+
+    //每5分钟执行一次
+    @Scheduled(cron="0 0/5 * * * ?")
+    public void run(){
+        List<PersonDeviceLog> logList = personDeviceLogService.findExpiredVisitorRecord(10);
+
+        int removeImageCount = 0;
+        int removeRawCount = 0;
+        int removeFilterCount = 0;
+
+        //删除上传图片
+        for (PersonDeviceLog personDeviceLog : logList) {
+            String faceImage = personDeviceLog.getFaceImage();
+
+            if(OSSUtil.deleteFile(ossConfig,faceImage)){
+                removeImageCount++;
+            }
+
+            removeRawCount += personDeviceLogService.delete(personDeviceLog.getId());
+        }
+
+        //删除过滤记录
+        removeFilterCount = personDeviceFilterLogService.deleteExpiredVisitorRecord(100);
+
+        //增加系统日志
+        SysLog sysLog = new SysLog();
+        sysLog.setRemark(String.format("删除图片数量:%s,删除原始测温记录:%s,删除过滤后测温记录:%s",
+                removeImageCount,removeRawCount,removeFilterCount));
+        sysLog.setCreateTime(new Date());
+
+        sysLogService.insert(sysLog);
+    }
+}