From 829e5e2ee51ab5ab50cc3c464f4151aae4efc7c3 Mon Sep 17 00:00:00 2001 From: hanrenchun Date: Thu, 21 Mar 2024 16:33:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B9=85=E5=87=BA=E6=9C=AA=E5=BD=92=EF=BC=8C?= =?UTF-8?q?=E4=B9=85=E5=B1=85=E6=9C=AA=E5=87=BA=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/ModelLongtimeinUserInfo.java | 166 +++++++++++++++++ .../domain/ModelLongtimeoutUserInfo.java | 166 +++++++++++++++++ .../mapper/ModelLongtimeinUserInfoMapper.java | 21 +++ .../ModelLongtimeoutUserInfoMapper.java | 21 +++ .../ModelLongtimeinUserInfoService.java | 13 ++ .../ModelLongtimeoutUserInfoService.java | 13 ++ .../ModelLongtimeinUserInfoServiceImpl.java | 24 +++ .../ModelLongtimeoutUserInfoServiceImpl.java | 24 +++ .../task/ModelLongtimeinUserTask.java | 168 +++++++++++++++++ .../task/ModelLongtimeoutUserTask.java | 171 ++++++++++++++++++ .../task/NotFoundUserTask.java | 2 +- .../mysqloracletest/utils/ConfigParam.java | 2 + .../mapper/ModelLongtimeinUserInfoMapper.xml | 55 ++++++ .../mapper/ModelLongtimeoutUserInfoMapper.xml | 56 ++++++ 14 files changed, 901 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/ssf/mysqloracletest/domain/ModelLongtimeinUserInfo.java create mode 100644 src/main/java/com/ssf/mysqloracletest/domain/ModelLongtimeoutUserInfo.java create mode 100644 src/main/java/com/ssf/mysqloracletest/mapper/ModelLongtimeinUserInfoMapper.java create mode 100644 src/main/java/com/ssf/mysqloracletest/mapper/ModelLongtimeoutUserInfoMapper.java create mode 100644 src/main/java/com/ssf/mysqloracletest/service/ModelLongtimeinUserInfoService.java create mode 100644 src/main/java/com/ssf/mysqloracletest/service/ModelLongtimeoutUserInfoService.java create mode 100644 src/main/java/com/ssf/mysqloracletest/service/impl/ModelLongtimeinUserInfoServiceImpl.java create mode 100644 src/main/java/com/ssf/mysqloracletest/service/impl/ModelLongtimeoutUserInfoServiceImpl.java create mode 100644 src/main/java/com/ssf/mysqloracletest/task/ModelLongtimeinUserTask.java create mode 100644 src/main/java/com/ssf/mysqloracletest/task/ModelLongtimeoutUserTask.java create mode 100644 src/main/resources/mapper/ModelLongtimeinUserInfoMapper.xml create mode 100644 src/main/resources/mapper/ModelLongtimeoutUserInfoMapper.xml diff --git a/src/main/java/com/ssf/mysqloracletest/domain/ModelLongtimeinUserInfo.java b/src/main/java/com/ssf/mysqloracletest/domain/ModelLongtimeinUserInfo.java new file mode 100644 index 0000000..d632c15 --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/domain/ModelLongtimeinUserInfo.java @@ -0,0 +1,166 @@ +package com.ssf.mysqloracletest.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + +/** + * 久居未出住户信息表 + * @TableName model_longtimein_user_info + */ +@TableName(value ="model_longtimein_user_info") +@Data +public class ModelLongtimeinUserInfo implements Serializable { + /** + * 主键 + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 小区编码 + */ + private String placeCode; + + /** + * 小区名称 + */ + private String placeName; + + /** + * 网格编码 + */ + private String gridCode; + + /** + * 网格名称 + */ + private String gridName; + + /** + * 楼栋编号 + */ + private String buildingCode; + + /** + * 楼栋名称 + */ + private String buildingName; + + /** + * 单元编码 + */ + private String unitCode; + + /** + * 单元名称 + */ + private String unitName; + + /** + * 房屋编码 + */ + private String homeCode; + + /** + * 房屋名称 + */ + private String homeName; + + /** + * 人员姓名 + */ + private String userName; + + /** + * 人员照片 + */ + private String userPic; + + /** + * 证件类型 + */ + private Integer identityType; + + /** + * 证件号码 + */ + private String idcard; + + /** + * 联系电话 + */ + private String phone; + + /** + * 关爱人员标签 + */ + private Integer caringLabel; + + /** + * 近期出现时间 + */ + private Long lastTime; + + /** + * 至今居家天数 + */ + private Integer homeDays; + + /** + * 创建时间 + */ + private Date createtime; + + /** + * 创建者 + */ + private Integer createby; + + /** + * 更新时间 + */ + private Date updatetime; + + /** + * 更新者 + */ + private Integer updateby; + + /** + * 0:不活跃,1:活跃 + */ + private Integer isactive; + + /** + * 扩展字段c1 + */ + private String c1; + + /** + * 扩展字段c2 + */ + private String c2; + + /** + * 扩展字段c3 + */ + private String c3; + + /** + * 扩展字段c4 + */ + private String c4; + + /** + * 扩展字段c5 + */ + private String c5; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/ssf/mysqloracletest/domain/ModelLongtimeoutUserInfo.java b/src/main/java/com/ssf/mysqloracletest/domain/ModelLongtimeoutUserInfo.java new file mode 100644 index 0000000..7703110 --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/domain/ModelLongtimeoutUserInfo.java @@ -0,0 +1,166 @@ +package com.ssf.mysqloracletest.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + +/** + * 久出未归住户信息表 + * @TableName model_longtimeout_user_info + */ +@TableName(value ="model_longtimeout_user_info") +@Data +public class ModelLongtimeoutUserInfo implements Serializable { + /** + * 主键 + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 小区编码 + */ + private String placeCode; + + /** + * 小区名称 + */ + private String placeName; + + /** + * 网格编码 + */ + private String gridCode; + + /** + * 网格名称 + */ + private String gridName; + + /** + * 楼栋编号 + */ + private String buildingCode; + + /** + * 楼栋名称 + */ + private String buildingName; + + /** + * 单元编码 + */ + private String unitCode; + + /** + * 单元名称 + */ + private String unitName; + + /** + * 房屋编码 + */ + private String homeCode; + + /** + * 房屋名称 + */ + private String homeName; + + /** + * 人员姓名 + */ + private String userName; + + /** + * 人员照片 + */ + private String userPic; + + /** + * 证件类型 + */ + private Integer identityType; + + /** + * 证件号码 + */ + private String idcard; + + /** + * 联系电话 + */ + private String phone; + + /** + * 关爱人员标签 + */ + private Integer caringLabel; + + /** + * 近期出现时间 + */ + private Long lastTime; + + /** + * 至今离开天数 + */ + private Integer leaveDays; + + /** + * 创建时间 + */ + private Date createtime; + + /** + * 创建者 + */ + private Integer createby; + + /** + * 更新时间 + */ + private Date updatetime; + + /** + * 更新者 + */ + private Integer updateby; + + /** + * 0:不活跃,1:活跃 + */ + private Integer isactive; + + /** + * 扩展字段c1 + */ + private String c1; + + /** + * 扩展字段c2 + */ + private String c2; + + /** + * 扩展字段c3 + */ + private String c3; + + /** + * 扩展字段c4 + */ + private String c4; + + /** + * 扩展字段c5 + */ + private String c5; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/ssf/mysqloracletest/mapper/ModelLongtimeinUserInfoMapper.java b/src/main/java/com/ssf/mysqloracletest/mapper/ModelLongtimeinUserInfoMapper.java new file mode 100644 index 0000000..f44d455 --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/mapper/ModelLongtimeinUserInfoMapper.java @@ -0,0 +1,21 @@ +package com.ssf.mysqloracletest.mapper; + +import com.ssf.mysqloracletest.domain.ModelLongtimeinUserInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author 28758 +* @description 针对表【model_longtimein_user_info(久居未出住户信息表)】的数据库操作Mapper +* @createDate 2024-03-21 09:47:58 +* @Entity com.ssf.mysqloracletest.domain.ModelLongtimeinUserInfo +*/ +@Mapper +public interface ModelLongtimeinUserInfoMapper extends BaseMapper { + + public void cleanModelLongtimeinUserInfo(); +} + + + + diff --git a/src/main/java/com/ssf/mysqloracletest/mapper/ModelLongtimeoutUserInfoMapper.java b/src/main/java/com/ssf/mysqloracletest/mapper/ModelLongtimeoutUserInfoMapper.java new file mode 100644 index 0000000..04e3768 --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/mapper/ModelLongtimeoutUserInfoMapper.java @@ -0,0 +1,21 @@ +package com.ssf.mysqloracletest.mapper; + +import com.ssf.mysqloracletest.domain.ModelLongtimeoutUserInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author 28758 +* @description 针对表【model_longtimeout_user_info(久出未归住户信息表)】的数据库操作Mapper +* @createDate 2024-03-21 09:48:19 +* @Entity com.ssf.mysqloracletest.domain.ModelLongtimeoutUserInfo +*/ +@Mapper +public interface ModelLongtimeoutUserInfoMapper extends BaseMapper { + + void cleanModelLongtimeoutUserInfo(); +} + + + + diff --git a/src/main/java/com/ssf/mysqloracletest/service/ModelLongtimeinUserInfoService.java b/src/main/java/com/ssf/mysqloracletest/service/ModelLongtimeinUserInfoService.java new file mode 100644 index 0000000..ab5e9af --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/service/ModelLongtimeinUserInfoService.java @@ -0,0 +1,13 @@ +package com.ssf.mysqloracletest.service; + +import com.ssf.mysqloracletest.domain.ModelLongtimeinUserInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author 28758 +* @description 针对表【model_longtimein_user_info(久居未出住户信息表)】的数据库操作Service +* @createDate 2024-03-21 09:47:58 +*/ +public interface ModelLongtimeinUserInfoService extends IService { + +} diff --git a/src/main/java/com/ssf/mysqloracletest/service/ModelLongtimeoutUserInfoService.java b/src/main/java/com/ssf/mysqloracletest/service/ModelLongtimeoutUserInfoService.java new file mode 100644 index 0000000..902cb11 --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/service/ModelLongtimeoutUserInfoService.java @@ -0,0 +1,13 @@ +package com.ssf.mysqloracletest.service; + +import com.ssf.mysqloracletest.domain.ModelLongtimeoutUserInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author 28758 +* @description 针对表【model_longtimeout_user_info(久出未归住户信息表)】的数据库操作Service +* @createDate 2024-03-21 09:48:19 +*/ +public interface ModelLongtimeoutUserInfoService extends IService { + +} diff --git a/src/main/java/com/ssf/mysqloracletest/service/impl/ModelLongtimeinUserInfoServiceImpl.java b/src/main/java/com/ssf/mysqloracletest/service/impl/ModelLongtimeinUserInfoServiceImpl.java new file mode 100644 index 0000000..f78eeaf --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/service/impl/ModelLongtimeinUserInfoServiceImpl.java @@ -0,0 +1,24 @@ +package com.ssf.mysqloracletest.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ssf.mysqloracletest.domain.ModelLongtimeinUserInfo; +import com.ssf.mysqloracletest.service.ModelLongtimeinUserInfoService; +import com.ssf.mysqloracletest.mapper.ModelLongtimeinUserInfoMapper; +import org.springframework.stereotype.Service; + +/** +* @author 28758 +* @description 针对表【model_longtimein_user_info(久居未出住户信息表)】的数据库操作Service实现 +* @createDate 2024-03-21 09:47:58 +*/ +@Service +@DS("mysql") +public class ModelLongtimeinUserInfoServiceImpl extends ServiceImpl + implements ModelLongtimeinUserInfoService{ + +} + + + + diff --git a/src/main/java/com/ssf/mysqloracletest/service/impl/ModelLongtimeoutUserInfoServiceImpl.java b/src/main/java/com/ssf/mysqloracletest/service/impl/ModelLongtimeoutUserInfoServiceImpl.java new file mode 100644 index 0000000..ce41b9f --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/service/impl/ModelLongtimeoutUserInfoServiceImpl.java @@ -0,0 +1,24 @@ +package com.ssf.mysqloracletest.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ssf.mysqloracletest.domain.ModelLongtimeoutUserInfo; +import com.ssf.mysqloracletest.service.ModelLongtimeoutUserInfoService; +import com.ssf.mysqloracletest.mapper.ModelLongtimeoutUserInfoMapper; +import org.springframework.stereotype.Service; + +/** +* @author 28758 +* @description 针对表【model_longtimeout_user_info(久出未归住户信息表)】的数据库操作Service实现 +* @createDate 2024-03-21 09:48:19 +*/ +@Service +@DS("mysql") +public class ModelLongtimeoutUserInfoServiceImpl extends ServiceImpl + implements ModelLongtimeoutUserInfoService{ + +} + + + + diff --git a/src/main/java/com/ssf/mysqloracletest/task/ModelLongtimeinUserTask.java b/src/main/java/com/ssf/mysqloracletest/task/ModelLongtimeinUserTask.java new file mode 100644 index 0000000..6009c1c --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/task/ModelLongtimeinUserTask.java @@ -0,0 +1,168 @@ +package com.ssf.mysqloracletest.task; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.ssf.mysqloracletest.domain.BasePlaceInfo; +import com.ssf.mysqloracletest.domain.BaseUserInfo; +import com.ssf.mysqloracletest.domain.ModelLongtimeinUserInfo; +import com.ssf.mysqloracletest.domain.TransitUserRecord; +import com.ssf.mysqloracletest.mapper.ModelLongtimeinUserInfoMapper; +import com.ssf.mysqloracletest.service.BasePlaceInfoService; +import com.ssf.mysqloracletest.service.BaseUserInfoService; +import com.ssf.mysqloracletest.service.ModelLongtimeinUserInfoService; +import com.ssf.mysqloracletest.service.TransitUserRecordService; +import com.ssf.mysqloracletest.utils.ConfigParam; +import com.ssf.mysqloracletest.utils.DateTool; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@RequiredArgsConstructor +public class ModelLongtimeinUserTask { + + private static final Logger logger = LoggerFactory.getLogger(ModelLongtimeinUserTask.class); + + @Resource + DateTool dateTool; + + private final BasePlaceInfoService basePlaceInfoService; + + private final ModelLongtimeinUserInfoMapper modelLongtimeinUserInfoMapper; + + private final ModelLongtimeinUserInfoService modelLongtimeinUserInfoService; + + private final BaseUserInfoService baseUserInfoService; + + private final TransitUserRecordService transitUserRecordService; + + + @Scheduled(initialDelay = 100, fixedDelay = 3000) +// @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨执行 + public void goalPersonLongTimeNotOut() { + + if (!"true".equals(ConfigParam.PersonLongTimeNotOutSwitch)) { + return; + } + String nearlyDays = "30"; + String inDays = "30"; + logger.info("goalPersonLongTimeNotOut 人员分析 久居未出住户 nearlyDays:" + nearlyDays + ", inDays:" + inDays + ", threadName:" + Thread.currentThread().getName()); + if (StringUtils.isBlank(nearlyDays) || StringUtils.isBlank(inDays)) { + return; + } + try { + Integer.parseInt(inDays); + Integer.parseInt(nearlyDays); + nearlyDays = nearlyDays.trim(); + } catch (Exception ex) { + return; + } + List villageBaseInfos = basePlaceInfoService.queryVillageInfos(); + if (CollectionUtils.isEmpty(villageBaseInfos)) { + return; + } + long inDaysLong = Integer.parseInt(inDays) * 24 * 60 * 60L; + // 清空临时结果表为入数据做准备 + modelLongtimeinUserInfoMapper.cleanModelLongtimeinUserInfo(); + + String villageCode = ""; + for (BasePlaceInfo villageBaseInfo : villageBaseInfos) { + villageCode = villageBaseInfo.getPlaceCode(); + if (StringUtils.isBlank(villageCode)) { + continue; + } + List villageUserInfos = queryVillageUserInfos(villageCode); + if (CollectionUtils.isEmpty(villageUserInfos)) { + return; + } + List modelLongtimeInUserInfos = new ArrayList<>(); + for (BaseUserInfo villageUserInfo : villageUserInfos) { + if (StringUtils.isBlank(villageUserInfo.getIdCard())) { + continue; + } + // 1.查询人脸抓拍记录表最新一条(方向字段非2) + Map map = new HashMap<>(); + map.put("startTime", dateTool.getDayStart(Integer.parseInt(nearlyDays))); + map.put("endTime", dateTool.getDayEnd(1)); + map.put("placeCode", villageCode); + map.put("idCard", villageUserInfo.getIdCard()); + List villageUserRecords = transitUserRecordService + .lambdaQuery().eq(TransitUserRecord::getIdCard,villageUserInfo.getIdCard()) + .eq(TransitUserRecord::getPlaceCode,villageCode) + .between(TransitUserRecord::getPartitionField,dateTool.getDayStart(Integer.parseInt(nearlyDays)),dateTool.getDayEnd(1)) + .orderByDesc(TransitUserRecord::getPassTime) + .list(); + try { + if (CollectionUtils.isNotEmpty(villageUserRecords)) { + TransitUserRecord villageUserRecord = villageUserRecords.get(0); + if (null == villageUserRecord.getDirection() || villageUserRecord.getDirection() != 2) { + if (System.currentTimeMillis() / 1000 - villageUserRecord.getPassTime() - inDaysLong > 0) { + ModelLongtimeinUserInfo modelLongtimeinUserInfo = new ModelLongtimeinUserInfo(); + modelLongtimeinUserInfo.setPlaceCode(villageUserInfo.getPlaceCode()); + modelLongtimeinUserInfo.setPlaceName(villageUserInfo.getPlaceName()); + modelLongtimeinUserInfo.setGridCode(villageUserInfo.getGridCode()); + modelLongtimeinUserInfo.setGridName(villageUserInfo.getGridName()); + modelLongtimeinUserInfo.setBuildingCode(villageUserInfo.getBuildingCode()); + modelLongtimeinUserInfo.setBuildingName(villageUserInfo.getBuildingName()); + modelLongtimeinUserInfo.setUnitCode(villageUserInfo.getUnitCode()); + modelLongtimeinUserInfo.setUnitName(villageUserInfo.getUnitName()); + modelLongtimeinUserInfo.setHomeCode(villageUserInfo.getHomeCode()); + modelLongtimeinUserInfo.setHomeName(villageUserInfo.getHomeName()); + modelLongtimeinUserInfo.setUserName(villageUserInfo.getUserName()); + modelLongtimeinUserInfo.setUserPic(villageUserRecord.getGlobalPic()); + modelLongtimeinUserInfo.setIdcard(villageUserInfo.getIdCard()); + modelLongtimeinUserInfo.setPhone(villageUserInfo.getPhone()); + modelLongtimeinUserInfo.setLastTime(villageUserRecord.getPassTime()); + modelLongtimeinUserInfo.setHomeDays(getInOutDays(villageUserRecord.getPassTime())); + modelLongtimeinUserInfo.setC1(villageUserRecord.getDeviceAddress()); + modelLongtimeInUserInfos.add(modelLongtimeinUserInfo); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + // 3.久居未出住户入库 + if (modelLongtimeInUserInfos.size() > 0) { + for (ModelLongtimeinUserInfo modelLongtimeinUserInfo : modelLongtimeInUserInfos){ + modelLongtimeinUserInfoService.save(modelLongtimeinUserInfo); + } + } + villageUserInfos.clear(); + modelLongtimeInUserInfos.clear(); + } + logger.info("goalPersonLongTimeNotOut 人员分析 久居未出住户 结束, 时间:" + dateTool.getDateTime(System.currentTimeMillis() / 1000)); + } + + private List queryVillageUserInfos(String villageCode) { + BaseUserInfo villageUserInfo = new BaseUserInfo(); + villageUserInfo.setPlaceCode(villageCode); + List villageUserInfos = baseUserInfoService.lambdaQuery() + .isNotNull(BaseUserInfo::getIdCard) + .eq(BaseUserInfo::getPlaceCode,villageCode).list(); + if (CollectionUtils.isEmpty(villageUserInfos)) { + return new ArrayList<>(); + } + return villageUserInfos; + } + + public int getInOutDays(long time) { + int l = Integer.parseInt(String.valueOf((System.currentTimeMillis() / 1000 - time))); + int r = l % (3600 * 24); + l = l / (3600 * 24); + if (r > 0) { + return (l + 1); + } else { + return l; + } + } +} diff --git a/src/main/java/com/ssf/mysqloracletest/task/ModelLongtimeoutUserTask.java b/src/main/java/com/ssf/mysqloracletest/task/ModelLongtimeoutUserTask.java new file mode 100644 index 0000000..53f9e9d --- /dev/null +++ b/src/main/java/com/ssf/mysqloracletest/task/ModelLongtimeoutUserTask.java @@ -0,0 +1,171 @@ +package com.ssf.mysqloracletest.task; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.ssf.mysqloracletest.domain.BasePlaceInfo; +import com.ssf.mysqloracletest.domain.BaseUserInfo; +import com.ssf.mysqloracletest.domain.ModelLongtimeoutUserInfo; +import com.ssf.mysqloracletest.domain.TransitUserRecord; +import com.ssf.mysqloracletest.mapper.ModelLongtimeoutUserInfoMapper; +import com.ssf.mysqloracletest.service.BasePlaceInfoService; +import com.ssf.mysqloracletest.service.BaseUserInfoService; +import com.ssf.mysqloracletest.service.ModelLongtimeoutUserInfoService; +import com.ssf.mysqloracletest.service.TransitUserRecordService; +import com.ssf.mysqloracletest.utils.ConfigParam; +import com.ssf.mysqloracletest.utils.DateTool; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@RequiredArgsConstructor +public class ModelLongtimeoutUserTask { + + private static final Logger logger = LoggerFactory.getLogger(ModelLongtimeoutUserTask.class); + + @Resource + DateTool dateTool; + + private final BasePlaceInfoService basePlaceInfoService; + + private final BaseUserInfoService baseUserInfoService; + + private final TransitUserRecordService transitUserRecordService; + + private final ModelLongtimeoutUserInfoService modelLongtimeoutUserInfoService; + + private final ModelLongtimeoutUserInfoMapper modelLongtimeoutUserInfoMapper; + + @Scheduled(initialDelay = 100, fixedDelay = 3000) +// @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨执行 + public void goalPersonLongTimeNotBack() { + + if (!"true".equals(ConfigParam.PersonLongTimeNotBackSwitch)) { + return; + } + String nearlyDays = "30"; + String leaveDays = "30"; + + logger.info("goalPersonLongTimeNotBack 人员分析 久出未归住户 nearlyDays:" + nearlyDays + ", leaveDays:" + leaveDays + ", threadName:" + Thread.currentThread().getName()); + if (StringUtils.isBlank(nearlyDays) + || StringUtils.isBlank(leaveDays)) { + return; + } + try { + Integer.parseInt(leaveDays); + Integer.parseInt(nearlyDays); + nearlyDays = nearlyDays.trim(); + } catch (Exception ex) { + return; + } + List villageBaseInfos = basePlaceInfoService.queryVillageInfos(); + if (CollectionUtils.isEmpty(villageBaseInfos)) { + return; + } + long leaveDaysLong = Integer.parseInt(leaveDays) * 24 * 60 * 60L; + //清空临时结果表为入数据做准备 + modelLongtimeoutUserInfoMapper.cleanModelLongtimeoutUserInfo(); + + String villageCode = ""; + for (BasePlaceInfo villageBaseInfo : villageBaseInfos) { + villageCode = villageBaseInfo.getPlaceCode(); + if (StringUtils.isBlank(villageCode)) { + continue; + } + List villageUserInfos = queryVillageUserInfos(villageCode); + if (CollectionUtils.isEmpty(villageUserInfos)) { + return; + } + List modelLongtimeOutUserInfos = new ArrayList<>(); + for (BaseUserInfo villageUserInfo : villageUserInfos) { + if (StringUtils.isBlank(villageUserInfo.getIdCard())) { + continue; + } + // 1.查询人脸抓拍记录表最新一条(方向字段没有的不算) + Map map = new HashMap<>(); + map.put("startTime", dateTool.getDayStart(Integer.parseInt(nearlyDays))); + map.put("endTime", dateTool.getDayEnd(1)); + map.put("villageCode", villageCode); + map.put("idCard", villageUserInfo.getIdCard()); + //根据身份证号查询一条最新有进出的抓拍数据 + List villageUserRecords = transitUserRecordService + .lambdaQuery().eq(TransitUserRecord::getIdCard,villageUserInfo.getIdCard()) + .eq(TransitUserRecord::getPlaceCode,villageCode) + .between(TransitUserRecord::getPartitionField,dateTool.getDayStart(Integer.parseInt(nearlyDays)),dateTool.getDayEnd(1)) + .orderByDesc(TransitUserRecord::getPassTime) + .list(); + try { + if (CollectionUtils.isNotEmpty(villageUserRecords)) { + TransitUserRecord villageUserRecord = villageUserRecords.get(0); + //获取最新一条,如果方向为出,则进一步模型分析(久出未归) + if (null == villageUserRecord.getDirection() || villageUserRecord.getDirection() != 1) { + if (System.currentTimeMillis() / 1000 - villageUserRecord.getPassTime() - leaveDaysLong > 0) { + ModelLongtimeoutUserInfo modelLongtimeoutUserInfo = new ModelLongtimeoutUserInfo(); + modelLongtimeoutUserInfo.setPlaceCode(villageUserInfo.getPlaceCode()); + modelLongtimeoutUserInfo.setPlaceName(villageUserInfo.getPlaceName()); + modelLongtimeoutUserInfo.setGridCode(villageUserInfo.getGridCode()); + modelLongtimeoutUserInfo.setGridName(villageUserInfo.getGridName()); + modelLongtimeoutUserInfo.setBuildingCode(villageUserInfo.getBuildingCode()); + modelLongtimeoutUserInfo.setBuildingName(villageUserInfo.getBuildingName()); + modelLongtimeoutUserInfo.setUnitCode(villageUserInfo.getUnitCode()); + modelLongtimeoutUserInfo.setUnitName(villageUserInfo.getUnitName()); + modelLongtimeoutUserInfo.setHomeCode(villageUserInfo.getHomeCode()); + modelLongtimeoutUserInfo.setHomeName(villageUserInfo.getHomeName()); + modelLongtimeoutUserInfo.setUserName(villageUserInfo.getUserName()); + modelLongtimeoutUserInfo.setUserPic(villageUserRecord.getGlobalPic()); + modelLongtimeoutUserInfo.setIdcard(villageUserInfo.getIdCard()); + modelLongtimeoutUserInfo.setPhone(villageUserInfo.getPhone()); + modelLongtimeoutUserInfo.setLastTime(villageUserRecord.getPassTime()); + modelLongtimeoutUserInfo.setLeaveDays(getInOutDays(villageUserRecord.getPassTime())); + modelLongtimeoutUserInfo.setC1(villageUserRecord.getDeviceAddress()); + modelLongtimeOutUserInfos.add(modelLongtimeoutUserInfo); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + // 3.久出未归住户入库 + if (modelLongtimeOutUserInfos.size() > 0) { + for (ModelLongtimeoutUserInfo modelLongtimeoutUserInfo : modelLongtimeOutUserInfos){ + modelLongtimeoutUserInfoService.save(modelLongtimeoutUserInfo); + } + } + villageUserInfos.clear(); + modelLongtimeOutUserInfos.clear(); + } + logger.info("goalPersonLongTimeNotBack 人员分析 久出未归住户 结束, 时间:" + dateTool.getDateTime(System.currentTimeMillis() / 1000)); + } + + private List queryVillageUserInfos(String villageCode) { + BaseUserInfo villageUserInfo = new BaseUserInfo(); + villageUserInfo.setPlaceCode(villageCode); + List villageUserInfos = baseUserInfoService.lambdaQuery() + .isNotNull(BaseUserInfo::getIdCard) + .eq(BaseUserInfo::getPlaceCode,villageCode).list(); + if (CollectionUtils.isEmpty(villageUserInfos)) { + return new ArrayList<>(); + } + return villageUserInfos; + } + + public int getInOutDays(long time) { + int l = Integer.parseInt(String.valueOf((System.currentTimeMillis() / 1000 - time))); + int r = l % (3600 * 24); + l = l / (3600 * 24); + if (r > 0) { + return (l + 1); + } else { + return l; + } + } +} diff --git a/src/main/java/com/ssf/mysqloracletest/task/NotFoundUserTask.java b/src/main/java/com/ssf/mysqloracletest/task/NotFoundUserTask.java index 9449aa9..8eb9dc3 100644 --- a/src/main/java/com/ssf/mysqloracletest/task/NotFoundUserTask.java +++ b/src/main/java/com/ssf/mysqloracletest/task/NotFoundUserTask.java @@ -33,7 +33,7 @@ import java.util.Map; public class NotFoundUserTask { - private static final Logger logger = LoggerFactory.getLogger(AlarmInfoTask.class); + private static final Logger logger = LoggerFactory.getLogger(NotFoundUserTask.class); @Resource DateTool dateTool; diff --git a/src/main/java/com/ssf/mysqloracletest/utils/ConfigParam.java b/src/main/java/com/ssf/mysqloracletest/utils/ConfigParam.java index 561bbaf..4adb489 100644 --- a/src/main/java/com/ssf/mysqloracletest/utils/ConfigParam.java +++ b/src/main/java/com/ssf/mysqloracletest/utils/ConfigParam.java @@ -58,6 +58,8 @@ public class ConfigParam { public static String VehicleSwitch = PropertiesUtil.queryPropertiesByKey("VehicleSwitch"); public static String NotFoundUserTaskSwitch = PropertiesUtil.queryPropertiesByKey("NotFoundUserTaskSwitch"); public static String PersonSuspectedTaskSwitch = PropertiesUtil.queryPropertiesByKey("PersonSuspectedTaskSwitch"); + public static String PersonLongTimeNotOutSwitch = PropertiesUtil.queryPropertiesByKey("PersonLongTimeNotOutSwitch"); + public static String PersonLongTimeNotBackSwitch = PropertiesUtil.queryPropertiesByKey("PersonLongTimeNotBackSwitch"); } diff --git a/src/main/resources/mapper/ModelLongtimeinUserInfoMapper.xml b/src/main/resources/mapper/ModelLongtimeinUserInfoMapper.xml new file mode 100644 index 0000000..b90a607 --- /dev/null +++ b/src/main/resources/mapper/ModelLongtimeinUserInfoMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,place_code,place_name, + grid_code,grid_name,building_code, + building_name,unit_code,unit_name, + home_code,home_name,user_name, + user_pic,identity_type,idcard, + phone,caring_label,last_time, + home_days,createtime,createby, + updatetime,updateby,isactive, + c1,c2,c3, + c4,c5 + + + + truncate table model_longtimein_user_info + + diff --git a/src/main/resources/mapper/ModelLongtimeoutUserInfoMapper.xml b/src/main/resources/mapper/ModelLongtimeoutUserInfoMapper.xml new file mode 100644 index 0000000..ec88142 --- /dev/null +++ b/src/main/resources/mapper/ModelLongtimeoutUserInfoMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,place_code,place_name, + grid_code,grid_name,building_code, + building_name,unit_code,unit_name, + home_code,home_name,user_name, + user_pic,identity_type,idcard, + phone,caring_label,last_time, + leave_days,createtime,createby, + updatetime,updateby,isactive, + c1,c2,c3, + c4,c5 + + + + truncate table model_longtimeout_user_info + + +