commit 8f1ef834a133d0ba169a33e3130c49d1ae884658 Author: kami <605128600@qq.com> Date: Mon Nov 25 10:52:24 2024 +0800 first commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..d58dfb7 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..19529dd --- /dev/null +++ b/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..249bdf3 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..570fbbc --- /dev/null +++ b/pom.xml @@ -0,0 +1,237 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.4 + + + com.biutag + supervision-data + 1.0.0 + supervision-data + 数字督察 数据同步 + + + 21 + + + + + SpringCloudRepo + SpringCloudRepo + https://repo.spring.io/milestone + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + + AsposeJavaAPI + Aspose Java API + https://repository.aspose.com/repo/ + + + maven2 + maven2 + https://repo1.maven.org/maven2 + + + meethour + meethour + https://repo.meethour.io/maven/releases/ + + + + + + cn.hutool + hutool-core + 5.8.29 + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + com.jayway.jsonpath + json-path + + + + + com.jayway.jsonpath + json-path + 2.9.0 + test + + + com.mysql + mysql-connector-j + runtime + + + org.springframework.boot + spring-boot-starter-jdbc + + + commons-codec + commons-codec + + + io.projectreactor + reactor-test + test + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.apache.commons + commons-pool2 + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.7 + + + + + + + + + + + + + commons-io + commons-io + 2.17.0 + + + org.springframework.security + spring-security-crypto + + + com.gbase + gbase-jdbc + 8.3.81.53-build55.2.1-bin + + + + org.projectlombok + lombok + 1.18.30 + + + com.alibaba.fastjson2 + fastjson2 + 2.0.45 + compile + + + org.jetbrains + annotations + 24.0.1 + compile + + + org.apache.commons + commons-lang3 + 3.13.0 + + + org.springframework + spring-context-indexer + true + + + org.springframework.retry + spring-retry + + + org.springframework.boot + spring-boot-starter-aop + + + net.logstash.logback + logstash-logback-encoder + 4.9 + + + + + ${project.artifactId} + + + + src/main/resources + false + + + src/main/resources + + application.yml + + true + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.3.1 + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + + true + + + + org.springframework.boot + spring-boot-maven-plugin + 3.3.0 + + + + repackage + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + true + 21 + 21 + + + + + + diff --git a/src/main/java/com/biutag/supervisiondata/SupervisionDataApplication.java b/src/main/java/com/biutag/supervisiondata/SupervisionDataApplication.java new file mode 100644 index 0000000..91b962d --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/SupervisionDataApplication.java @@ -0,0 +1,19 @@ +package com.biutag.supervisiondata; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.retry.annotation.EnableRetry; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.stereotype.Indexed; + +@Indexed +@EnableRetry +@EnableScheduling +@SpringBootApplication +public class SupervisionDataApplication { + + public static void main(String[] args) { + SpringApplication.run(SupervisionDataApplication.class, args); + } + +} diff --git a/src/main/java/com/biutag/supervisiondata/common/exception/BusinessException.java b/src/main/java/com/biutag/supervisiondata/common/exception/BusinessException.java new file mode 100644 index 0000000..d9221f9 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/exception/BusinessException.java @@ -0,0 +1,56 @@ +package com.biutag.supervisiondata.common.exception; + +import com.biutag.supervisiondata.common.response.StatusCode; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 业务异常 + * + * @author kami + * @since 12:02 2021/1/8 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class BusinessException extends RuntimeException { + + /** + * 错误码 + */ + private int statusCode; + /** + * 重定向的路径 + */ + private String url; + + @Serial + private static final long serialVersionUID = 1L; + + public BusinessException(StatusCode statusCode) { + super(); + this.statusCode = statusCode.getCode(); + } + + public BusinessException(StatusCode statusCode, Throwable throwable) { + super(throwable); + this.statusCode = statusCode.getCode(); + } + + public BusinessException(StatusCode statusCode, String message) { + super(message); + this.statusCode = statusCode.getCode(); + } + + public BusinessException(StatusCode statusCode, String message, String url) { + super(message); + this.statusCode = statusCode.getCode(); + this.url = url; + } + + public BusinessException(StatusCode statusCode, String message, Throwable throwable) { + super(message, throwable); + this.statusCode = statusCode.getCode(); + } +} diff --git a/src/main/java/com/biutag/supervisiondata/common/interfaces/AssertInterface.java b/src/main/java/com/biutag/supervisiondata/common/interfaces/AssertInterface.java new file mode 100644 index 0000000..c967b20 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/interfaces/AssertInterface.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.common.interfaces; + +/** + * @author kami + * @version 1.0 + * @since 2022/7/8 13:50 + */ +@FunctionalInterface +public interface AssertInterface { + + void run(String str); +} diff --git a/src/main/java/com/biutag/supervisiondata/common/interfaces/AssertObjInterface.java b/src/main/java/com/biutag/supervisiondata/common/interfaces/AssertObjInterface.java new file mode 100644 index 0000000..5e3c1c1 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/interfaces/AssertObjInterface.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.common.interfaces; + +/** + * @author kami + * @version 1.0 + * @since 2022/12/20 11:36 + */ +@FunctionalInterface +public interface AssertObjInterface { + + T run(String str); +} diff --git a/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureMine.java b/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureMine.java new file mode 100644 index 0000000..d1e39c9 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureMine.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.common.interfaces; + +/** + * @author kami + * @version 1.0 + * @since 2021/11/22 17:37 + */ +@FunctionalInterface +public interface CompletableFutureMine { + + void run(); + +} diff --git a/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureResult.java b/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureResult.java new file mode 100644 index 0000000..a261cfa --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureResult.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.common.interfaces; + +/** + * @author kami + * @version 1.0 + * @since 2021/11/22 17:37 + */ +@FunctionalInterface +public interface CompletableFutureResult { + + Boolean run(); + +} diff --git a/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureType.java b/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureType.java new file mode 100644 index 0000000..daa6411 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureType.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.common.interfaces; + +/** + * @author kami + * @version 1.0 + * @since 2021/11/22 17:37 + */ +@FunctionalInterface +public interface CompletableFutureType { + + T run(); + +} diff --git a/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureUtil.java b/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureUtil.java new file mode 100644 index 0000000..43626a8 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/interfaces/CompletableFutureUtil.java @@ -0,0 +1,173 @@ +package com.biutag.supervisiondata.common.interfaces; + + +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +/** + * @author kami + * @version 1.0 + * @since 2021/11/22 17:39 + */ +@Slf4j +public class CompletableFutureUtil { + + private CompletableFutureUtil(){} + + public static final String TRACE_ID = "trace_id"; + + private static void run(CompletableFutureMine completableFutureMine, Map previous) { + if (previous == null) { + MDC.clear(); + } else { + MDC.setContextMap(previous); + } + if (MDC.get(TRACE_ID) == null || MDC.get(TRACE_ID).isEmpty()) { + MDC.put(TRACE_ID, System.nanoTime() + ""); + } + completableFutureMine.run(); + MDC.clear(); + } + + private static Boolean runResult(CompletableFutureResult result, Map previous) { + if (previous == null) { + MDC.clear(); + } else { + MDC.setContextMap(previous); + } + if (MDC.get(TRACE_ID) == null || MDC.get(TRACE_ID).isEmpty()) { + MDC.put(TRACE_ID, System.nanoTime() + ""); + } + Boolean rs = result.run(); + MDC.clear(); + return rs; + } + + public static void runSync(CompletableFutureMine completableFutureMine) { + Map previous = MDC.getCopyOfContextMap(); + CompletableFuture.runAsync(() -> run(completableFutureMine, previous)).exceptionally(e -> { + log.error("",e); + MDC.clear(); + return null; + }); + } + + public static void runSyncVirtual(CompletableFutureMine completableFutureMine) { + Map previous = MDC.getCopyOfContextMap(); + CompletableFuture.runAsync(() -> run(completableFutureMine, previous), Executors.newVirtualThreadPerTaskExecutor()).exceptionally(e -> { + log.error("",e); + MDC.clear(); + return null; + }); + } + + public static CompletableFuture runSyncObject(CompletableFutureMine completableFutureMine) { + Map previous = MDC.getCopyOfContextMap(); + return CompletableFuture.runAsync(() -> { + if (previous == null) { + MDC.clear(); + } else { + MDC.setContextMap(previous); + } + if (MDC.get(TRACE_ID) == null || MDC.get(TRACE_ID).isEmpty()) { + MDC.put(TRACE_ID, System.nanoTime() + ""); + } + run(completableFutureMine, previous); + MDC.clear(); + }).exceptionally(e -> { + log.error("",e); + MDC.clear(); + return null; + }); + } + + public static void run(CompletableFutureMine completableFutureMine) { + Map previous = MDC.getCopyOfContextMap(); + CompletableFuture.runAsync(() -> run(completableFutureMine, previous)).exceptionally(e -> { + log.error("",e); + MDC.clear(); + return null; + }).join(); + } + + public static void runSyncEach(CompletableFutureResult result, Long time) { + Map previous = MDC.getCopyOfContextMap(); + CompletableFuture.runAsync(() -> { + Boolean goOn = true; + while (Boolean.TRUE.equals(goOn)) { + try { + TimeUnit.SECONDS.sleep(time); + } catch (InterruptedException e) { + log.error("",e); + Thread.currentThread().interrupt(); + } + goOn = runResult(result, previous); + } + }).exceptionally(e -> { + log.error("",e); + MDC.clear(); + return null; + }); + } + + public static void runSyncEach(CompletableFutureResult result, Executor ex, Long time) { + Map previous = MDC.getCopyOfContextMap(); + CompletableFuture.runAsync(() -> { + Boolean goOn = true; + while (goOn) { + try { + TimeUnit.SECONDS.sleep(time); + } catch (InterruptedException e) { + log.error("",e); + Thread.currentThread().interrupt(); + } + goOn = runResult(result, previous); + } + }, ex).exceptionally(e -> { + log.error("",e); + MDC.clear(); + return null; + }); + } + + public static void runSync(CompletableFutureMine completableFutureMine, Executor ex) { + Map previous = MDC.getCopyOfContextMap(); + CompletableFuture.runAsync(() -> run(completableFutureMine, previous), ex).exceptionally(e -> { + log.error("", e); + MDC.clear(); + return null; + }); + } + + public static void runSyncAssert(Boolean assets, CompletableFutureMine completableFutureMine) { + if(Boolean.TRUE.equals(assets)) { + CompletableFuture.runAsync(completableFutureMine::run).exceptionally(e -> { + log.error("",e); + return null; + }); + } + } + + public static CompletableFuture createRunner(CompletableFutureType completableFutureType) { + Map previous = MDC.getCopyOfContextMap(); + return CompletableFuture.supplyAsync(() -> { + if (previous == null) { + MDC.clear(); + } else { + MDC.setContextMap(previous); + } + if (MDC.get(TRACE_ID) == null || MDC.get(TRACE_ID).isEmpty()) { + MDC.put(TRACE_ID, System.nanoTime() + ""); + } + T t = completableFutureType.run(); + MDC.clear(); + return t; + }); + } +} diff --git a/src/main/java/com/biutag/supervisiondata/common/response/RS.java b/src/main/java/com/biutag/supervisiondata/common/response/RS.java new file mode 100644 index 0000000..3a2136b --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/response/RS.java @@ -0,0 +1,131 @@ +package com.biutag.supervisiondata.common.response; + +import com.biutag.supervisiondata.pojo.constants.ThreadConstants; +import com.biutag.supervisiondata.util.RandomUtil; +import lombok.Data; +import lombok.experimental.Accessors; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Optional; + +/** + * 统一返回 + * @author kami on 2023-03-02 17:52:16 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@Accessors(chain = true) +@Slf4j +public class RS implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + /** + * 状态码 + * @mock 200 + */ + + private Integer code; + + /** + * 响应信息 + * @mock 请求成功 + */ + private String msg; + /** + * 请求id + * @mock 7792667269210689 + */ + private String id; + /** + * 响应时间 + * @mock 1698039324139 + */ + private Long time; + + /** + * 数据 + */ + private T data; + + /** + * 构建基础 带id、时间戳 + * @return RS + */ + private static RS basic() { + return new RS().setId(Optional.ofNullable(MDC.get(ThreadConstants.TRACE_ID)).orElse(RandomUtil.generateUpperString(8))).setTime(System.currentTimeMillis()); + } + + /** + * 加入状态码 + * @param code 状态码 + * @return RS + */ + private static RS coder(StatusCode code){ + RS rs = basic(); + return rs.setCode(code.getCode()); + } + + /** + * 成功响应 + * @return RS + */ + public static RS success() { + RS rs = coder(StatusCode.SUCCESS); + return rs.setMsg("成功"); + } + + /** + * 成功响应 + * @return RS + */ + public static RS success(T data) { + RS rs = success(); + return rs.setData(data); + } + + /** + * 失败响应 + * @return RS + */ + public static RS error() { + return error("逻辑异常"); + } + + /** + * 失败响应 + * @param msg 响应消息 + * @return RS + */ + public static RS error(String msg) { + RS rs = coder(StatusCode.BUSINESS); + return rs.setMsg(msg); + } + + /** + * 响应 + * @param code 状态码 + * @param msg 响应消息 + * @return RS + */ + public static RS build(StatusCode code,String msg) { + RS rs = coder(code); + return rs.setMsg(msg); + } + + /** + * 响应 + * @param code 状态码 + * @param msg 响应消息 + * @return RS + */ + public static RS build(StatusCode code,String msg,T data) { + RS rs = coder(code); + return rs.setMsg(msg).setData(data); + } + +} diff --git a/src/main/java/com/biutag/supervisiondata/common/response/StatusCode.java b/src/main/java/com/biutag/supervisiondata/common/response/StatusCode.java new file mode 100644 index 0000000..ef16b39 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/response/StatusCode.java @@ -0,0 +1,38 @@ +package com.biutag.supervisiondata.common.response; + +import lombok.Getter; + +/** + * 状态码 + */ +@Getter +public enum StatusCode { + SUCCESS(200),// OK 一切正常,对GET和POST请求的应答文档跟在后面。 + SUCCESS_INSERT(201), //新增或同本书籍已存在 + YOU_FAIL(100),//参数错误 + FAIL(0), + UN_AUTH(101), + RE_AUTH(333), // 需要二次权限校验 + DISABLE(402),// 没有权限 + NOT_AUTH(403),// 服务器无法正常提供信息,或是服务器无法回应 + METHOD_NOT_ALLOWED(405), + UNSUPPORTED_MEDIA_TYPE(415), //媒体类型 + SERVICE_UNAVAILABLE(503), + BAD_REQUEST(400),// Bad Request 请求出现语法错误。 + NOT_FOUND(404),// 服务器无法正常提供信息,或是服务器无法回应 + ERROR(500), //服务器遇到了意料不到的情况,不能完成客户的请求。 + BUSINESS(5000), //业务错误 + DIFF(600), //不一致异常。 + REDIRECT_PAGE(602), // 重定向页面 + DIFF_RESULT(601), // 队列 + SERVICE_FAIL(1000), // 服务器熔断。 + + UPLOADED(1), + UPLOADING(2); + + private final Integer code; + + StatusCode(Integer code) { + this.code = code; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/common/thread/GenericPool.java b/src/main/java/com/biutag/supervisiondata/common/thread/GenericPool.java new file mode 100644 index 0000000..e14e6cb --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/thread/GenericPool.java @@ -0,0 +1,46 @@ +package com.biutag.supervisiondata.common.thread; + +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * @author kami on 2023-10-19 10:05:00 + * @version 0.0.1 + * @since 1.8 + */ +public class GenericPool { + + private final BlockingQueue pool = new LinkedBlockingQueue<>(); + + /** + * 添加对象 + * @param object 对象 + */ + public void add(T object) { + pool.add(object); + } + + /** + * 初始化 + * @param objects 对象集合 + */ + public void init(List objects) { + pool.clear(); + pool.addAll(objects); + } + + /** + * 获取 + * @return T + */ + public T get() { + try { + T key = pool.take(); + add(key); + return key; + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/biutag/supervisiondata/common/thread/ThreadPoolConfig.java b/src/main/java/com/biutag/supervisiondata/common/thread/ThreadPoolConfig.java new file mode 100644 index 0000000..5b7b983 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/common/thread/ThreadPoolConfig.java @@ -0,0 +1,40 @@ +package com.biutag.supervisiondata.common.thread; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author kami + * @version 1.0 + * @since 2022/8/10 16:21 + */ +@Configuration +public class ThreadPoolConfig { + /** + * 自定义消费队列线程池 + * CallerRunsPolicy 这个策略重试添加当前的任务,他会自动重复调用 execute() 方法,直到成功。 + * AbortPolicy 对拒绝任务抛弃处理,并且抛出异常。 + * DiscardPolicy 对拒绝任务直接无声抛弃,没有异常信息。 + * DiscardOldestPolicy 对拒绝任务不抛弃,而是抛弃队列里面等待最久的一个线程,然后把拒绝任务加到队列。 + * @return 线程池对象 + */ + @Bean(value = "completeThread") + public ThreadPoolTaskExecutor completeThread() { + ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor(); + threadPool.setCorePoolSize(4); + threadPool.setMaxPoolSize(32); + // 最大线程数 + // 队列大小 + int queueSize = 100; + threadPool.setQueueCapacity(queueSize); + threadPool.setThreadNamePrefix("han-thread-"); + // 线程最大空闲时间 + int keepAliveSeconds = 100; + threadPool.setKeepAliveSeconds(keepAliveSeconds); + threadPool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return threadPool; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/config/cache/RedisConfig.java b/src/main/java/com/biutag/supervisiondata/config/cache/RedisConfig.java new file mode 100644 index 0000000..556fb89 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/config/cache/RedisConfig.java @@ -0,0 +1,89 @@ +package com.biutag.supervisiondata.config.cache; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.time.Duration; + +/** + * redis配置 + * + * @author kami + * @since 2020-12-24 + */ +@Configuration +public class RedisConfig { + + @Bean(name = "redisTemplate") + public RedisTemplate redisTemplate(@Value("${spring.data.redis.host}") String host, + @Value("${spring.data.redis.port}") Integer port, + @Value("${spring.data.redis.database}") Integer database, + @Value("${spring.data.redis.password}") String password, + @Value("${spring.data.redis.lettuce.pool.max-active}") int maxActive, + @Value("${spring.data.redis.lettuce.pool.max-wait}") int maxWait, + @Value("${spring.data.redis.lettuce.pool.max-idle}") int maxIdle, + @Value("${spring.data.redis.lettuce.pool.min-idle}") int minIdle) { + LettuceConnectionFactory connectionFactory = this.lettuceConnectionFactory(password,host,port,database, + maxActive, maxWait, maxIdle, minIdle); + return this.createRedisTemplate(connectionFactory); + } + + private RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(om, Object.class); + // 设置序列化Key的实例化对象 + template.setKeySerializer(new StringRedisSerializer()); + // 设置序列化Value的实例化对象 + template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + template.setHashKeySerializer(jackson2JsonRedisSerializer); + template.setHashValueSerializer(jackson2JsonRedisSerializer); + template.setConnectionFactory(redisConnectionFactory); + return template; + } + + /** + * lettuce 连接池工厂 + * + * @param password 密码 + * @param maxActive 连接池最大连接数(使用负值表示没有限制) 默认 8 + * @param maxWait 连接池最大阻塞等待时间(使用负值表示没有限制),当连接池资源耗尽时,调用者最大阻塞的时间,超时将跑出异常。单位,毫秒数;默认为-1.表示永不超时. + * @param maxIdle 连接池中的最大空闲的连接数,默认为8 + * @param minIdle 连接池中的最少空闲的连接数,默认为0 + */ + private LettuceConnectionFactory lettuceConnectionFactory(String password,String host,int port,int database, int maxActive, Integer maxWait, int maxIdle, int minIdle) { + RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(host,port); + redisStandaloneConfiguration.setPassword(password); + redisStandaloneConfiguration.setDatabase(database); + //线程池设置 + GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); + poolConfig.setMaxIdle(maxIdle); + poolConfig.setMaxTotal(maxActive); + poolConfig.setMinIdle(minIdle); + poolConfig.setMaxWait(Duration.ofSeconds(maxWait)); + LettuceClientConfiguration clientConfiguration = + LettucePoolingClientConfiguration.builder().poolConfig(poolConfig).build(); + LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration, clientConfiguration); + lettuceConnectionFactory.setShareNativeConnection(true); + lettuceConnectionFactory.afterPropertiesSet(); + return lettuceConnectionFactory; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/config/cache/RedisDao.java b/src/main/java/com/biutag/supervisiondata/config/cache/RedisDao.java new file mode 100644 index 0000000..c83d211 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/config/cache/RedisDao.java @@ -0,0 +1,505 @@ +package com.biutag.supervisiondata.config.cache; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.*; +import org.springframework.data.redis.support.atomic.RedisAtomicLong; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * @author kami + * @since 14:41 2020/11/24 + */ +@Data +@Slf4j +public class RedisDao { + + private static final RedisDao REDIS_DAO = new RedisDao(); + + private RedisTemplate redis; + + private RedisDao() { + } + + public void init(RedisTemplate redisTemplate) { + redis = redisTemplate; + } + + public static RedisDao getInstance() { + return REDIS_DAO; + } + + /** + * 批量插入key,会替换已经存在key的value,三种方式批量插入:mset pinpile管道 lua表达式 + * + * @param map key:对应的reids的key, value:对应每个key的value + * 示例:MSET key1 "Hello" key2 "World + */ + public void mset(Map map) { + redis.opsForValue().multiSet(map); + } + + public Boolean persist(String key) { + return redis.persist(key); + } + + public void pipeLineExec(RedisInterface redisInterface) { + redis.executePipelined((RedisCallback) connection -> { + connection.openPipeline(); + redisInterface.run(connection, redis.getKeySerializer(), redis.getValueSerializer()); + connection.close(); + return null; + }); + } + + /** + * 获取整个list + */ + public List list(String key) { + return redis.boundListOps(key).range(0, -1); + } + + /** + * 获取list大小 + */ + public long listSize(String key) { + return redis.boundListOps(key).size(); + } + + /** + * 获取list指定下表对象 + */ + public Object listIndex(String key, long index) { + return redis.boundListOps(key).index(index); + } + + + /** + * 从right存入list的一个值 + */ + public void rightPush(String key, Object value) { + redis.boundListOps(key).rightPush(value); + } + + public List pipelinGet(String... keys) { + return redis.executePipelined((RedisCallback) connection -> { + connection.openPipeline(); + for (int i = 0, arrLen = keys.length; i < arrLen; i++) { + connection.get(redis.getKeySerializer().serialize(keys[i])); + } + return null; + }, redis.getValueSerializer()); + } + + public List pipelinGet(List keys) { + return redis.executePipelined((RedisCallback) connection -> { + connection.openPipeline(); + for (int i = 0, arrLen = keys.size(); i < arrLen; i++) { + connection.get(redis.getKeySerializer().serialize(keys.get(i))); + } + return null; + }, redis.getValueSerializer()); + } + + public Boolean getBit(String key, int offset) { + return redis.opsForValue().getBit(key, offset); + } + + public Boolean setBit(String key, int offset, Boolean b) { + return redis.opsForValue().setBit(key, offset, b); + } + + /** + * 从right存入list + */ + public void rightPushAll(String key, Object value) { + redis.boundListOps(key).rightPushAll(value); + } + + /** + * 弹出list左边的一个对象 + */ + public Object leftPop(String key, long timeout) { + return redis.opsForList().leftPop(key, timeout, TimeUnit.SECONDS); + } + + /** + * 弹出list左边的一个对象 + */ + public Object leftPush(String key, String val) { + return redis.boundListOps(key).leftPush(key, val); + } + + /** + * 弹出list左边的一个对象 + */ + public Object leftPop(String key) { + return redis.boundListOps(key).leftPop(); + } + + public void removeListAll(String key) { + redis.boundListOps(key).trim(1, 0); + } + + + /** + * 批量获取key + */ + public List mget(List keys) { + return redis.opsForValue().multiGet(keys); + } + + /** + * set如果存在则设置(string存储) + */ + public boolean setIfAbsent(String key, Object value) { + boolean success = redis.opsForValue().setIfAbsent(key, value); + if (success) { + redis.expire(key, 3, TimeUnit.DAYS); + } + return success; + } + + /** + * set如果存在则设置(string存储) + */ + public boolean setIfAbsent(String key, String value, long timeout, TimeUnit unit) { + return redis.opsForValue().setIfAbsent(key, value, timeout, unit); + } + + /** + * set如果存在则设置(map存储) + */ + public boolean setIfAbsent(String mapName, String key, String value) { + return redis.boundHashOps(mapName).putIfAbsent(key, value); + } + + /** + * 单个key存储, 注意:批量插入请尽量使用mset方法,否则效率非常低,而且事务不好处理 + */ + public void set(String key, Object value) { + redis.opsForValue().set(key, value, 30, TimeUnit.DAYS); + } + + public void setOver(String key, Object value) { + redis.opsForValue().set(key, value, 0); + } + + /** + * 单个key存储,且设置过期时间 + * + * @param key + * @param value + * @param timeOut 过期时间 单位:s + */ + public void set(String key, Object value, long timeOut) { + redis.opsForValue().set(key, value, timeOut, TimeUnit.SECONDS); + } + + public Object get(String key) { + return redis.opsForValue().get(key); + } + + public Object getAndDelete(String key) { + return redis.opsForValue().getAndDelete(key); + } + + + /** + * @param key + * @return + * @Title: generate + * @Description: Atomically increments by one the current value. + */ + public long generate(String key) { + RedisAtomicLong counter = new RedisAtomicLong(key, redis.getConnectionFactory()); + return counter.incrementAndGet(); + } + + /** + * key重命名 + * + * @param odlKey + * @param newKey + */ + @SuppressWarnings("unchecked") + public void rename(final String odlKey, final String newKey) { + redis.rename(odlKey, newKey); + } + + /** + * 删除缓存 + * 根据key精确匹配删除 + * + * @param keys + */ + public void remove(List keys) { + if (keys == null || keys.isEmpty()) { + return; + } + redis.delete(keys); + } + + public void remove(String key) { + redis.delete(key); + } + + /** + * 批量删除
+ * (该操作会执行模糊查询,请尽量不要使用,以免影响性能或误删) + */ + public void batchDel(String... pattern) { + for (String kp : pattern) { + redis.delete(redis.keys(kp + "*")); + } + } + + /** + * 查询key是否存在 + */ + public boolean exists(final String key) { + return redis.hasKey(key); + } + + /** + * 设置key在某一个时刻(timeout)时效 + */ + public boolean expireAt(String key, Date timeout) { + return redis.expireAt(key, timeout); + } + + /** + * 设置key的时效时间 + */ + public boolean expire(String key, long timeout, TimeUnit unit) { + return redis.expire(key, timeout, unit); + } + + /** + * 获取key的有效时间,单位是seconds + */ + public Long getExpire(String key) { + return redis.getExpire(key); + } + + /** + * 根据正在表达式获取key + */ + public Set keys(String pattern) { + return redis.keys(pattern); + } + + /** + * scan 实现 + */ + public Set scan(String pattern) { + return (Set) redis.execute((RedisCallback>) connection -> { + Set keysTmp = new HashSet<>(); + try (Cursor cursor = connection.scan(ScanOptions.scanOptions().match(pattern).count(10000).build())) { + while (cursor.hasNext()) { + keysTmp.add(new String(cursor.next(), "Utf-8")); + } + } catch (Exception e) { + log.error(e.getMessage()); + throw new RuntimeException(e); + } + return keysTmp; + }); + } + + + /** + * 返回key的数量 + */ + public long dbSize() { + return (long) redis.execute((RedisCallback) connection -> connection.dbSize()); + } + + /** + * 如果后面没有参数时返回PONG,否则会返回后面带的参数。 这个命令经常用来测试一个连接是否还是可用的,或者用来测试一个连接的延时。 + * 如果客户端处于频道订阅模式下,它将是一个multi-bulk返回,第一次时返回"pong",之后返回空(empty bulk),除非命令后面更随了参数。 + */ + public String ping() { + return (String) redis.execute((RedisCallback) connection -> connection.ping()); + } + + + /** + * 储存MAP, + */ + public void saveMapAll(String key, Map objMap) { + redis.boundHashOps(key).putAll(objMap); + } + + /** + * 存储单个map的key + */ + public void saveMapKey(String mapName, String mapKey, Object value) { + redis.boundHashOps(mapName).put(mapKey, value); + } + + /** + * 删除某个map中的key + */ + public Long removeMapKey(String mapName, String mapKey) { + return redis.boundHashOps(mapName).delete(mapKey); + } + + /** + * 获取整个MAP,包括key与value, + */ + public Map hGetAll(String key) { + return redis.boundHashOps(key).entries(); + } + + /** + * 获取MAP的某个key值 + */ + public Object hGet(String key, String mapKey) { + return redis.boundHashOps(key).get(mapKey); + } + + + /** + * 获取MAP的某几个key值, + */ + public Object hMget(final String key, List keys) { + return redis.boundHashOps(key).multiGet(keys); + } + + /** + * map的某个key自增 + */ + public double mapKeyIncry(String mapeName, String mapKey, double loanAmount) { + BoundHashOperations ops = redis.boundHashOps(mapeName); + if (!ops.putIfAbsent(mapKey, loanAmount)) { + return ops.increment(mapKey, loanAmount); + } + return loanAmount; + } + + /** + * map的某个key自增,并设置超时时间 + */ + public double mapKeyIncryAndExpire(String mapeName, String mapKey, double loanAmount, Long timeoutHours) { + BoundHashOperations ops = redis.boundHashOps(mapeName); + if (ops.putIfAbsent(mapKey, loanAmount)) { + redis.expire(mapeName, timeoutHours, TimeUnit.HOURS); + } else { + return ops.increment(mapKey, loanAmount); + } + return loanAmount; + } + + + /** + * key 自增+1 + */ + public Long incry(String key, int timeOut) { + Long result = redis.opsForValue().increment(key, 1L); + this.expire(key, timeOut, TimeUnit.MINUTES); + return result; + } + + /** + * key 自增+1 + */ + public Long incry(String key) { + Long result = redis.opsForValue().increment(key, 1L); + return result; + } + + public void zset(String zSetKey, String member, double score) { + redis.boundZSetOps(zSetKey).add(member, score); + } + + public long zremove(String zSetKey, String member) { + return redis.boundZSetOps(zSetKey).remove(member); + } + + public Set zrange(String zSetKey, long begin, long end) { + return redis.boundZSetOps(zSetKey).rangeWithScores(begin, end); + } + + + public void hSet(String key, String mapKey, String mapValue) { + redis.boundHashOps(key).put(mapKey, mapValue); + } + + public void hSet(String key, String mapKey, Object mapValue) { + redis.boundHashOps(key).put(mapKey, mapValue); + } + + public Long hDele(String key, String mapKey) { + return redis.boundHashOps(key).delete(mapKey); + } + + public Map hScan(String key, int length) { + ScanOptions scanOptions = ScanOptions.scanOptions().count(length).build(); + Cursor> result = redis.boundHashOps(key).scan(scanOptions); + Map elements = new HashMap<>(16); + int count = 0; + while (result.hasNext() && count++ < length) { + Map.Entry entry = result.next(); + elements.put(entry.getKey(), entry.getValue()); + } + try { + result.close(); + } catch (Exception e) { + log.error("redis异常:" , e); + } + + return elements; + } + + + public Double zget(String zSetKey, String member) { + return redis.boundZSetOps(zSetKey).score(member); + } + + /** + * 保存 + */ + public void opsForHashSave(String group, String key, Object o) { + redis.opsForHash().put(group, key, o); + } + + /** + * 是否存在 + */ + public boolean opsForHashExsit(String group, String key) { + return redis.opsForHash().hasKey(group, key); + } + + /** + * 按key删除 + */ + public void opsForHashDel(String group, String key) { + redis.opsForHash().delete(group, key); + } + + /** + * 删除所有 + */ + public void opsForHashDelAll(String group) { + redis.delete(group); + } + + /** + * 获取所有 + */ + public List opsForHashGet(String group) { + return redis.opsForHash().values(group); + } + + public Object opsForHashGetByGroupAndKey(String group, String key) { + return redis.opsForHash().get(group, key); + } + + public Map opsForHashGetMap(String group) { + return redis.opsForHash().entries(group); + } + +} diff --git a/src/main/java/com/biutag/supervisiondata/config/cache/RedisInterface.java b/src/main/java/com/biutag/supervisiondata/config/cache/RedisInterface.java new file mode 100644 index 0000000..d97640a --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/config/cache/RedisInterface.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.config.cache; + +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.serializer.RedisSerializer; + +/** + * @author kami + * @version 1.0 + * @since 2022/1/9 17:30 + */ +@FunctionalInterface +public interface RedisInterface { + + void run(RedisConnection connection, RedisSerializer key, RedisSerializer value); +} diff --git a/src/main/java/com/biutag/supervisiondata/config/db/Ads.java b/src/main/java/com/biutag/supervisiondata/config/db/Ads.java new file mode 100644 index 0000000..d1d92d3 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/config/db/Ads.java @@ -0,0 +1,67 @@ +package com.biutag.supervisiondata.config.db; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.config.GlobalConfig; +import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import com.zaxxer.hikari.HikariDataSource; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; + +import javax.sql.DataSource; + +/** + * @author kami on 2024-11-09 10:29:41 + * @version 0.0.1 + * @since 1.8 + */ +@Configuration +@MapperScan(basePackages = {"com.biutag.supervisiondata.mapper.ads"}, + sqlSessionFactoryRef = "adsSqlSessionFactory") +public class Ads { + + @Bean(name = "adsBean") + @ConfigurationProperties(prefix = "spring.datasource.ads") + public DataSource adsDataSource() { + return DataSourceBuilder.create().type(HikariDataSource.class).build(); + } + + @Bean(name = "adsTransactionManager") + public DataSourceTransactionManager adsTransactionManager() { + return new DataSourceTransactionManager(adsDataSource()); + } + + @Bean(name = "adsSqlSessionFactory") + public SqlSessionFactory adsSqlSessionFactory(@Qualifier("adsBean") DataSource mysqlDataSource, + @Qualifier("adsInterceptor") MybatisPlusInterceptor mybatisPlusInterceptor) throws Exception { + final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); + sessionFactory.setPlugins(mybatisPlusInterceptor); + sessionFactory.setDataSource(mysqlDataSource); + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/ads/*Mapper.xml")); + GlobalConfig globalConfig = GlobalConfigUtils.defaults(); + sessionFactory.setGlobalConfig(globalConfig); + return sessionFactory.getObject(); + } + + /** + * mp分页配置 + * @return MybatisPlusInterceptor + */ + @Bean(name = "adsInterceptor") + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.GBASE)); + return interceptor; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/config/db/Dwd.java b/src/main/java/com/biutag/supervisiondata/config/db/Dwd.java new file mode 100644 index 0000000..cc4fb59 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/config/db/Dwd.java @@ -0,0 +1,67 @@ +package com.biutag.supervisiondata.config.db; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.config.GlobalConfig; +import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import com.zaxxer.hikari.HikariDataSource; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; + +import javax.sql.DataSource; + +/** + * @author kami on 2024-11-09 10:29:41 + * @version 0.0.1 + * @since 1.8 + */ +@Configuration +@MapperScan(basePackages = {"com.biutag.supervisiondata.mapper.dwd"}, + sqlSessionFactoryRef = "dwdSqlSessionFactory") +public class Dwd { + + @Bean(name = "dwdBean") + @ConfigurationProperties(prefix = "spring.datasource.dwd") + public DataSource dwdDataSource() { + return DataSourceBuilder.create().type(HikariDataSource.class).build(); + } + + @Bean(name = "dwdTransactionManager") + public DataSourceTransactionManager dwdTransactionManager() { + return new DataSourceTransactionManager(dwdDataSource()); + } + + @Bean(name = "dwdSqlSessionFactory") + public SqlSessionFactory dwdSqlSessionFactory(@Qualifier("dwdBean") DataSource mysqlDataSource, + @Qualifier("dwdInterceptor") MybatisPlusInterceptor mybatisPlusInterceptor) throws Exception { + final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); + sessionFactory.setPlugins(mybatisPlusInterceptor); + sessionFactory.setDataSource(mysqlDataSource); + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/dwd/*Mapper.xml")); + GlobalConfig globalConfig = GlobalConfigUtils.defaults(); + sessionFactory.setGlobalConfig(globalConfig); + return sessionFactory.getObject(); + } + + /** + * mp分页配置 + * @return MybatisPlusInterceptor + */ + @Bean(name = "dwdInterceptor") + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.GBASE)); + return interceptor; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/config/db/Mine.java b/src/main/java/com/biutag/supervisiondata/config/db/Mine.java new file mode 100644 index 0000000..ee55227 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/config/db/Mine.java @@ -0,0 +1,82 @@ +package com.biutag.supervisiondata.config.db; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.MybatisConfiguration; +import com.baomidou.mybatisplus.core.config.GlobalConfig; +import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import com.zaxxer.hikari.HikariDataSource; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; + +import javax.sql.DataSource; + +/** + * @author kami + * @since 10:22 2020/4/5 + */ + +@Configuration +@MapperScan(basePackages = {"com.biutag.supervisiondata.mapper.mine"}, + sqlSessionFactoryRef = "sqlSessionFactory") +public class Mine { + + @Primary + @Bean(name = "chaosBean") + @ConfigurationProperties(prefix = "spring.datasource.mine") + public DataSource mysqlDataSource() { + return DataSourceBuilder.create() + .type(HikariDataSource.class).build(); + } + + @Primary + @Bean(name = "transactionManager") + public DataSourceTransactionManager transactionManager() { + return new DataSourceTransactionManager(mysqlDataSource()); + } + + @Primary + @Bean(name = "sqlSessionFactory") + public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("chaosBean") DataSource mysqlDataSource) throws Exception { + final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); + MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); + mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); + sessionFactory.setPlugins(mybatisPlusInterceptor); + sessionFactory.setDataSource(mysqlDataSource); + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/mine/*Mapper.xml")); + GlobalConfig globalConfig = GlobalConfigUtils + .defaults(); + sessionFactory.setGlobalConfig(globalConfig); + MybatisConfiguration configuration = new MybatisConfiguration(); + configuration.setJdbcTypeForNull(JdbcType.NULL); + configuration.setMapUnderscoreToCamelCase(true); + configuration.setDatabaseId(DbType.MYSQL.getDb()); + sessionFactory.setConfiguration(configuration); + return sessionFactory.getObject(); + } + + /** + * mp分页配置 + * @return MybatisPlusInterceptor + */ + @Bean(name = "interceptor") + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } + +} diff --git a/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java b/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java new file mode 100644 index 0000000..7977492 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java @@ -0,0 +1,137 @@ +package com.biutag.supervisiondata.event; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; +import com.biutag.supervisiondata.config.cache.RedisDao; +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTest; +import com.biutag.supervisiondata.repository.*; +import com.biutag.supervisiondata.service.*; +import jakarta.annotation.PreDestroy; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +/** + * @author kami on 2024-01-15 14:34:27 + * @version 0.0.1 + * @since 1.8 + */ +@Component +@Slf4j +public class ApplicationEvent { + + @Resource + RedisTemplate redisTemplate; + + @Resource + private GBaseJJDService gBaseJJDService; + + @Resource + private GBaseSHRWFRService gBaseSHRWFRService; + + @Resource + private RiskTaskService riskTaskService; + + @Resource + private RiskModelTaskClueRepository riskModelTaskClueRepository; + + @Resource + private RiskPersonalRepository riskPersonalRepository; + + @Resource + private RiskPersonalService riskPersonalService; + + @Resource + private GBaseBAService gBaseBAService; + + @Resource + private PoliceService policeService; + + @Resource + private HabitService habitService; + + @Resource + private MarriageService marriageService; + + @Resource + private RiskPersonalTagRepository riskPersonalTagRepository; + + @Resource + private RiskTestRepository riskTestRepository; + + @Resource + private PetitionService petitionService; + + @Resource + private PointService pointService; + + @Resource + private NoControlService noControlService; + + @Resource + private RiskScoreRuleService riskScoreRuleService; + + @Resource + private RiskModelTaskClueRepository taskClueRepository; + + + @EventListener(ApplicationReadyEvent.class) + public void serviceReady() { + RedisDao.getInstance().init(redisTemplate); + + LocalDateTime start = LocalDateTime.of(2024, 1, 1, 0, 0, 0); + LocalDateTime end = LocalDateTime.now(); + CompletableFutureUtil.runSync(() -> { +// gBaseJJDService.pullAndSave(start, end); +// gBaseSHRWFRService.pullAndSave(start, end); +// petitionService.personPullAndSave(start, end); +// pointService.personPullAndSave(start, end); +// riskPersonalService.fixed(); + + List persons = riskPersonalRepository.list(); + List clues = riskModelTaskClueRepository.list(new LambdaQueryWrapper() + .eq(RiskModelTaskClue::getDel, 0)); + Map> map = clues.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getModelId)); + TaskParamDomain domain = new TaskParamDomain(persons, map); +// riskTaskService.eduModelTask(domain); +// riskTaskService.infoModelTask(domain); +// riskTaskService.caseModelTask(domain); +// gBaseBAService.baModelTask(domain); +// policeService.contradictModelTask(domain); +// habitService.habitModelTask(domain); +// marriageService.marriageModelTask(domain); +// petitionService.petitionModelTask(domain); +// riskTaskService.riskAreaModelTask(domain); +// riskTaskService.heightFight(domain); +// pointService.syncScore(domain); +// pointService.syncViolence(domain); +// noControlService.syncNoControlData(domain); +// pointService.syncKillSelf(domain); +// pointService.syncDrug(domain); +// pointService.syncControlNoPower(domain); +// riskScoreRuleService.runScore(); + pointService.syncPointCall(domain); + }); + } + + @PreDestroy + public void shutdown() { + // 系统关闭 + } +} diff --git a/src/main/java/com/biutag/supervisiondata/lock/LocalLock.java b/src/main/java/com/biutag/supervisiondata/lock/LocalLock.java new file mode 100644 index 0000000..7e956d0 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/lock/LocalLock.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.lock; + +import lombok.experimental.UtilityClass; + +/** + * 本地锁 + * @author kami on 2024-11-19 15:36:23 + * @version 0.0.1 + * @since 1.8 + */ +@UtilityClass +public class LocalLock { + + public static boolean scoreLock = false; +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/ads/GBaseSYRKXXMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/ads/GBaseSYRKXXMapper.java new file mode 100644 index 0000000..95f48c1 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/ads/GBaseSYRKXXMapper.java @@ -0,0 +1,57 @@ +package com.biutag.supervisiondata.mapper.ads; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.domain.FightMan; +import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @author kami on 2024-11-08 20:02:45 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseSYRKXXMapper extends BaseMapper { + /** + * 根据身份证号码查询 + * @param idCode 身份证号码 + * @return 对应数据 + */ + @Select("select gmsfhm, xm, xbdm, csrq, lxdh from ads_ssxx_syrkxx where gmsfhm = #{idCode}") + List selectByIdCode(@Param("idCode")String idCode); + + /** + * 根据联系电话查询 + * @param mobileNumber 联系电话 + * @return 对应数据 + */ + @Select("select gmsfhm, xm, xbdm, csrq, lxdh from ads_ssxx_syrkxx where lxdh = #{mobileNumber}") + List selectByMobileNumber(@Param("mobileNumber")String mobileNumber); + + /** + * 查看高风险 + * @param time 开始时间 + * @return 信息 + */ + @Select(" select DISTINCT a.gmsfhm,a.xm,a.lxdh from csga_dwd.dwd_qt_jzpt_mdjfdsrxx a " + + " inner join csga_dwd.dwd_wp_zfba_xzjljstzs b on a.gmsfhm = b.zjhm " + + " where a.djsj >= #{time}") + List selectHeightFight(@Param("time")String time); + + /** + * 查人纠纷的次数 + * @return 列表 + */ + @Select("") + List selectListByIdCode(@Param("list")List list); + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseAJJBXXMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseAJJBXXMapper.java new file mode 100644 index 0000000..982852b --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseAJJBXXMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; + +/** + * @author kami on 2024-11-10 15:14:34 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseAJJBXXMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseBAXXMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseBAXXMapper.java new file mode 100644 index 0000000..4b78302 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseBAXXMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseBAXX; + +/** + * @author kami on 2024-11-12 18:04:49 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseBAXXMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseBAYJMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseBAYJMapper.java new file mode 100644 index 0000000..7aa0d72 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseBAYJMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseBAYJ; + +/** + * @author kami on 2024-11-12 18:03:57 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseBAYJMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseHYMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseHYMapper.java new file mode 100644 index 0000000..56f2d4d --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseHYMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseHY; + +/** + * @author kami on 2024-11-13 15:17:29 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseHYMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java new file mode 100644 index 0000000..0730a55 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseJJDMapper.java @@ -0,0 +1,27 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface GBaseJJDMapper extends BaseMapper { + + /** + * 查询接警单数据(为了转化成风险人员) + * @param startTime 查询开始时间(处警时间) + * @param endTime 查询结束时间(处警时间) + * @return 列表 + */ + @Select(" select jjdbh, gxdwdm, gxdwmc,bjrxm, bjrxb, bjrlxdh,bjrzjhm, jqxzmc, bjnr, cjqk, bjsj from dwd_asj_zhtx_jjd " + + " where jqxzmc in ('刑事类警情','危害国家安全','危害国家、颠覆政权犯罪','背叛国家','分裂国家','煽动分裂国家','武装叛乱、暴乱','颠覆国家政权','煽动颠覆国家政权','资助危害国家安全活动','其他危害国家、颠覆政权犯罪','叛变、叛逃犯罪','投敌叛变','叛逃','其他叛变、叛逃犯罪','间谍、资敌犯罪','间谍','为境外窃取、刺探、收买、非法提供国家秘密、情报','资敌','其他间谍、资敌犯罪','法轮功、全能神等邪教活动','境外非政府组织非法活动','其他危害国家安全活动','危害公共安全','放火','爆炸','投放危险物质','决水','以危险方法危害公共安全','组织、参加、帮助、煽动恐怖活动','劫持','劫持人质','劫持航空器','劫持船只','劫持火车','劫持汽车','其他劫持','破坏公共设备设施','破坏交通工具','破坏交通设施','破坏电力设备','破坏供水设备','破坏易燃易爆设备','破坏广播电视设施','破坏公用电信设施','破坏其他公共设备设施','危险驾驶','醉酒驾驶','追逐竞驶(飙车)','校车、客运车辆严重超员、超速行驶','违法运输危化品','其他危险驾驶情形','妨害安全驾驶','暴力危及飞行安全','违反安全管理规定危害公共安全','重大飞行事故','铁路运营安全事故','重大劳动安全事故','大型活动重大安全事故','危险物品肇事重大事故','工程重大安全事故','教育设施重大安全事故','消防责任重大事故','其他重大责任、安全事故','涉枪支、弹药犯罪','非法制造、买卖、运输、邮寄、储存枪支、弹药','非法持有、私藏枪支、弹药','违规制造、销售枪支、弹药','非法携带枪支、弹药危及公共安全','非法出租、出借枪支','抢劫、盗窃、抢夺枪支、弹药','丢失枪支不报','其他涉枪支弹药犯罪','非法制造、买卖、运输、邮寄、储存、抢劫、盗窃、抢夺爆炸物','非法制造爆炸物','非法买卖爆炸物','非法运输爆炸物','非法邮寄爆炸物','非法存储爆炸物','非法盗窃爆炸物','非法抢劫、抢夺爆炸物','其他涉爆炸物犯罪','非法制造、买卖、运输、储存、携带危险物质','非法制造危险物质','非法买卖危险物质','非法运输危险物质','非法储存危险物质','非法携带危险物品危及公共安全','其他涉危险物质犯罪','非法携带管制刀具危害公共安全','其他危害公共安全','侵犯公民人身权利、民主权利','故意杀人','过失致人重伤、死亡','过失致人重伤','过失致人死亡','故意伤害','组织出卖人体器官','强奸','奸淫幼女','强奸14至18周岁未成年人','强奸妇女','猥亵','猥亵儿童','强制猥亵他人、侮辱妇女','绑架','非法拘禁','拐卖、收买、阻碍解救妇女儿童','拐卖妇女、儿童','收买被拐卖的妇女、儿童','聚众阻碍解救被收买的妇女、儿童','暴力阻碍解救被收买的妇女、儿童','其他拐卖、收买、阻碍解救妇女儿童','非法搜查、非法侵入住宅','非法搜查他人身体','非法搜查他人住宅','非法侵入住宅','其他非法搜查、非法侵入住宅','诬告陷害','侮辱、诽谤','强迫劳动','刑讯逼供、暴力取证','虐待被监管人员','侵犯民主权利','侵犯公民个人信息权益','侵犯通信自由','私拆、隐匿、毁弃邮件、电报','打击报复会计、统计人员','国家机关人员报复陷害','破坏选举','其他侵犯公民民主权利','破坏民族团结、宗教信仰自由','煽动民族仇恨、民族歧视','出版歧视、侮辱少数民族作品','非法剥夺公民宗教信仰自由','侵犯少数民族风俗习惯','其他破坏民族团结、宗教信仰自由犯罪','侵犯婚姻家庭权利','暴力干涉婚姻自由','重婚','破坏军婚','虐待','遗弃','其他侵犯婚姻家庭权利犯罪','拐骗儿童','组织残疾人、儿童从事乞讨、违法活动','雇佣童工从事危重劳动','其他侵犯人身、民主权利','侵犯财产权利','抢劫','入户抢劫','抢劫银行、金融机构、运钞车或提(送)款人、取款人','抢劫营业场所','抢劫金银珠宝店','抢劫工地','拦路抢劫行人','公共交通工具上抢劫','抢劫私人交通工具','抢劫出租车','抢劫军用或抢险、救灾、救济物资','其他抢劫','抢夺','入室入店抢夺','公交地铁抢夺','其他抢夺','盗窃','入户盗窃','盗窃商铺','盗窃金银珠宝店','盗窃金融机构','入室盗窃(非入户)','撬盗保险柜','盗窃文物','盗窃机动车','盗窃非机动车','盗窃机动车、非机动车配件','盗窃车内财物','盗窃车辆燃油','盗窃生产生活物资、公共设施','盗窃、盗刷银行卡','盗窃宠物','盗窃手机等电子产品','盗窃快递物品','盗窃QQ币、比特币等虚拟财产','盗窃电信号码、支付宝、微信等账号内的财产','盗窃QQ号、微信号、游戏账号等虚拟身份','扒窃','随窃','其他刑事类盗窃','接触性诈骗','调包诈骗','设赌诈骗','设摊诈骗','合作投资、项目工程诈骗','冒充港澳台及外籍人员诈骗','帮办事务诈骗','借赊物品诈骗','买卖交易诈骗','投资理财诈骗','租车诈骗','冒充身份诈骗','碰瓷诈骗','货币兑换诈骗','假币假券','婚恋交友诈骗','提额还款诈骗','社保、医保诈骗','迷信诈骗','招工诈骗','拾物平分诈骗','酒托等购物消费类诈骗','收藏拍卖诈骗','保健品销售诈骗','黑中介诈骗','冒充水电气暖等工作人员诈骗','其他接触性诈骗','电信网络诈骗','贷款、代办信用卡','刷单返利','冒充电商物流客服','虚假购物、服务','虚假投资理财、博彩','冒充公检法及政府机关','冒充领导、熟人等特定身份','网络游戏产品、虚假交易','虚假网络婚恋、交友(非杀猪盘)','冒充军警购物类','虚假征信','虚假公益','其他电信网络诈骗','敲诈勒索','裸聊敲诈','恶意索赔敲诈','负面舆论敲诈','其他敲诈勒索','故意毁坏财物','聚众哄抢','侵占、职务侵占','挪用资金、特定款物','破坏生产经营','拒不支付劳动报酬','其他侵犯财产','妨害社会管理秩序','扰乱公共秩序','聚众斗殴','寻衅滋事','煽动暴力抗拒法律实施','招摇撞骗','伪造、变造、买卖、盗用身份证件、公文、印章','盗窃、抢夺、毁灭国家机关公文证件、印章','非法生产、买卖警用装备','非法生产、销售、使用窃听窃照器材','非法侵入、破坏、控制计算机系统,非法获取计算机系统数据','扰乱国家机关工作秩序','聚众扰乱公共秩序、冲击国家机关','非法集会、游行、示威','编造、传播虚假信息、虚假恐怖信息','编造、传播虚假险情、疫情、灾情、警情','侮辱国旗、国徽、国歌','侵害英雄烈士名誉荣誉','组织考试作弊、替考、非法出售试题答案等','使用虚假身份证件、盗用身份证件','冒名顶替','非法获取国家秘密','非法持有国家绝密、机密文件、资料、物品','其他扰乱公共秩序','妨害公务','暴力袭击依法执行职务的警察','其他妨害公务','组织、领导、参加、包庇黑社会性质组织','组织黑社会性质组织','领导黑社会性质组织','参加黑社会性质组织','包庇黑社会性质组织','其他组织、领导、参加、包庇黑社会性质组织','赌博','聚众赌博','网络赌博','跨境赌博','开设赌场','组织、参与国(境)外赌博','其他赌博','妨害司法','虚假诉讼','窝藏包庇','拒不执行判决、裁定','其他妨害司法犯罪','妨害国(边)境管理','组织、运送他人偷越国(边)境','偷越国(边)境','提供伪造、变造、出售出入境证件','骗取出境证件','破坏界碑、界桩','其他妨害国(边)境管理犯罪','妨害文物管理','盗掘古文化遗址、古墓葬','盗掘古人类化石、古脊椎动物化石','故意损毁文物','过失损毁文物','故意损毁名胜古迹','倒卖文物','其他妨害文物管理行为','危害公共卫生、妨害动植物防疫','妨害传染病防治','非法行医','医疗事故','非法组织、强迫卖血','非法采集、供应血液,制作、供应血液制品','传染病菌种、毒种扩散','非法植入基因编辑、克隆胚胎','非法采集人类遗传资源、走私人类遗传资源材料','妨害动植物防疫、检疫','其他妨害公共卫生','破坏环境资源保护','污染环境','破坏自然保护地','非法占用农用地','非法狩猎','非法猎捕、收购、运输、出售陆生野生动物','非法捕捞','危害珍贵、濒危野生动物','非法采砂','非法采矿、破坏性采矿','盗伐、滥伐林木','非法收购、运输盗伐、滥伐的材料','非法引进、释放、丢弃外来入侵物种','危害国家重点保护植物','其他破坏环境资源保护','走私、贩卖、运输、制造毒品及相关涉毒犯罪行为','走私、贩卖、运输、制造毒品','非法持有毒品','包庇毒品犯罪分子,窝藏、转移、隐瞒毒品、毒赃','非法生产、买卖、运输、走私制毒物品','种植毒品原植物','强迫、诱骗他人吸毒','容留他人吸毒','非法提供麻醉药品、精神药品','妨害兴奋剂管理','其他走私、贩卖、运输、制造毒品及相关涉毒犯罪行为','组织、强迫、引诱、容留、介绍卖淫','组织、强迫卖淫','引诱、容留、介绍卖淫','引诱、组织、强迫未成年人卖淫','传播性病','其他组织、强迫、引诱、容留、介绍卖淫','制作贩卖传播淫秽物品、组织淫秽表演、聚众淫乱','其他妨害社会管理秩序','破坏市场经济秩序','生产、销售伪劣商品','生产、销售伪劣产品','生产、销售、提供假药、劣药','妨害药品管理','生产、销售不符合安全标准的食品、产品','生产、销售有毒有害食品','生产、销售不符合标准的医用器材','生产、销售伪劣农药、兽药、化肥、种子','生产、销售不符合卫生标准的化妆品','其他生产、销售伪劣商品','破坏金融管理秩序','非法吸收公众存款','持有、使用假币','出售、购买、运输假币','伪造、变造货币','妨害信用卡管理','窃取、收买、非法提供信用卡信息','洗钱','其他破坏金融管理秩序','金融诈骗','集资诈骗','贷款诈骗','票据、金融凭证、信用证、有价证券诈骗','信用卡诈骗','保险诈骗','其他金融诈骗','侵犯知识产权','假冒注册商标','销售假冒注册商标的商品','非法制造、销售非法制造的注册商标标识','假冒专利','侵犯著作权','销售侵权复制品','侵犯商业秘密','为境外窃取、刺探、收买、非法提供商业秘密','其他侵犯知识产权','扰乱市场秩序','组织、领导传销活动','合同诈骗','非法经营','强迫交易','虚假广告','损害商业信誉、商业声誉','伪造、倒卖有价票证','其他扰乱社会秩序','走私','妨害对公司、企业的管理秩序','危害税收征管','其他破坏市场经济秩序','其他刑事类警情','行政(治安)类警情','扰乱公共秩序','扰乱单位秩序','扰乱医疗机构秩序','扰乱政府机关秩序','扰乱工厂、企事业单位秩序','扰乱教学科研机构秩序','扰乱军事禁区、军事管理区管理秩序','扰乱其他单位秩序','扰乱公共场所秩序','扰乱大型活动秩序','强行进入大型活动场内','违规在大型活动场内燃放物品','在大型活动场内展示侮辱性物品','围攻大型活动工作人员','向大型活动场内投掷杂物','其他扰乱大型活动秩序','扰乱公共交通工具上的秩序','携带危险品乘车','在公共交通工具内滋事打闹','非法拦截、强登公共交通工具','在交通工具强行占座、不听劝阻','其他扰乱公共交通工具上的秩序','妨碍交通工具正常行驶','拦截、强登、扒乘机动车、船舶、航空器及其他交通工具','其他妨碍交通工具正常行驶','虚构事实扰乱公共秩序','谎报、编造、传播虚假的险情、疫情、灾情的警情、信息','编造、故意传播虚假恐怖信息','其他虚构事实扰乱公共秩序','扬言实施放火、爆炸、投放危险物品等极端行为','扬言放火','扬言爆炸','扬言投放危险物品','扬言杀人','扬言伤人','扬言冲撞','其他扬言极端','寻衅滋事','结伙斗殴','追逐、拦截他人','强拿硬要或任意损毁、占用公私财物','其他寻衅滋事行为','危害信息网络安全','非法侵入计算机信息系统、改变计算机系统功能、数据和应用程序','故意制作、传播计算机破坏性程序影响运行','违反计算机信息系统、网络、病毒等管理规定','其他危害信息网络安全','邪教、会道门、迷信活动','组织、教唆、胁迫、诱骗、煽动从事邪教、会道门活动','利用邪教、会道门、迷信活动危害社会','冒用宗教、气功名义危害社会','故意干扰无线电业务正常进行、拒不消除对无线电台(站)的有害干扰','破坏选举秩序','其他扰乱公共秩序','妨害公共安全','涉危险物质违法行为','非法制造、买卖、储存、运输、邮寄、携带、使用、提供、处置危险物质','危险物质被盗、被抢、丢失不报','其他涉危险物质违法行为','涉枪支、弹药、管制器具违法行为','非法携带枪支、弹药及管制器具','非法携带枪支、弹药及管制器具进入公共场所或公共交通工具','违规制造、销(配)售枪支','违规运输枪支','非法出租、出借枪支','不上缴报废枪支','丢失枪支不报','制造、销售仿真枪','其他涉枪支、弹药、管制器具违法行为','盗窃、损毁公共设施','盗窃、损毁油气管道、电力电信设施等公共工程设施','移动、损毁边境、领土、领海标志设施','非法进行影响国(边)界走向的活动或修建有碍国(边)境管理设施','其他盗窃、损毁公共设施','妨害航空安全','盗窃、损坏、擅自移动航空设施','强行进入航空器驾驶舱','在使用中的航空器上使用禁用物品','其他妨害航空安全','妨害铁路安全','盗窃、损毁、擅自移动铁路设施、设备、机动车辆配件、安全标志','在铁路上放置障碍物','故意向列车投掷物品','在铁路沿线非法挖掘坑穴、采石取沙','在铁路线路上私设道口、平交过道','擅自进入铁路防护网、违法在铁路线路上行走坐卧、抢越铁路','其他妨害铁路安全','妨害道路安全','道路施工不设置安全防护设施','故意损毁、移动道路安全防护设施','盗窃、损毁路面公共设施','其他妨害道路安全','妨害水上交通、水利等设施安全','违规安装、使用电网','高空抛物','违规举办大型活动','公共场所经营管理人员违反安全规定','违反易制毒化学品管理','违反民用爆炸物品、爆破业管理规定','违反剧毒、危险物品安全管理规定','制造、销售仿真枪支等违反枪支管理','违反烟花爆竹管理规定','违反消防法相关规定','其他妨害公共安全','侵犯人身权利','殴打他人、故意伤害他人身体','家庭暴力','殴打','谩骂','恐吓','限制人身自由','精神控制','其他家庭暴力行为','非法限制人身自由','非法侵入住宅','非法搜查身体','威胁人身安全','侵犯隐私','偷窥、偷拍、窃听、散布他人隐私','其他侵犯隐私行为','侮辱、诽谤','诬告陷害','威胁、侮辱、殴打、打击报复证人及其近亲属','发送信息干扰正常生活','虐待','遗弃','遗弃儿童','遗弃老人','遗弃其他家庭成员','猥亵','在公共场所故意裸露身体','猥亵妇女','猥亵智力残疾人、精神病人','猥亵不满14周岁的人','其他猥亵','侵犯通信自由','强迫劳动','胁迫、诱骗、利用他人乞讨或以滋扰他人的方式乞讨','组织、胁迫、诱骗进行恐怖残忍表演','强迫交易、强讨硬要','强迫他人提供服务','强迫他人接受服务','强买强卖商品','其他强迫交易','煽动民族仇恨、民族歧视或刊载民族歧视、侮辱内容','冒领、隐匿、毁弃、私自开拆、非法检查他人邮件','其他侵犯人身民主权利','侵犯财产权利','哄抢','抢夺','入室入店抢夺','公交地铁抢夺','其他治安抢夺','敲诈勒索','裸聊敲诈','恶意索赔敲诈','负面舆论敲诈','其他敲诈勒索','故意损毁财物','盗窃','盗窃办公场所','盗窃商户','盗窃工地','盗窃机动车','盗窃非机动车','盗窃机动车、非机动车配件','盗窃车内财物','盗窃车内燃油','盗窃生产物资、公务设施','盗窃、盗刷银行卡','盗窃宠物','盗窃快递物品','盗窃电子产品及配件','盗窃QQ币、比特币等虚拟财产','盗窃电信号码、支付宝和微信等账号内的财产','盗窃QQ号、微信号、游戏账号等虚拟身份','随窃','其他行政治安类盗窃','接触性诈骗','调包诈骗','设摊诈骗','冒充身份诈骗','帮办事务诈骗','借赊物品诈骗','冒充港澳台及外籍人员诈骗','货币兑换诈骗','假币假券','碰瓷诈骗','迷信诈骗','招工诈骗','提额还款诈骗','拾物平分诈骗','酒托等购物消费类诈骗','保健品销售诈骗','黑中介诈骗','冒充水电气暖等工作人员诈骗','上门骗取少量财物','其他街头诈骗','电信网络诈骗','贷款、代办信用卡','刷单返利','冒充电商物流客服','虚假购物、服务','虚假投资理财、博彩','冒充公检法及政府机关','冒充领导、熟人等特定身份','网络游戏产品、虚假交易','虚假网络婚恋、交友(非杀猪盘)','冒充军警购物','虚假征信','其他电信网络诈骗','其他侵犯财产权利','妨害社会管理秩序','阻碍执行公务、紧急任务','拒不执行紧急状态下的决定、命令','阻碍执行职务','阻碍特种车辆通行','冲撞警戒带、警戒区','其他阻碍执行公务、紧急任务','招摇撞骗','非法制售、使用公文、证件、有价票证、船舶户牌等','伪造、变造、买卖公文、证件、证明文件、印章或使用伪造、变造的公文、证件、证明文件','伪造、变造、倒卖有价票证、凭证','伪造、变造船舶户牌或买卖、使用伪造、变造船舶户牌','其他非法制售、使用公文、证件、有价票证、船舶户牌等','驾船擅自进入、停靠国家管制的水域、岛屿','非法以社团名义或以被撤销登记的社团名义活动','未获公安许可擅自经营','煽动、策划非法集会、游行、示威','违反旅馆业管理规定','不按规定登记住宿旅客信息','不制止住宿旅客带入危险物质','明知住宿旅客是犯罪嫌疑人不报','其他违反旅馆业管理规定','违反房屋租赁管理规定','将房屋出租给无身份证件人居住','不按规定登记承租人信息','明知承租人利用出租屋犯罪不报','承租人不配合登记信息','其它违反出租屋管理规定','制造噪声干扰正常生活','违反典当业管理规定','违法承接典当物品','典当发现违法犯罪嫌疑人、赃物不报','其他违反典当业管理规定','违法回收、收购物品','违法收购废旧专用器材','收购赃物、有赃物嫌疑的物品','收购国家禁止收购的其他物品','妨害司法','隐藏、转移、变卖、损毁依法扣押、查封、冻结的财物','伪造、隐匿、毁灭证据','提供虚假证言','谎报案情','窝藏、转移、代销脏物','违反监督管理规定','其他妨害司法','妨害国(边)境管理','偷越国(边)境','协助组织、运送他人偷越国(边)境','为偷越国(边)境人员提供条件','其他妨害国(边)境管理','妨害文物管理','故意损坏文物、名胜古迹','违法实施危及文物安全的','其他妨害文物管理','违法驾驶交通工具','偷开机动车','无证驾驶、偷开航空器、机动船舶','其他违法驾驶交通工具','破坏坟墓、尸骨、违法停放尸体','破坏、污损坟墓或毁坏、丢弃尸骨、骨灰','违法停放尸体','其他破坏坟墓、尸骨、违法停放尸体','卖淫嫖娼淫秽等活动','卖淫、嫖娼','拉客招嫖','引诱、容留、介绍卖淫','制作、运输、复制、出售、出租淫秽物品','传播、组织播放淫秽信息、音像','组织、进行淫秽表演','参与聚众淫乱','为淫秽活动提供条件','为卖淫、嫖娼人员通风报信','其他卖淫嫖娼淫秽活动','提供、从事营利性陪侍活动','涉赌博违法行为','赌博','为赌博提供条件','组织参与国(境)外赌博','为赌博人员通风报信','其他赌博行为','涉毒品违法行为','吸毒','提供、非法持有毒品','教唆、引诱、欺骗吸毒','胁迫、欺骗开具麻醉药品、精神药品','为吸毒人员通风报信','种植买卖毒品原植物','非法买卖、运输、携带、持有毒品原植物种苗','非法运输、买卖、储存、使用罂粟壳','其他有关毒品行为','违反动物饲养管理规定','饲养动物干扰正常生活','放任动物恐吓他人','遛狗未栓绳','其他违反动物饲养管理规定','违反出入境管理规定','非法入境','非法居留','非法就业','容留非法入境、非法居留的外国人','其他违反出入境管理规定','违反娱乐场所管理规定','违反互联网服务营业场所管理规定','违反金融单位场所安全防范管理规定','违反地铁管理规定','违反保安服务保安培训机构管理规定','违反水上作业人员和船舶治安管理规定','违反印刷、印铸、刻字业管理规定','违反易制毒化学品管理规定','违反民族政策管理规定','违反机动车修理、报废、机动车回收行为','违反食品、药品、环境、野生动植物保护行为','违反疫苗管理规定','组织考试作弊、替考、非法出售试题答案等','更改发动机、车架号码','非法制造、贩卖、持有、使用警用标志、制式服装、警械、证件','违反居民身份证、居住证管理规定','境外非政府组织境内非法活动','骚扰、辱骂、威胁恐吓110、谎报警情','其他妨害社会管理秩序','其他行政(治安)类警情','聚集上访','到县级机关上访','到市级机关上访','到省级机关上访','事发现场反映情况','企事业单位内部反映情况','其他聚集上访','自杀','高坠自杀','溺水自杀','烧炭自杀','上吊自杀','服药(毒)自杀','割脉自杀','卧轨自杀','撞车自杀','其他方式自杀','纠纷','家庭婚姻情感纠纷','家庭纠纷','婚姻纠纷','恋情纠纷','婚外情纠纷','其他情感纠纷','邻里纠纷','宅基地问题','建筑问题','地权问题','装修问题(非噪音)','漏水问题','垃圾问题','通风采光问题','历史遗留问题','口角琐事','其他邻里纠纷','生活纠纷','物业纠纷','通行障碍纠纷','工地施工扰民(非噪音)','环境污染纠纷','水源纠纷','饲养宠物纠纷','其他生活纠纷','噪音纠纷','工地噪音纠纷','广场噪音纠纷','邻里噪音纠纷','门市噪音纠纷','其他噪音纠纷','经济纠纷','债务纠纷','合同纠纷','工程款纠纷','权属纠纷','租赁纠纷','货款纠纷','赔偿纠纷','运费纠纷','其他经济纠纷','消费纠纷','乘车出行','消费服务','商品质量','快递纠纷','其他消费纠纷','劳资纠纷','劳资争议','拖欠工资','工伤事故','企业改制','其他劳资纠纷','医疗纠纷','医患纠纷','医疗事故纠纷','其他医疗纠纷','教育问题纠纷','学生纠纷','师生纠纷','教师待遇问题','学校管理问题','其他教育问题纠纷','房地产问题纠纷','房屋质量问题','交房时间问题','产证办理问题','房价争议问题','其他房地产问题纠纷','征地拆迁纠纷','土地赔偿问题','拆拆补偿问题','回迁安置问题','房屋产权归属问题','其他征地拆迁纠纷','产权权属纠纷','土地权属纠纷','河道权属纠纷','滩涂权属纠纷','林木权属纠纷','水塘权属纠纷','其他产权权属纠纷','交通纠纷','修路补偿问题','过路收费问题','通行纠纷','其他交通纠纷','工作纠纷','意见分歧','不服管理','其他工作纠纷','其他纠纷')" + + " and bjsj between #{startTime} and #{endTime} ") + List selectDataToRisk(@Param("startTime")String startTime, @Param("endTime")String endTime); + + + @Select(" select bjrlxdh, bjdh, jqxzdm, bjrzjhm from dwd_asj_zhtx_jjd " + + " where bjsj >= '2024-01-01 00:00:00'") + List selectPointCall(); +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseSHRXXMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseSHRXXMapper.java new file mode 100644 index 0000000..461ee09 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseSHRXXMapper.java @@ -0,0 +1,28 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @author kami on 2024-11-10 15:14:34 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseSHRXXMapper extends BaseMapper { + + /** + * 查询受害人信息数据(为了转化成风险人员) + * @param startTime 查询开始时间(处警时间) + * @param endTime 查询结束时间(处警时间) + * @return 列表 + */ + @Select(" select ajbh,gmsfhm,xm,xbdm,lxdh from dwd_asj_zfba_shrxx " + + " where shrq between #{startTime} and #{endTime} " + + " and ajbh is not null") + List selectDataToRisk(@Param("startTime")String startTime, @Param("endTime")String endTime); +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseTbDZdrylbMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseTbDZdrylbMapper.java new file mode 100644 index 0000000..68f2f3e --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseTbDZdrylbMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseTbDZdrylb; + +/** + * @author kami on 2024-11-20 16:20:45 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseTbDZdrylbMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseWFRXXMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseWFRXXMapper.java new file mode 100644 index 0000000..7b4b37f --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseWFRXXMapper.java @@ -0,0 +1,40 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @author kami on 2024-11-10 15:14:34 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseWFRXXMapper extends BaseMapper { + + /** + * 查询违法人信息数据(为了转化成风险人员) + * @param startTime 查询开始时间(处警时间) + * @param endTime 查询结束时间(处警时间) + * @return 列表 + */ + @Select(" select ajbh,zjhm,xm,xbdm,lxdh from dwd_ry_zfba_wfryxx " + + " where lrsj between #{startTime} and #{endTime} " + + " and ajbh is not null") + List selectDataToRisk(@Param("startTime")String startTime, @Param("endTime")String endTime); + + /** + * @return 列表 + */ + @Select("") + List selectListByIdCode(@Param("list")List list); +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseZDRYMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseZDRYMapper.java new file mode 100644 index 0000000..6fc7fac --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseZDRYMapper.java @@ -0,0 +1,69 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.domain.*; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDRY; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @author kami on 2024-11-15 17:15:12 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseZDRYMapper extends BaseMapper { + + @Select(" select bjzdrybh,xm, sfzh,zdrylbbj, zdrylxfs,gxdw,gxdwjgdm,xzdpcs, xzdpcsdm, xzdzrr, xzdzrrlxfs, zdryxl,jlbgsj, zkztdm " + + " from dwd_ry_zddxgk_zdry " + + " where sfzh is not null") + List syncPointPeople(); + + @Select(" select a.AJBH as ajbh, a.AJMC as ajmc, a.JYAQ as jyaq, a.BARQ as barq, b.XM as xm, b.XBmc as xbmc, b.ZJHM as zjhm, a.AJLBmc as ajlbmc, b.WFSS as wfss, a.BADWIDdm as badwiddm, a.BADWIDmc as badwidmc " + + " from csga_dwd.dwd_asj_zfba_ajjbxx a, csga_dwd.dwd_ry_zfba_wfryxx b, csga_wdpcdb.wdpc_grjd_flxx c " + + " where a.ajbh = b.ajbh and a.AJLBdm = c.AJLBdm and c.LXDM = '3' AND a.BARQ > DATE_ADD(now(), INTERVAL -12 MONTH) ") + List syncViolencePerson(); + @Select("SELECT jjdbh, bjsj, bjrxm, IF(LENGTH(bjrlxdh) < 11, REGEXP_SUBSTR(bjnr, '[0-9]{11}'), bjrlxdh) AS bjrlxdh, IF(bjrzjhm IS NULL, REGEXP_SUBSTR(bjnr, '[0-9]{17}[0-9Xx]'), bjrzjhm) as bjrzjhm, bjnr, cjqk, gxdwdm, gxdwmc FROM `dwd_asj_zhtx_jjd` where (jqxzdm like '020107%' OR jqbz like '%个人极端%' ) AND bjsj > DATE_ADD(now(), INTERVAL -12 MONTH)") + List syncKillSelf(); + + @Select(" SELECT jjdbh, bjsj, bjrxm, IF(LENGTH(bjrlxdh) < 11, REGEXP_SUBSTR(bjnr, '[0-9]{11}'), bjrlxdh) AS bjrlxdh, IF(bjrzjhm IS NULL, REGEXP_SUBSTR(bjnr, '[0-9]{17}[0-9Xx]'), bjrzjhm) as bjrzjhm, jqbz, bjnr, cjqk, gxdwdm, gxdwmc " + + " FROM dwd_asj_zhtx_jjd a WHERE (jqbz LIKE '%精神病%' OR bjnr LIKE '%精神病%') AND cjqk LIKE '【结警反馈】%' AND a.bjsj > DATE_ADD(now(), INTERVAL -12 MONTH) " + + " AND EXISTS (SELECT d.bjzdrybh FROM csga_dwd.dwd_ry_zddxgk_zdry d WHERE a.bjrzjhm = d.sfzh) ") + List syncPointNoControlCrazy(); + + /** + * 故意犯罪被作出刑事判决人员(排除仍在羁押状态的)、公安机关查处吸毒人员(排除仍在羁押状态的), 发现在重点人员中 未纳入或未按要求落实双列管 + */ + @Select(" SELECT a.AJBH as ajbh, a.AJMC as ajmc, a.JYAQ as jyaq, a.BARQ as barq, b.XM as xm, b.XBmc as xbmc, b.ZJHM as zjhm, a.AJLBmc as ajlbmc, b.WFSS as wfss, a.BADWIDdm as badwiddm, a.BADWIDmc as badwidmc " + + " FROM csga_dwd.dwd_asj_zfba_ajjbxx a INNER JOIN csga_dwd.dwd_ry_zfba_wfryxx b ON a.AJBH = b.AJBH " + + " WHERE a.BARQ > DATE_ADD(now(), INTERVAL -12 MONTH) " + + " AND ((a.AJBZdm = 1 AND EXISTS (SELECT c.AJLBdm FROM csga_wdpcdb.wdpc_grjd_flxx c WHERE a.AJLBdm = c.AJLBdm AND c.LXDM = '6')) OR b.SXZM = '吸毒') " + + " AND NOT EXISTS (SELECT d.bjzdrybh FROM csga_dwd.dwd_ry_zddxgk_zdry d WHERE b.ZJHM = d.sfzh AND d.zkztdm = '1') " + + " AND NOT EXISTS (SELECT c.idcard_no FROM dwd_ry_jgzhxt_zyryxx c WHERE c.idcard_no = b.ZJHM AND c.status = 10) ") + List syncPointNoControl(); + + /** + * 看守所故意犯罪刑满释放不满5年人员, 发现在重点人员中 未纳入或未按要求落实双列管 + */ + @Select(" SELECT a.det_no as detNo, a.name as name, a.used_name as usedName, a.idcard_no as idCardNo, a.out_date as outDate, a.crime as crime, a.brief_case as briefCase, a.case_unit_id as caseUnitId, a.case_unit as caseUnit" + + " FROM csga_dwd.dwd_ry_jgzhxt_zyryxx a " + + " WHERE a.status = 11 AND a.out_reason NOT IN ('15', '19') AND DATEDIFF(now(), out_date) < 365 * 5 " + + " AND NOT EXISTS (SELECT d.bjzdrybh FROM csga_dwd.dwd_ry_zddxgk_zdry d WHERE a.idcard_no = d.sfzh AND d.zkztdm = '1') " + + " AND EXISTS (SELECT b.AJLBdm FROM csga_dwd.dwd_asj_zfba_ajjbxx b, csga_dwd.dwd_ry_zfba_wfryxx c, csga_wdpcdb.wdpc_grjd_flxx e WHERE b.AJBH = c.AJBH AND a.idcard_no = c.ZJHM AND b.AJLBdm = e.AJLBdm AND e.LXDM = '6') " + + " AND EXISTS (SELECT f.det_no FROM csga_dwd.dwd_ry_jgzhxt_zyryxx f WHERE a.idcard_no = f.idcard_no AND a.out_date > f.out_date) ") + List syncPointZDRYNoControl(); + + @Select(" SELECT xm, sfzh, lxdh, jtdz, wxjb, hcqk, tsqksm FROM csga_wdpcdb.wdpc_wjw_jsjb a " + + " WHERE NOT EXISTS (SELECT b.bjzdrybh FROM dwd_ry_zddxgk_zdry b WHERE a.SFZH = b.sfzh AND b.zkztdm = '1') AND hcqk = '未列管' ") + List syncCrazyLevelThree(); + + @Select("select xm,sfzh,lxdh,gzdw from csga_wdpcdb.wdpc_ry_syxx") + List selectDrugMan(); + + @Select(" SELECT bjzdrybh, xm, sfzh, xzdpcsdm, xzdpcs, zdryxl, xzdzrr " + + " FROM dwd_ry_zddxgk_zdry a " + + " WHERE EXISTS ( " + + " SELECT xzdzrr, xzdzrrlxfs, COUNT(DISTINCT sfzh) AS num FROM dwd_ry_zddxgk_zdry b WHERE a.xzdzrr = b.xzdzrr AND a.xzdzrrlxfs = b.xzdzrrlxfs GROUP BY xzdzrr, xzdzrrlxfs HAVING COUNT(DISTINCT sfzh) >= 100) ORDER BY xzdzrr, xzdzrrlxfs") + List noPower(); + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseZDXLMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseZDXLMapper.java new file mode 100644 index 0000000..81a4ce7 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseZDXLMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDXL; + +/** + * @author kami on 2024-11-15 17:15:12 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseZDXLMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseZYRYXXMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseZYRYXXMapper.java new file mode 100644 index 0000000..afc0ed6 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseZYRYXXMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.mapper.dwd; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZYRYXX; + +/** + * @author kami on 2024-11-12 15:16:21 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseZYRYXXMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/DataCaseVerifMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/DataCaseVerifMapper.java new file mode 100644 index 0000000..edd9a05 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/DataCaseVerifMapper.java @@ -0,0 +1,9 @@ +package com.biutag.supervisiondata.mapper.mine; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.DataCaseVerif; + +public interface DataCaseVerifMapper extends BaseMapper { + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/DataPetition12337Mapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/DataPetition12337Mapper.java new file mode 100644 index 0000000..f5dac0f --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/DataPetition12337Mapper.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.mapper.mine; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.DataPetition12337; + +public interface DataPetition12337Mapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/DataPetitionComplaintMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/DataPetitionComplaintMapper.java new file mode 100644 index 0000000..9d60139 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/DataPetitionComplaintMapper.java @@ -0,0 +1,10 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.DataPetitionComplaint; + +public interface DataPetitionComplaintMapper extends BaseMapper { + + + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/ModelMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/ModelMapper.java new file mode 100644 index 0000000..c4d2ff0 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/ModelMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.Model; + +public interface ModelMapper extends BaseMapper { + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskModelTaskClueMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskModelTaskClueMapper.java new file mode 100644 index 0000000..d71d33a --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskModelTaskClueMapper.java @@ -0,0 +1,18 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @author kami on 2024-11-11 11:37:50 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskModelTaskClueMapper extends BaseMapper { + + @Select(" select * from risk_model_task_clue where id_code in (select id_code from risk_model_task_clue where model_id = 43 and risk_reason = '特定人员' group by id_code having count(1) > 1) and model_id = 43 and risk_reason = '特定人员' ") + List selectToKill(); +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskPersonalControlRecordMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskPersonalControlRecordMapper.java new file mode 100644 index 0000000..d75da73 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskPersonalControlRecordMapper.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalControlRecord; + +/** + * @author kami on 2024-11-08 19:43:32 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskPersonalControlRecordMapper extends BaseMapper { + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskPersonalMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskPersonalMapper.java new file mode 100644 index 0000000..29ebd48 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskPersonalMapper.java @@ -0,0 +1,35 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author kami on 2024-11-08 19:43:32 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskPersonalMapper extends BaseMapper { + + @Insert("") + int update(@Param("item") RiskPersonal item); + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskPersonalTagMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskPersonalTagMapper.java new file mode 100644 index 0000000..340e084 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskPersonalTagMapper.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; + +/** + * @author kami on 2024-11-08 19:43:32 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskPersonalTagMapper extends BaseMapper { + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskScoreRuleMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskScoreRuleMapper.java new file mode 100644 index 0000000..5f28b15 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskScoreRuleMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskScoreRule; + +public interface RiskScoreRuleMapper extends BaseMapper { + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskTaskMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskTaskMapper.java new file mode 100644 index 0000000..30522a9 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskTaskMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTask; + +/** + * @author kami on 2024-11-11 14:03:18 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskTaskMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskTestMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskTestMapper.java new file mode 100644 index 0000000..5b87b18 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/RiskTestMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTest; + +/** + * @author kami on 2024-11-13 16:17:36 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskTestMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/SupDepartMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/SupDepartMapper.java new file mode 100644 index 0000000..01c2d27 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/SupDepartMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.SupDepart; + +public interface SupDepartMapper extends BaseMapper { + +} diff --git a/src/main/java/com/biutag/supervisiondata/mapper/mine/SupExternalDepartMapper.java b/src/main/java/com/biutag/supervisiondata/mapper/mine/SupExternalDepartMapper.java new file mode 100644 index 0000000..4b206b5 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/mapper/mine/SupExternalDepartMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervisiondata.mapper.mine; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervisiondata.pojo.entity.mine.SupExternalDepart; + +public interface SupExternalDepartMapper extends BaseMapper { + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/ClueData.java b/src/main/java/com/biutag/supervisiondata/pojo/ClueData.java new file mode 100644 index 0000000..a2f9e77 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/ClueData.java @@ -0,0 +1,47 @@ +package com.biutag.supervisiondata.pojo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author kami on 2024-11-13 13:08:18 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@Builder +@Slf4j +@AllArgsConstructor +@NoArgsConstructor(force = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ClueData implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + String idCode; + + String id; + + String name; + + String tag; + + LocalDateTime eventTime; + + String departId; + + String departName; + + Integer personId; + + String sourceData; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/ClueInfo.java b/src/main/java/com/biutag/supervisiondata/pojo/ClueInfo.java new file mode 100644 index 0000000..80aa370 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/ClueInfo.java @@ -0,0 +1,47 @@ +package com.biutag.supervisiondata.pojo; + +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.io.Serial; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @author kami on 2024-11-10 15:55:50 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@Builder +@Slf4j +@AllArgsConstructor +@NoArgsConstructor(force = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ClueInfo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 修改的信息 + */ + @Builder.Default + List toUpdate = new ArrayList<>(); + /** + * 新增的信息 + */ + @Builder.Default + List toInsert = new ArrayList<>(); + /** + * 隐藏的信息 + */ + @Builder.Default + List toHidden = new ArrayList<>(); + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java b/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java new file mode 100644 index 0000000..574ffc0 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/constants/Default.java @@ -0,0 +1,43 @@ +package com.biutag.supervisiondata.pojo.constants; + +import lombok.experimental.UtilityClass; + +/** + * @author kami on 2024-11-09 16:33:11 + * @version 0.0.1 + * @since 1.8 + */ +@UtilityClass +public class Default { + + public static final String BIG_TAG_JJD = "涉相关警情人员"; + + public static final String SHR_TAG = "受害人"; + + public static final String WFR_TAG = "违法人"; + + public static final String BIG_TAG_SHWFR = "涉违法犯罪人员"; + + public static final String PETITION_CASE_TAG = "案件核查"; + + public static final String PETITION_12337_TAG = "12337"; + + public static final String PETITION_TAG = "信访投诉"; + + public static final String BIG_TAG_PETITION = "涉投诉举报信访人员"; + + public static final String BA_TAG = "从事特种职业-保安"; + + public static final String BIG_TAG_TRUBO = "涉矛盾纠纷"; + + public static final String FIGHT_BORN = "成长地区暴力警情高于平均水平"; + + public static final String FIGHT_MUCH = "高风险矛盾纠纷"; + + public static final String POINT_POEPLE = "特定人员"; + + public static final String NO_CONTROL = "专项排查关注人员"; + + public static final String CALL_REDIS = "call:point"; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/constants/ThreadConstants.java b/src/main/java/com/biutag/supervisiondata/pojo/constants/ThreadConstants.java new file mode 100644 index 0000000..37f8909 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/constants/ThreadConstants.java @@ -0,0 +1,16 @@ +package com.biutag.supervisiondata.pojo.constants; + +/** + * @author kami + * @version 1.0 + * @since 2022/7/8 17:16 + */ +public class ThreadConstants { + + private ThreadConstants(){} + + /** + * 链路id + */ + public static final String TRACE_ID = "trace_id"; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/CrazyLevelThree.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/CrazyLevelThree.java new file mode 100644 index 0000000..32ff74e --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/CrazyLevelThree.java @@ -0,0 +1,28 @@ +package com.biutag.supervisiondata.pojo.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author kami on 2024-11-18 14:42:07 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class CrazyLevelThree implements Serializable { + + String xm; + + String sfzh; + + String lxdh; + + String jtdz; + + String wxjb; + + String hcqk; + + String tsqksm; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/Drug.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/Drug.java new file mode 100644 index 0000000..20513c9 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/Drug.java @@ -0,0 +1,22 @@ +package com.biutag.supervisiondata.pojo.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author kami on 2024-11-18 21:33:57 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class Drug implements Serializable { + + String xm; + + String sfzh; + + String lxdh; + + String gzdw; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/Extreme.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/Extreme.java new file mode 100644 index 0000000..14930a2 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/Extreme.java @@ -0,0 +1,34 @@ +package com.biutag.supervisiondata.pojo.domain; + +import lombok.Data; + +import java.util.Date; + +/** + * @author kami on 2024-11-17 17:21:52 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class Extreme { + + String jjdbh; + + Date bjsj; + + String bjrxm; + + String bjrlxdh; + + String bjrzjhm; + + String jqbz; + + String bjnr; + + String cjqk; + + String gxdwdm; + + String gxdwmc; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/FightMan.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/FightMan.java new file mode 100644 index 0000000..ffccddc --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/FightMan.java @@ -0,0 +1,24 @@ +package com.biutag.supervisiondata.pojo.domain; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author kami on 2024-11-15 19:18:30 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class FightMan implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + String gmsfhm; + + Integer fightCount; + + Integer dateCount; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/NoControl.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/NoControl.java new file mode 100644 index 0000000..1014906 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/NoControl.java @@ -0,0 +1,39 @@ +package com.biutag.supervisiondata.pojo.domain; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author kami on 2024-11-18 14:31:42 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class NoControl implements Serializable { + /** + * 在押人员编号 + */ + String detNo; + + String name; + + String usedName; + + String idCardNo; + /** + * 出所事件 + */ + Date outDate; + + String crime; + /** + * 违法情况 + */ + String briefCase; + + String caseUnitId; + + String caseUnit; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/PointCall.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/PointCall.java new file mode 100644 index 0000000..b513e1d --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/PointCall.java @@ -0,0 +1,33 @@ +package com.biutag.supervisiondata.pojo.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author kami on 2024-11-21 12:14:29 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class PointCall implements Serializable { + + String name; + + String mobiles; + + String idCode; + + String labels; + + Integer callCount; + + Integer noUsefulCallCount; + + String desc; + + String controlId; + + String controlName; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/PointType.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/PointType.java new file mode 100644 index 0000000..5d84b3e --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/PointType.java @@ -0,0 +1,20 @@ +package com.biutag.supervisiondata.pojo.domain; + +import lombok.Data; + +import java.util.List; + +/** + * @author kami on 2024-11-15 17:28:46 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class PointType { + + String name; + + String code; + + List child; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/TaskParamDomain.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/TaskParamDomain.java new file mode 100644 index 0000000..f4ae0ce --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/TaskParamDomain.java @@ -0,0 +1,57 @@ +package com.biutag.supervisiondata.pojo.domain; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.*; +import lombok.extern.slf4j.Slf4j; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author kami on 2024-11-12 10:35:12 + * @version 0.0.1 + * @since 1.8 + */ +public class TaskParamDomain { + + public TaskParamDomain(List persons, Map> map) { + this.map = map; + this.persons = persons; + List idCodes = persons.stream().map(RiskPersonal::getIdCode).filter(Objects::nonNull).toList(); + // 切割 每次查10000条 + this.idCards = IntStream.range(0, (idCodes.size() + 9999) / 10000) + .mapToObj(i -> idCodes.subList(i * 10000, Math.min((i + 1) * 10000, idCodes.size()))) + .toList(); + } + + @Getter + List persons; + @Getter + Map> map; + + @Getter + List> idCards; + + Map oldMap; + + public Map getOldMap(Integer modelId, boolean forceUpdate) { + if(forceUpdate) { + this.refreshMap(modelId); + } + if(this.oldMap == null) { + this.refreshMap(modelId); + } + return this.oldMap; + } + + private void refreshMap(Integer modelId) { + // 旧数据 + this.oldMap = Optional.ofNullable(this.map.get(modelId)).map(it -> it.stream().collect(Collectors.toMap(RiskModelTaskClue::getIdCode, Function.identity(), (oldValue, newValue) -> newValue))).orElse(new HashMap<>()); + } + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/domain/Violence.java b/src/main/java/com/biutag/supervisiondata/pojo/domain/Violence.java new file mode 100644 index 0000000..862fdfc --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/domain/Violence.java @@ -0,0 +1,36 @@ +package com.biutag.supervisiondata.pojo.domain; + +import lombok.Data; + +import java.util.Date; + +/** + * @author kami on 2024-11-17 16:02:12 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class Violence { + + String ajbh; + + String ajmc; + + String jyaq; + + Date barq; + + String xm; + + String xbmc; + + String zjhm; + + String ajlbmc; + + String wfss; + + String badwiddm; + + String badwidmc; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/ads/GBaseSYRKXX.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/ads/GBaseSYRKXX.java new file mode 100644 index 0000000..25bd223 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/ads/GBaseSYRKXX.java @@ -0,0 +1,64 @@ +package com.biutag.supervisiondata.pojo.entity.ads; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * ads 实有人口信息 + * @author kami on 2024-11-08 19:54:52 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("ads_ssxx_syrkxx") +public class GBaseSYRKXX { + /** + * 公民身份号码 + */ + @TableField("gmsfhm") + String gmsfhm; + /** + * 姓名 + */ + @TableField("xm") + String xm; + /** + * 性别代码 + */ + @TableField("xbdm") + String xbdm; + /** + * 联系电话 + */ + @TableField("lxdh") + String lxdh; + /** + * 出生日期 + */ + @TableField("csrq") + Date csrq; + + /** + * 学历名称 + */ + @TableField("xlmc") + String xlmc; + /** + * 出生地代码 + */ + @TableField("csdxzqhdm") + String csdxzqhdm; + /** + * 出生地名称 + */ + @TableField("csdxzqhmc") + String csdxzqhmc; + @TableField("sspcsdm") + String sspcsdm; + @TableField("sspcsmc") + String sspcsmc; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseAJJBXX.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseAJJBXX.java new file mode 100644 index 0000000..6369f29 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseAJJBXX.java @@ -0,0 +1,49 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 案件基本信息 + * @author kami on 2024-11-10 14:47:22 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("dwd_asj_zfba_ajjbxx") +public class GBaseAJJBXX implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 案件编号 + */ + @TableField("ajbh") + String ajbh; + /** + * 办案单位ID + */ + @TableField("badwiddm") + String badwiddm; + /** + * 办案单位ID_描述 + */ + @TableField("badwidmc") + String badwidmc; + /** + * 案件类别名称 + */ + @TableField("ajlbmc") + String ajlbmc; + /** + * 报案日期 + */ + @TableField("barq") + Date barq; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseBAXX.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseBAXX.java new file mode 100644 index 0000000..ca63771 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseBAXX.java @@ -0,0 +1,36 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 保安信息 + * @author kami on 2024-11-12 17:59:40 + * @version 0.0.1 + * @since 1.8 + */ +@TableName("dwd_ry_nbgl_bacyryxxdjb") +@Setter +@Getter +public class GBaseBAXX implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + @TableField("xm") + String xm; + @TableField("sfzhm") + String sfzhm; + @TableField("zw") + String zw; + @TableField("ryztdm") + String ryztdm; + @TableField("ryztmc") + String ryztmc; + @TableField("rzsj") + String rzsj; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseBAYJ.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseBAYJ.java new file mode 100644 index 0000000..364fb62 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseBAYJ.java @@ -0,0 +1,36 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 保安预警 + * @author kami on 2024-11-12 17:59:50 + * @version 0.0.1 + * @since 1.8 + */ +@TableName("dwd_ry_nbgl_bayyj") +@Setter +@Getter +public class GBaseBAYJ implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @TableField("xm") + String xm; + @TableField("sfzhm") + String sfzhm; + @TableField("zw") + String zw; + + @TableField("ryztmc") + String ryztmc; + @TableField("rzsj") + String rzsj; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseHY.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseHY.java new file mode 100644 index 0000000..0440c83 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseHY.java @@ -0,0 +1,56 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * @author kami on 2024-11-13 15:13:08 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("dwd_ry_kxgxzyk_hydjxxb") +public class GBaseHY implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @TableField("xlzjdjzh") + String xlzjdjzh; + + /** + * ==1的 + */ + @TableField("yxbzdm") + String yxbzdm; + /** + * 男方身份号码 + */ + /** + * 女方身份号码 + */ + @TableField("nfsfhm") + String nfsfhm; + @TableField("nvfsfhm") + String nvfsfhm; + /** + * 登记日期 + */ + @TableField("djrq") + Date djrq; + /** + * 类型代码 + */ + @TableField("ywlxdmdm") + String ywlxdmdm; + /** + * 类型名称 + */ + @TableField("ywlxdmmc") + String ywlxdmmc; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseJJD.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseJJD.java new file mode 100644 index 0000000..400206f --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseJJD.java @@ -0,0 +1,74 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +@TableName("dwd_asj_zhtx_jjd") +@Setter +@Getter +public class GBaseJJD implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + @TableField("jjdbh") + private String jjdbh; + + // 管辖单位代码 + @TableField("gxdwdm") + private String gxdwdm; + + // 管辖单位名称 + @TableField("gxdwmc") + private String gxdwmc; + /** + * 报警人姓名 + */ + @TableField("bjrxm") + private String bjrxm; + /** + * 报警人性别 + */ + @TableField("bjrxb") + private String bjrxb; + /** + * 报警人联系电话 + */ + @TableField("bjrlxdh") + private String bjrlxdh; + + @TableField("bjdh") + String bjdh; + /** + * 报警人证件号码 + */ + @TableField("bjrzjhm") + private String bjrzjhm; + /** + * 警情性质名称 + */ + @TableField("jqxzmc") + private String jqxzmc; + @TableField("jqxzdm") + private String jqxzdm; + /** + * 报警内容 + */ + @TableField("bjnr") + private String bjnr; + /** + * 处警情况 + */ + @TableField("cjqk") + private String cjqk; + /** + * 报警时间 + */ + @TableField("bjsj") + private Date bjsj; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseSHRXX.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseSHRXX.java new file mode 100644 index 0000000..c419e67 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseSHRXX.java @@ -0,0 +1,47 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 受害人信息 + * @author kami on 2024-11-10 14:47:13 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("dwd_asj_zfba_shrxx") +public class GBaseSHRXX implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 公民身份号码 + */ + @TableField("gmsfhm") + String gmsfhm; + /** + * 姓名 + */ + @TableField("xm") + String xm; + /** + * 性别 + */ + @TableField("xbdm") + String xbdm; + /** + * 联系方式 + */ + @TableField("lxdh") + String lxdh; + /** + * 案件编号 + */ + @TableField("ajbh") + String ajbh; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseTbDZdrylb.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseTbDZdrylb.java new file mode 100644 index 0000000..f31b297 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseTbDZdrylb.java @@ -0,0 +1,20 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @author kami on 2024-11-20 16:19:23 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("tb_d_zdrylb") +public class GBaseTbDZdrylb { + + @TableField("`code`") + String code; + @TableField("`define`") + String define; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseWFRXX.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseWFRXX.java new file mode 100644 index 0000000..b2c450a --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseWFRXX.java @@ -0,0 +1,52 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 违法人信息 + * @author kami on 2024-11-10 14:47:22 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("dwd_ry_zfba_wfryxx") +public class GBaseWFRXX implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 姓名 + */ + @TableField("xm") + String xm; + /** + * 性别代码 + */ + @TableField("xbdm") + String xbdm; + /** + * 证件号码 + */ + @TableField("zjhm") + String zjhm; + /** + * 联系方式 + */ + @TableField("lxdh") + String lxdh; + /** + * 案件编号 + */ + @TableField("ajbh") + String ajbh; + /** + * 罪名名称 + */ + @TableField("sxzm") + String sxzm; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseZDRY.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseZDRY.java new file mode 100644 index 0000000..e93e40f --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseZDRY.java @@ -0,0 +1,107 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author kami on 2024-11-14 19:00:53 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("dwd_ry_zddxgk_zdry") +public class GBaseZDRY implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 部级重点人员编号 + */ + @TableField("bjzdrybh") + String bjzdrybh; + + @TableField("xm") + String xm; + /** + * 性别代码 + */ + @TableField("xbdm") + String xbdm; + /** + * 身份证号 + */ + @TableField("sfzh") + String sfzh; + + /** + * 联系方式 + */ + @TableField("zdrylxfs") + String zdrylxfs; + /** + * 管辖单位 + */ + @TableField("gxdw") + String gxdw; + /** + * 管辖单位代码 + */ + @TableField("gxdwjgdm") + String gxdwjgdm; + /** + * 现住地派出所 + */ + @TableField("xzdpcs") + String xzdpcs; + /** + * 现住地派出所代码 + */ + @TableField("xzdpcsdm") + String xzdpcsdm; + + /** + * 现住地责任人 + */ + @TableField("xzdzrr") + String xzdzrr; + + /** + * 现住地责任人联系方式 + */ + @TableField("xzdzrrlxfs") + String xzdzrrlxfs; + + /** + * 重点人员细类 + */ + @TableField("zdryxl") + String zdryxl; + + /** + * 重点人员类别标记 + */ + @TableField("zdrylbbj") + String zdrylbbj; + + /** + * 记录变更时间 yyyyMMddHHmmss + */ + @TableField("jlbgsj") + String jlbgsj; + /** + * 在空状态代码 1 - 在控 + */ + @TableField("zkztdm") + String zkztdm; + + /** + * 在控人员级别代码 + */ + @TableField("zkryjbdm") + String zkryjbdm; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseZDXL.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseZDXL.java new file mode 100644 index 0000000..a00674b --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseZDXL.java @@ -0,0 +1,33 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author kami on 2024-11-15 17:12:15 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("dwd_ry_zddxgk_zdryxl") +public class GBaseZDXL implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + @TableField("id") + String id; + /** + * 描述 + */ + @TableField("define") + String define; + /** + * 父级id + */ + @TableField("fjdid") + String fjdid; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseZYRYXX.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseZYRYXX.java new file mode 100644 index 0000000..346d81b --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/dwd/GBaseZYRYXX.java @@ -0,0 +1,48 @@ +package com.biutag.supervisiondata.pojo.entity.dwd; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 在押人员 + * @author kami on 2024-11-12 14:35:40 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("dwd_ry_jgzhxt_zyryxx") +public class GBaseZYRYXX implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 编号 + */ + @TableField("det_no") + String detNo; + /** + * 证件号 + */ + @TableField("idcard_no") + String idCardNo; + /** + * 服刑事件 两位年 两位月两位日 + */ + @TableField("rslt_time") + String rsltTime; + + /** + * 监所id + */ + @TableField("prison_id") + String prisonId; + /** + * 监所名称 + */ + @TableField("prison_name") + String prisonName; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/DataCaseVerif.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/DataCaseVerif.java new file mode 100644 index 0000000..24873c6 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/DataCaseVerif.java @@ -0,0 +1,79 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + + +@Data +@TableName("data_case_verif") +public class DataCaseVerif { + + // 样本源头编号 + @TableId(value = "originId") + private String originId; + + // 问题发现时间 + @TableField("discovery_time") + private LocalDateTime discoveryTime; + + // 问题发生时间 + @TableField("happen_time") + private LocalDateTime happenTime; + + // 问题来源 + @TableField("problem_sources") + private String problemSources; + + // 投诉人姓名 + @TableField("responder_name") + private String responderName; + + // 投诉人电话 + @TableField("responder_phone") + private String responderPhone; + + // 业务类型 + @TableField("business_type_name") + private String businessTypeName; + + // 涉及问题 + @TableField("involve_problem") + private String involveProblem; + + // 涉及警种 + @TableField("police_type_name") + private String policeTypeName; + + // 涉及单位 二级 + private String secondDepartId; + + private String secondDepartName; + + // 所对 + private String thirdDepartId; + + private String thirdDepartName; + + // 事情简述 + @TableField("thing_desc") + private String thingDesc; + + // + @TableField("create_time") + private LocalDateTime createTime; + + // 分发状态 + private String distributionState; + + // 是否属实 + @TableField("is_real") + private Integer isReal; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/DataPetition12337.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/DataPetition12337.java new file mode 100644 index 0000000..cd1155b --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/DataPetition12337.java @@ -0,0 +1,605 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@TableName(value ="data_petition_12337") +@Data +public class DataPetition12337 implements Serializable { + /** + * 唯一编号 + */ + @TableId(value = "only_id") + private String onlyId; + + /** + * 外网线索编号 + */ + @TableField(value = "external_id") + private String externalId; + + /** + * 内网线索编号 + */ + @TableField(value = "inner_id") + private String innerId; + + /** + * 单机版线索编号 + */ + @TableField(value = "stand_alone") + private String standAlone; + + /** + * 信息受理登记时间 + */ + @TableField(value = "discover_time") + private LocalDateTime discoverTime; + + /** + * 线索来源 + */ + @TableField(value = "letter_source") + private String letterSource; + + /** + * 举报人姓名 + */ + @TableField(value = "name") + private String name; + + /** + * 手机号码 + */ + @TableField(value = "phone") + private String phone; + + /** + * 身份证号 + */ + @TableField(value = "id_code") + private String idCode; + + /** + * 举报人(省) + */ + @TableField(value = "reporter_provincial") + private String reporterProvincial; + + /** + * 举报人(市) + */ + @TableField(value = "reporter_city") + private String reporterCity; + + /** + * 举报人(县) + */ + @TableField(value = "reporter_county") + private String reporterCounty; + + /** + * 现住地详址 + */ + @TableField(value = "address") + private String address; + + /** + * 是否政法干警 + */ + @TableField(value = "is_law_police") + private String isLawPolice; + + /** + * 被举报人姓名 + */ + @TableField(value = "reported_name") + private String reportedName; + + /** + * 所属系统 + */ + @TableField(value = "belong_system") + private String belongSystem; + + /** + * 人员类别 + */ + @TableField(value = "person_type") + private String personType; + + /** + * 被举报人所在地(省) + */ + @TableField(value = "reported_provincial") + private String reportedProvincial; + + /** + * 被举报人所在地(市) + */ + @TableField(value = "reported_city") + private String reportedCity; + + /** + * 被举报人所在地(县) + */ + @TableField(value = "reported_county") + private String reportedCounty; + + /** + * 单位名称 + */ + @TableField(value = "org_name") + private String orgName; + + /** + * 单位所属层级 + */ + @TableField(value = "org_level") + private String orgLevel; + + /** + * 具体职务 + */ + @TableField(value = "job_name") + private String jobName; + + /** + * 职级 + */ + @TableField(value = "job_level") + private String jobLevel; + + /** + * 被举报单位名称 + */ + @TableField(value = "reported_org_name") + private String reportedOrgName; + + /** + * 被举报单位所属系统 + */ + @TableField(value = "reported_org_belong") + private String reportedOrgBelong; + + /** + * 被举报单位所在地(省) + */ + @TableField(value = "reported_org_provincial") + private String reportedOrgProvincial; + + /** + * 被举报单位所在地(市) + */ + @TableField(value = "reported_org_city") + private String reportedOrgCity; + + /** + * 被举报单位所在地(县) + */ + @TableField(value = "reported_org_county") + private String reportedOrgCounty; + + /** + * 被举报单位单位所属层级 + */ + @TableField(value = "reported_org_level") + private String reportedOrgLevel; + + /** + * 涉嫌违纪问题项目 + */ + @TableField(value = "against_pro_project") + private String againstProProject; + + /** + * 涉嫌贪污贿赂类犯罪 + */ + @TableField(value = "corruption_guilt") + private String corruptionGuilt; + + /** + * 涉嫌渎职类犯罪 + */ + @TableField(value = "omission_guilt") + private String omissionGuilt; + + /** + * 涉嫌侵犯公民人身权利类犯罪 + */ + @TableField(value = "invade_entitlement_guilt") + private String invadeEntitlementGuilt; + + /** + * 涉嫌侵犯财产类犯罪 + */ + @TableField(value = "invade_finance_guilt") + private String invadeFinanceGuilt; + + /** + * 其他 + */ + @TableField(value = "other_guilt") + private String otherGuilt; + + /** + * 顽瘴痼疾项目 + */ + @TableField(value = "hard_pro_project") + private String hardProProject; + + /** + * 涉嫌违纪违法事项 + */ + @TableField(value = "wjwf_project") + private String wjwfProject; + + /** + * 转办时间 + */ + @TableField(value = "pass_time") + private String passTime; + + /** + * 转办单位 + */ + @TableField(value = "pass_org") + private String passOrg; + + /** + * 核查时间 + */ + @TableField(value = "review_time") + private String reviewTime; + + /** + * 核查单位 + */ + @TableField(value = "review_org") + private String reviewOrg; + + /** + * 核查人 + */ + @TableField(value = "review_person_name") + private String reviewPersonName; + + /** + * 核查人联系方式 + */ + @TableField(value = "review_person_phone") + private String reviewPersonPhone; + + /** + * 被核查人类别 + */ + @TableField(value = "reviewed_person_type") + private String reviewedPersonType; + + /** + * 被核查人是否属于领导班子成员 + */ + @TableField(value = "reviewed_person_isleader") + private String reviewedPersonIsleader; + + /** + * 是否核查完结 + */ + @TableField(value = "reviewed_isover") + private String reviewedIsover; + + /** + * 核查简要情况 + */ + @TableField(value = "review_des") + private String reviewDes; + + /** + * 办理结果 + */ + @TableField(value = "process_result") + private String processResult; + + /** + * 是否进行线索初核 + */ + @TableField(value = "is_first_view") + private String isFirstView; + + /** + * 核查组组长 + */ + @TableField(value = "review_leader") + private String reviewLeader; + + /** + * (核查组组长)联系方式 + */ + @TableField(value = "review_leader_phone") + private String reviewLeaderPhone; + + /** + * 初核情况 + */ + @TableField(value = "first_view_des") + private String firstViewDes; + + /** + * 是否立案审查调查 + */ + @TableField(value = "is_register_case") + private String isRegisterCase; + + /** + * 立案审查调查情况 + */ + @TableField(value = "register_case_des") + private String registerCaseDes; + + /** + * 是否处分处理 + */ + @TableField(value = "is_punish") + private String isPunish; + + /** + * 处理结论形态 + */ + @TableField(value = "process_res_type") + private String processResType; + + /** + * 处理结论结果 + */ + @TableField(value = "process_res_des") + private String processResDes; + + /** + * 处分处理情况 + */ + @TableField(value = "punish_des") + private String punishDes; + + /** + * 是否适用自查从宽政策 + */ + @TableField(value = "is_tolerant") + private String isTolerant; + + /** + * 是否办结 + */ + @TableField(value = "is_over") + private String isOver; + + /** + * 联系时间 + */ + @TableField(value = "contact_time") + private String contactTime; + + /** + * 联系单位 + */ + @TableField(value = "contact_org") + private String contactOrg; + + /** + * 联系人 + */ + @TableField(value = "contact_person_name") + private String contactPersonName; + + /** + * 联系方式 + */ + @TableField(value = "contact_type") + private String contactType; + + /** + * 与举报人联系沟通详情 + */ + @TableField(value = "contact_reporter_des") + private String contactReporterDes; + + /** + * 超期未反馈原因 + */ + @TableField(value = "overtime_reason") + private String overtimeReason; + + /** + * 是否申请异议 + */ + @TableField(value = "is_dissent") + private String isDissent; + + /** + * 目标省份 + */ + @TableField(value = "aim_provincial") + private String aimProvincial; + + /** + * 申请人 + */ + @TableField(value = "apply_person_name") + private String applyPersonName; + + /** + * 联系方式 + */ + @TableField(value = "apply_person_phone") + private String applyPersonPhone; + + /** + * 申请原因 + */ + @TableField(value = "apply_reason") + private String applyReason; + + /** + * 异议处理方式 + */ + @TableField(value = "dissent_handle") + private String dissentHandle; + + /** + * 处理说明 + */ + @TableField(value = "dissent_handle_explain") + private String dissentHandleExplain; + + /** + * 是否存在附件 + */ + @TableField(value = "is_annex") + private String isAnnex; + + /** + * 附件文件名 + */ + @TableField(value = "annex_name") + private String annexName; + + /** + * 线索举报时间 + */ + @TableField(value = "report_time") + private String reportTime; + + /** + * 导入时间 + */ + @TableField(value = "enter_time") + private String enterTime; + + /** + * 分发时间 + */ + @TableField(value = "distribute_time") + private String distributeTime; + + /** + * 是否违纪违法线索 + */ + @TableField(value = "is_against_clue") + private String isAgainstClue; + + /** + * 是否涉法涉诉线索 + */ + @TableField(value = "is_appeal_clue") + private String isAppealClue; + + /** + * 是否范围外线索 + */ + @TableField(value = "is_overround_clue") + private String isOverroundClue; + + /** + * 是否无效线索 + */ + @TableField(value = "is_invalid_clue") + private String isInvalidClue; + + /** + * 是否重点线索 + */ + @TableField(value = "is_important_clue") + private String isImportantClue; + + /** + * 线索是否重复 + */ + @TableField(value = "is_repeat_clue") + private String isRepeatClue; + + /** + * 重复线索组别 + */ + @TableField(value = "repeat_clue_type") + private String repeatClueType; + + /** + * 线索是否进行了机筛 + */ + @TableField(value = "is_machine") + private String isMachine; + + /** + * 机筛线索时间 + */ + @TableField(value = "machine_tme") + private String machineTme; + + /** + * 线索是否经过人工筛查 + */ + @TableField(value = "is_person") + private String isPerson; + + /** + * 人工筛查线索时间 + */ + @TableField(value = "person_time") + private String personTime; + + /** + * 是否关注线索 + */ + @TableField(value = "is_care") + private String isCare; + + /** + * 关注时间 + */ + @TableField(value = "care_time") + private String careTime; + + /** + * 操作时间 + */ + @TableField(value = "handle_time") + private String handleTime; + + /** + * 二级机构id + */ + @TableField(value = "second_depart_id") + private String secondDepartId; + + /** + * 二级机构名字 + */ + @TableField(value = "second_depart_name") + private String secondDepartName; + + /** + * 三级机构id + */ + @TableField(value = "third_depart_id") + private String thirdDepartId; + + /** + * 三级机构简称 + */ + @TableField(value = "third_depart_name") + private String thirdDepartName; + + + /** + * 下发状态 + */ + @TableField(value = "distributionState") + private String distributionState; + + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/DataPetitionComplaint.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/DataPetitionComplaint.java new file mode 100644 index 0000000..7b55ee2 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/DataPetitionComplaint.java @@ -0,0 +1,93 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * 信访投诉 + */ +@Setter +@Getter +public class DataPetitionComplaint { + + // 信件编号 + @TableId + private String originId; + + // 投诉渠道 + @TableField("channel_for_filing_complaints") + private String channelForFilingComplaints; + + // 受理层级 + @TableField("acceptance_level") + private String acceptanceLevel; + + // 登记时间 + private LocalDateTime discoveryTime; + + // 投诉人 + @TableField("responder_name") + private String responderName; + + // 投诉人电话 + @TableField("responder_phone") + private String responderPhone; + @TableField("responder_id_code") + private String responderIdCode; + + // 初重信访 + @TableField("initial_petition") + private String initialPetition; + + // 缠访闹访 + @TableField("entanglement_visits") + private Boolean entanglementVisits; + + // 群众集访 + @TableField("mass_visits") + private Boolean massVisits; + + // 涉嫌问题 + @TableField("involve_problem") + private String involveProblem; + + // 业务类别 + @TableField("business_type_name") + private String businessTypeName; + + // 涉及警种名称 + @TableField("police_type_name") + private String policeTypeName; + + // 具体内容 + @TableField("thing_desc") + private String thingDesc; + + + //--------------------- + + // 涉及单位 二级 + private String secondDepartId; + + private String secondDepartName; + + // 所对 + private String thirdDepartId; + + private String thirdDepartName; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; + + // 来源 + private String problemSourcesCode; + + // 分发状态 + private String distributionState; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/Model.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/Model.java new file mode 100644 index 0000000..4f1d567 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/Model.java @@ -0,0 +1,96 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class Model { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("model_name") + private String modelName; + + private Integer classId; + + // + @TableField("icon") + private String icon; + + // + @TableField("remarks") + private String remarks; + + // 分发方式 + @TableField("distribution_method") + private String distributionMethod; + + // 分发周期 + @TableField("distribution_cycle") + private String distributionCycle; + + // 分发周期 周 + private String distributionCycleDayOfWeek; + + // 分发周期 时间 + private String distributionCycleTime; + + // 分发周期,cron 表达式 + private String distributionCycleExpression; + + // 限时 + @TableField("time_limit") + private String timeLimit; + + // + @TableField("max_sign_duration") + private Integer maxSignDuration; + + // + @TableField("max_handle_duration") + private Integer maxHandleDuration; + + // + @TableField("max_extension_duration") + private Integer maxExtensionDuration; + + // + @TableField("distribution_flow") + private String distributionFlow; + + @TableField("approval_flow") + private String approvalFlow; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") + @TableField("create_time") + private LocalDateTime createTime; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") + @TableField("update_time") + private LocalDateTime updateTime; + + private String createDepartId; + + private String createDepartName; + + // 建模方式 + private String modelingMethod; + + // 模型数据类型 + private String modelDataType; + + @TableField("model_sql") + private String modelSql; + + private Integer riskScoreRuleId; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskModelTaskClue.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskModelTaskClue.java new file mode 100644 index 0000000..1f4d248 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskModelTaskClue.java @@ -0,0 +1,108 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author kami on 2024-11-11 11:37:50 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("risk_model_task_clue") +public class RiskModelTaskClue implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 模型id + */ + @TableField("`model_id`") + Integer modelId; + + /** + * 姓名 + */ + @TableField("`name`") + String name; + + /** + * 证件号码 + */ + @TableField("id_code") + String idCode; + + // 预警内容 + @TableField("thing_desc") + private String thingDesc; + + // 状态 默认 0-未分发 1-已分发 2-已处理 + @TableField("distribution_state") + private Integer distributionState; + /** + * 任务id + */ + @TableField("task_id") + Integer taskId; + /** + * 原始id + */ + @TableField("source_id") + String sourceId; + /** + * 案件id,“,”分割 + */ + @TableField("case_ids") + String caseIds; + /** + * 问题id + */ + @TableField("negative_id") + String negative_id; + /** + * 风险原因 + */ + @TableField("risk_reason") + String riskReason; + /** + * 数据详情 JSON + */ + @TableField("data") + String data; + /** + * 分数 + */ + @TableField("score") + Integer score; + /** + * 发生时间 + */ + @TableField("event_time") + LocalDateTime eventTime; + /** + * 创建时间 + */ + @TableField("create_time") + LocalDateTime createTime; + /** + * 修改时间 + */ + @TableField("update_time") + LocalDateTime updateTime; + + /** + * 逻辑删除键 + */ + Integer del; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskPersonal.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskPersonal.java new file mode 100644 index 0000000..c5d6fee --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskPersonal.java @@ -0,0 +1,96 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author kami on 2024-11-08 18:53:08 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("risk_personal") +public class RiskPersonal implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 姓名 + */ + @TableField("`name`") + String name; + /** + * 性别男1女2 + */ + @TableField("gender") + String gender; + /** + * 年龄 + */ + @TableField("age") + Integer age; + + /** + * 证件号码 + */ + @TableField("id_code") + String idCode; + /** + * 手机号码 + */ + @TableField("mobile_number") + String mobileNumber; + /** + * 大标签预览 + */ + @TableField("tags") + String tags; + /** + * 风险指数 + */ + @TableField("risk_score") + Double rickScore; + /** + * 管控部门编号 + */ + @TableField("control_depart_id") + String controlDepartId; + /** + * 管控部门名称 + */ + @TableField("control_depart_name") + String controlDepartName; + + /** + * 管控时间 + */ + @TableField("control_time") + LocalDateTime controlTime; + /** + * 创建时间 + */ + @TableField("create_time") + LocalDateTime createTime; + /** + * 异常信息 + */ + @TableField("error_msg") + String errorMsg; + /** + * 逻辑删除键 + */ + @TableLogic(value = "0", delval = "1") + Integer del; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskPersonalControlRecord.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskPersonalControlRecord.java new file mode 100644 index 0000000..15dbea7 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskPersonalControlRecord.java @@ -0,0 +1,77 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author kami on 2024-11-10 14:38:57 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("risk_personal_control_record") +public class RiskPersonalControlRecord implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 姓名 + */ + @TableField("`name`") + String name; + /** + * 证件号码 + */ + @TableField("id_code") + String idCode; + + /** + * 管控标签 + */ + @TableField("control_tag") + String controlTag; + + /** + * 管控部门编号 + */ + @TableField("control_depart_id") + String controlDepartId; + /** + * 管控部门名称 + */ + @TableField("control_depart_name") + String controlDepartName; + + /** + * 管控时间 + */ + @TableField("control_time") + LocalDateTime controlTime; + /** + * 案件编号 + */ + @TableField("case_id") + String caseId; + + /** + * 创建时间 + */ + @TableField("create_time") + LocalDateTime createTime; + + /** + * 逻辑删除键 + */ + Integer del; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskPersonalTag.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskPersonalTag.java new file mode 100644 index 0000000..af1f5c2 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskPersonalTag.java @@ -0,0 +1,63 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author kami on 2024-11-09 16:04:10 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("risk_personal_tag") +public class RiskPersonalTag implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 姓名 + */ + @TableField("`name`") + String name; + /** + * 证件号码 + */ + @TableField("id_code") + String idCode; + /** + * 大标签 + */ + @TableField("big_tag") + String bigTag; + /** + * 小标签 + */ + @TableField("small_tag") + String smallTag; + /** + * 标签时间 + */ + @TableField("tag_time") + LocalDateTime tagTime; + /** + * 创建时间 + */ + @TableField("create_time") + LocalDateTime createTime; + /** + * 逻辑删除键 + */ + @TableLogic(value = "0", delval = "1") + Integer del; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskScoreRule.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskScoreRule.java new file mode 100644 index 0000000..8abf1b4 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskScoreRule.java @@ -0,0 +1,58 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class RiskScoreRule { + + // + @TableId(type = IdType.AUTO) + private Integer id; + + // + @TableField("pid") + private Integer pid; + + // 风险因素 + @TableField("risk_name") + private String riskName; + + // 分值 + @TableField("score") + private Double score; + + // 规则描述 + @TableField("rule_desc") + private String ruleDesc; + + // 权重 + @TableField("weight") + private Integer weight; + + // 状态 + @TableField("status") + private Boolean status; + + // 更新时间 + @TableField("update_time") + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm") + private LocalDateTime updateTime; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + + private Integer sortId; + + private Integer level; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskTask.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskTask.java new file mode 100644 index 0000000..0fa23a8 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskTask.java @@ -0,0 +1,75 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +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 lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author kami on 2024-11-11 11:34:46 + * @version 0.0.1 + * @since 1.8 + */ +@Data +@TableName("risk_task") +public class RiskTask implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 模型id + */ + @TableField("model_id") + Integer modelId; + + /** + * 扫秒条数 + */ + @TableField("scan_size") + Integer scanSize; + + /** + * 新增条数 + */ + @TableField("insert_size") + Integer insertSize; + + /** + * 修改条数 + */ + @TableField("update_size") + Integer updateSize; + + /** + * 开始时间 + */ + @TableField("start_time") + LocalDateTime startTime; + /** + * 结束时间 + */ + @TableField("end_time") + LocalDateTime endTime; + /** + * 0 进行中 1 已完成 -1 失败 + */ + @TableField("state") + Integer state; + /** + * 异常信息 + */ + @TableField("err_msg") + String errMsg; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskTest.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskTest.java new file mode 100644 index 0000000..9f8f007 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskTest.java @@ -0,0 +1,29 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +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 lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author kami on 2024-11-13 16:18:01 + * @version 0.0.1 + * @since 1.8 + */ +@Data +public class RiskTest implements Serializable { + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("`name`") + String name; +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/SupDepart.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/SupDepart.java new file mode 100644 index 0000000..dde9c2a --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/SupDepart.java @@ -0,0 +1,85 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class SupDepart { + + // + @TableId + private String id; + + // + @TableField("type") + private String type; + + // + @TableField("category") + private String category; + + // + @TableField("code") + private String code; + + // + @TableField("name") + private String name; + + // + @TableField("short_name") + private String shortName; + + // + @TableField("domain_name") + private String domainName; + + // + @TableField("pid") + private String pid; + + // + @TableField("level") + private Integer level; + + // + @TableField("path_trace") + private String pathTrace; + + // + @TableField("is_hide") + private String isHide; + + // + @TableField("status") + private String status; + + // + @TableField("order_no") + private Integer orderNo; + + // + @TableField("version") + private String version; + + // + @TableField("status_updated_at") + private String statusUpdatedAt; + + // + @TableField("created_at") + private String createdAt; + + // + @TableField("updated_at") + private String updatedAt; + + private Boolean firstHost; + + // + private String statisticsGroupId; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/SupExternalDepart.java b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/SupExternalDepart.java new file mode 100644 index 0000000..1907c09 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/entity/mine/SupExternalDepart.java @@ -0,0 +1,63 @@ +package com.biutag.supervisiondata.pojo.entity.mine; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class SupExternalDepart { + + // id + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // 外部单位id + @TableField("external_id") + private String externalId; + + // 外部单位名称 + @TableField("external_name") + private String externalName; + + // 外部来源 + @TableField("source") + private String source; + + // 内部单位id + @TableField("internal_id") + private String internalId; + + // 内部单位名称 + @TableField("internal_name") + private String internalName; + + // 内部单位短名称 + @TableField("internal_short_name") + private String internalShortName; + + // 单位级别 + @TableField("level") + private Integer level; + + // 上级单位id + @TableField("pid") + private String pid; + + // 状态:0-启用,1-禁用 + @TableField("status") + private Integer status; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + + // 更新时间 + @TableField("update_time") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/enums/Charge.java b/src/main/java/com/biutag/supervisiondata/pojo/enums/Charge.java new file mode 100644 index 0000000..871566b --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/enums/Charge.java @@ -0,0 +1,49 @@ +package com.biutag.supervisiondata.pojo.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * @author kami on 2024-11-12 11:07:06 + * @version 0.0.1 + * @since 1.8 + */ +@AllArgsConstructor +@Getter +@Slf4j +public enum Charge { + + KILL("故意杀人", null,"涉故意杀人"), + DRUGS("贩卖毒品", null,"涉贩卖毒品"), + FIRE("放火", null,"涉放火"), + BOOM("爆炸", null,"涉爆炸"), + POISON("投毒", null,"涉投毒"), + RAPE("强奸", "未遂","涉强奸"), + ROB("抢劫", "未遂","涉抢劫"); + + private final String title; + + private final String unEqu; + + private final String desc; + + + + public static String contains(String desc) { + Charge en = null; + for (Charge enums : values()) { + if (desc.contains(enums.getTitle())) { + en = enums; + } + } + if(en == null) { + return null; + } + if(en.getUnEqu() != null && !desc.contains(en.getUnEqu())) { + return en.getDesc(); + } + return null; + } + +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/enums/Dispute.java b/src/main/java/com/biutag/supervisiondata/pojo/enums/Dispute.java new file mode 100644 index 0000000..838e6f3 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/enums/Dispute.java @@ -0,0 +1,41 @@ +package com.biutag.supervisiondata.pojo.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * @author kami on 2024-11-15 12:08:18 + * @version 0.0.1 + * @since 1.8 + */ +@AllArgsConstructor +@Getter +@Slf4j +public enum Dispute { + + LOVE("情感", "涉情感纠纷"), + HOUSE1("房地产", "涉房产纠纷"), + HOUSE2("房屋", "涉房产纠纷"), + HOSPITAL("医患", "涉医患纠纷"), + MONEY("债务", "涉债务纠纷"), + TUDI("土地", "涉土地纠纷"), + MONEY2("劳资", "涉劳资纠纷"), + HOME("家庭暴力", "涉家庭暴力纠纷"), + NEIBER("邻里纠纷", "涉邻里纠纷纠纷"); + + private final String title; + + private final String desc; + + + + public static String contains(String desc) { + for (Dispute enums : values()) { + if (desc.contains(enums.getTitle())) { + return enums.getDesc(); + } + } + return null; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/pojo/enums/Edu.java b/src/main/java/com/biutag/supervisiondata/pojo/enums/Edu.java new file mode 100644 index 0000000..6a890e9 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/pojo/enums/Edu.java @@ -0,0 +1,36 @@ +package com.biutag.supervisiondata.pojo.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * @author kami on 2024-06-19 13:52:23 + * @version 0.0.1 + * @since 1.8 + */ +@AllArgsConstructor +@Getter +@Slf4j +public enum Edu { + + LOW("小学及以下", 3), + MIDDLE("初中/高中", 2), + HEIGHT("中专/大专", 1); + + private final String desc; + + private final Integer score; + + + + public static Integer contains(String desc) { + for (Edu enums : values()) { + if (enums.getDesc().equals(desc)) { + return enums.getScore(); + } + } + log.info("未找到该类型:{}", desc); + return 0; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/DataCaseVerifRepository.java b/src/main/java/com/biutag/supervisiondata/repository/DataCaseVerifRepository.java new file mode 100644 index 0000000..fb2731f --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/DataCaseVerifRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.DataCaseVerifMapper; +import com.biutag.supervisiondata.pojo.entity.mine.DataCaseVerif; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-14 15:54:00 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class DataCaseVerifRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/DataPetition12337Repository.java b/src/main/java/com/biutag/supervisiondata/repository/DataPetition12337Repository.java new file mode 100644 index 0000000..0c650ca --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/DataPetition12337Repository.java @@ -0,0 +1,21 @@ +package com.biutag.supervisiondata.repository; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.DataPetition12337Mapper; +import com.biutag.supervisiondata.pojo.entity.mine.DataPetition12337; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-14 15:52:20 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class DataPetition12337Repository extends ServiceImpl { + +} + + + + diff --git a/src/main/java/com/biutag/supervisiondata/repository/DataPetitionComplaintRepository.java b/src/main/java/com/biutag/supervisiondata/repository/DataPetitionComplaintRepository.java new file mode 100644 index 0000000..2b71d92 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/DataPetitionComplaintRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.DataPetitionComplaintMapper; +import com.biutag.supervisiondata.pojo.entity.mine.DataPetitionComplaint; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-14 15:52:20 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class DataPetitionComplaintRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseAJJBXXRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseAJJBXXRepository.java new file mode 100644 index 0000000..9026def --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseAJJBXXRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseAJJBXXMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-10 15:21:56 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseAJJBXXRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseBAXXRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseBAXXRepository.java new file mode 100644 index 0000000..1f8fa83 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseBAXXRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseBAXXMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseBAXX; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-10 15:21:56 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseBAXXRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseBAYJRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseBAYJRepository.java new file mode 100644 index 0000000..eadc7c3 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseBAYJRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseBAYJMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseBAYJ; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-10 15:21:56 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseBAYJRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseHYRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseHYRepository.java new file mode 100644 index 0000000..81e5d3d --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseHYRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseHYMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseHY; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-13 15:18:16 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseHYRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseJJDRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseJJDRepository.java new file mode 100644 index 0000000..96ac4ae --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseJJDRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseJJDMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-09 10:41:45 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseJJDRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseSHRXXRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseSHRXXRepository.java new file mode 100644 index 0000000..f3626a5 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseSHRXXRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseSHRXXMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-10 15:21:56 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseSHRXXRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseSYRKXXRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseSYRKXXRepository.java new file mode 100644 index 0000000..e14454f --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseSYRKXXRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.ads.GBaseSYRKXXMapper; +import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-09 10:41:45 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseSYRKXXRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseTbDZdrylbRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseTbDZdrylbRepository.java new file mode 100644 index 0000000..922f64a --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseTbDZdrylbRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseTbDZdrylbMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseTbDZdrylb; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-20 16:22:26 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseTbDZdrylbRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseWFRXXRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseWFRXXRepository.java new file mode 100644 index 0000000..3fdcb40 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseWFRXXRepository.java @@ -0,0 +1,16 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseWFRXXMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-10 15:21:56 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseWFRXXRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseZDRYRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseZDRYRepository.java new file mode 100644 index 0000000..2b0d7b3 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseZDRYRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseZDRYMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDRY; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-15 17:18:05 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseZDRYRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseZDXLRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseZDXLRepository.java new file mode 100644 index 0000000..8ba2688 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseZDXLRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseZDXLMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDXL; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-15 17:17:02 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseZDXLRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/GBaseZYRYXXRepository.java b/src/main/java/com/biutag/supervisiondata/repository/GBaseZYRYXXRepository.java new file mode 100644 index 0000000..832a1c5 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/GBaseZYRYXXRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.dwd.GBaseZYRYXXMapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZYRYXX; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-10 15:21:56 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class GBaseZYRYXXRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/ModelRepository.java b/src/main/java/com/biutag/supervisiondata/repository/ModelRepository.java new file mode 100644 index 0000000..b011a8b --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/ModelRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.ModelMapper; +import com.biutag.supervisiondata.pojo.entity.mine.Model; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-18 19:50:06 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class ModelRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/RiskModelTaskClueRepository.java b/src/main/java/com/biutag/supervisiondata/repository/RiskModelTaskClueRepository.java new file mode 100644 index 0000000..a7651cc --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/RiskModelTaskClueRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.RiskModelTaskClueMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-13 13:25:57 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class RiskModelTaskClueRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/RiskPersonalRepository.java b/src/main/java/com/biutag/supervisiondata/repository/RiskPersonalRepository.java new file mode 100644 index 0000000..4756921 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/RiskPersonalRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.RiskPersonalMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-09 10:41:45 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class RiskPersonalRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/RiskPersonalTagRepository.java b/src/main/java/com/biutag/supervisiondata/repository/RiskPersonalTagRepository.java new file mode 100644 index 0000000..7efb65f --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/RiskPersonalTagRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.RiskPersonalTagMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-09 16:07:02 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class RiskPersonalTagRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/RiskScoreRuleRepository.java b/src/main/java/com/biutag/supervisiondata/repository/RiskScoreRuleRepository.java new file mode 100644 index 0000000..1e9c4a5 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/RiskScoreRuleRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.RiskScoreRuleMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskScoreRule; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-18 19:37:16 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class RiskScoreRuleRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/RiskTaskRepository.java b/src/main/java/com/biutag/supervisiondata/repository/RiskTaskRepository.java new file mode 100644 index 0000000..4ccf5ce --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/RiskTaskRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.RiskTaskMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTask; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-11 14:10:01 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class RiskTaskRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/RiskTestRepository.java b/src/main/java/com/biutag/supervisiondata/repository/RiskTestRepository.java new file mode 100644 index 0000000..c927df2 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/RiskTestRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.RiskTestMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTest; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-13 16:20:42 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class RiskTestRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/SupDepartRepository.java b/src/main/java/com/biutag/supervisiondata/repository/SupDepartRepository.java new file mode 100644 index 0000000..d6880ec --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/SupDepartRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.SupDepartMapper; +import com.biutag.supervisiondata.pojo.entity.mine.SupDepart; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-22 15:01:47 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class SupDepartRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/repository/SupExternalDepartRepository.java b/src/main/java/com/biutag/supervisiondata/repository/SupExternalDepartRepository.java new file mode 100644 index 0000000..de66b6b --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/repository/SupExternalDepartRepository.java @@ -0,0 +1,15 @@ +package com.biutag.supervisiondata.repository; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.mapper.mine.SupExternalDepartMapper; +import com.biutag.supervisiondata.pojo.entity.mine.SupExternalDepart; +import org.springframework.stereotype.Service; + +/** + * @author kami on 2024-11-22 17:05:07 + * @version 0.0.1 + * @since 1.8 + */ +@Service +public class SupExternalDepartRepository extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervisiondata/rest/ApiController.java b/src/main/java/com/biutag/supervisiondata/rest/ApiController.java new file mode 100644 index 0000000..95d65c5 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/rest/ApiController.java @@ -0,0 +1,51 @@ +package com.biutag.supervisiondata.rest; + +import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; +import com.biutag.supervisiondata.common.response.RS; +import com.biutag.supervisiondata.lock.LocalLock; +import com.biutag.supervisiondata.service.RiskScoreRuleService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author kami on 2024-11-19 15:32:09 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@RestController +@RequestMapping("/api") +@AllArgsConstructor +public class ApiController { + + private final RiskScoreRuleService riskScoreRuleService; + + @GetMapping("/score") + public RS score(String idCodes) { + if(LocalLock.scoreLock){ + return RS.error("正在进行中"); + } + LocalLock.scoreLock = true; + CompletableFutureUtil.runSync(() -> { + try { + if(idCodes == null) { + riskScoreRuleService.runScore(new ArrayList<>()); + } else { + riskScoreRuleService.runScore(List.of(idCodes.split(","))); + } + + } catch (Exception e) { + log.error("", e); + } finally { + LocalLock.scoreLock = false; + } + }); + return RS.success(); + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/DictService.java b/src/main/java/com/biutag/supervisiondata/service/DictService.java new file mode 100644 index 0000000..79c0149 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/DictService.java @@ -0,0 +1,17 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDXL; + +import java.util.Map; + +/** + * @author kami on 2024-11-15 17:24:29 + * @version 0.0.1 + * @since 1.8 + */ +public interface DictService { + /** + * 同步重点人员细类 + */ + Map syncPointType(); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/GBaseBAService.java b/src/main/java/com/biutag/supervisiondata/service/GBaseBAService.java new file mode 100644 index 0000000..1c995f8 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/GBaseBAService.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; + +/** + * @author kami on 2024-11-12 18:12:20 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseBAService { + + void baModelTask(TaskParamDomain domain); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java new file mode 100644 index 0000000..3fb95d6 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/GBaseJJDService.java @@ -0,0 +1,17 @@ +package com.biutag.supervisiondata.service; + +import java.time.LocalDateTime; + +/** + * @author kami on 2024-11-09 14:48:35 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseJJDService { + /** + * 拉取新数据并保存 + * @param start 接警开始范围 + * @param end 接警结束范围 + */ + void pullAndSave(LocalDateTime start, LocalDateTime end); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/GBaseSHRWFRService.java b/src/main/java/com/biutag/supervisiondata/service/GBaseSHRWFRService.java new file mode 100644 index 0000000..7655fce --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/GBaseSHRWFRService.java @@ -0,0 +1,16 @@ +package com.biutag.supervisiondata.service; + +import java.time.LocalDateTime; + +/** + * 受害人 违法人 逻辑层 + * @author kami on 2024-11-10 15:24:25 + * @version 0.0.1 + * @since 1.8 + */ +public interface GBaseSHRWFRService { + /** + * 拉取和转存 + */ + void pullAndSave(LocalDateTime start, LocalDateTime end); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/HabitService.java b/src/main/java/com/biutag/supervisiondata/service/HabitService.java new file mode 100644 index 0000000..f679f3e --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/HabitService.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; + +/** + * @author kami on 2024-11-13 11:11:49 + * @version 0.0.1 + * @since 1.8 + */ +public interface HabitService { + + void habitModelTask(TaskParamDomain domain); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/MarriageService.java b/src/main/java/com/biutag/supervisiondata/service/MarriageService.java new file mode 100644 index 0000000..a522a7a --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/MarriageService.java @@ -0,0 +1,14 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; + +/** + * 婚姻 + * @author kami on 2024-11-13 15:20:36 + * @version 0.0.1 + * @since 1.8 + */ +public interface MarriageService { + + void marriageModelTask(TaskParamDomain domain); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/NoControlService.java b/src/main/java/com/biutag/supervisiondata/service/NoControlService.java new file mode 100644 index 0000000..3942847 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/NoControlService.java @@ -0,0 +1,16 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; + +/** + * @author kami on 2024-11-18 14:06:06 + * @version 0.0.1 + * @since 1.8 + */ +public interface NoControlService { + /** + * 同步管控不到位 + * @param domain 数据 + */ + void syncNoControlData(TaskParamDomain domain); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/PetitionService.java b/src/main/java/com/biutag/supervisiondata/service/PetitionService.java new file mode 100644 index 0000000..6ca82e5 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/PetitionService.java @@ -0,0 +1,17 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; + +import java.time.LocalDateTime; + +/** + * @author kami on 2024-11-14 16:01:27 + * @version 0.0.1 + * @since 1.8 + */ +public interface PetitionService { + + void personPullAndSave(LocalDateTime start,LocalDateTime end); + + void petitionModelTask(TaskParamDomain domain); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/PointService.java b/src/main/java/com/biutag/supervisiondata/service/PointService.java new file mode 100644 index 0000000..20ad22e --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/PointService.java @@ -0,0 +1,31 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; + +import java.time.LocalDateTime; + +/** + * @author kami on 2024-11-15 18:04:09 + * @version 0.0.1 + * @since 1.8 + */ +public interface PointService { + + void personPullAndSave(LocalDateTime start, LocalDateTime end); + + void syncScore(TaskParamDomain domain); + + /** + * 同步暴力人员 + * @param domain domain + */ + void syncViolence(TaskParamDomain domain); + + void syncKillSelf(TaskParamDomain domain); + + void syncDrug(TaskParamDomain domain); + + void syncControlNoPower(TaskParamDomain domain); + + void syncPointCall(TaskParamDomain domain); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/PoliceService.java b/src/main/java/com/biutag/supervisiondata/service/PoliceService.java new file mode 100644 index 0000000..920eea1 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/PoliceService.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; + +/** + * @author kami on 2024-11-12 19:39:55 + * @version 0.0.1 + * @since 1.8 + */ +public interface PoliceService { + + void contradictModelTask(TaskParamDomain domain); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/RiskModelTaskClueService.java b/src/main/java/com/biutag/supervisiondata/service/RiskModelTaskClueService.java new file mode 100644 index 0000000..61c659d --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/RiskModelTaskClueService.java @@ -0,0 +1,16 @@ +package com.biutag.supervisiondata.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; + +import java.util.List; + +/** + * @author kami on 2024-11-11 14:11:31 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskModelTaskClueService { + + void saveClues(List list); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/RiskPersonalControlRecordService.java b/src/main/java/com/biutag/supervisiondata/service/RiskPersonalControlRecordService.java new file mode 100644 index 0000000..f6fd1f2 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/RiskPersonalControlRecordService.java @@ -0,0 +1,17 @@ +package com.biutag.supervisiondata.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalControlRecord; + +import java.util.List; + +/** + * @author kami on 2024-11-20 10:07:01 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskPersonalControlRecordService extends IService { + + void batchInsert(List alliances); + +} diff --git a/src/main/java/com/biutag/supervisiondata/service/RiskPersonalService.java b/src/main/java/com/biutag/supervisiondata/service/RiskPersonalService.java new file mode 100644 index 0000000..ff5fd3c --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/RiskPersonalService.java @@ -0,0 +1,32 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalControlRecord; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; + +import java.util.List; + +/** + * @author kami on 2024-11-09 16:14:12 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskPersonalService { + /** + * 格式化并保存 + * @param list 人员列表 + * @param bigTag 大标签 + */ + void formatAndSave(List list, String bigTag); + + void batchInsert3(List alliances); + + /** + * 修改分 + * @param personals 集合 + */ + void updateBatchScore(List personals); + + void fixed(); + +} diff --git a/src/main/java/com/biutag/supervisiondata/service/RiskPersonalTagService.java b/src/main/java/com/biutag/supervisiondata/service/RiskPersonalTagService.java new file mode 100644 index 0000000..a5cf917 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/RiskPersonalTagService.java @@ -0,0 +1,21 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; + +import java.util.List; + +/** + * @author kami on 2024-11-09 16:08:25 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskPersonalTagService { + /** + * 新增标签入库 + * @param tags 标签集合 + * @param bitTag 大标签 + */ + void saveBatchTag(List tags, String bitTag); + +} diff --git a/src/main/java/com/biutag/supervisiondata/service/RiskScoreRuleService.java b/src/main/java/com/biutag/supervisiondata/service/RiskScoreRuleService.java new file mode 100644 index 0000000..f62f6c2 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/RiskScoreRuleService.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata.service; + +import java.util.List; + +/** + * @author kami on 2024-11-18 19:38:02 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskScoreRuleService { + + void runScore(List idCodes); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/RiskTaskService.java b/src/main/java/com/biutag/supervisiondata/service/RiskTaskService.java new file mode 100644 index 0000000..7990f02 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/RiskTaskService.java @@ -0,0 +1,50 @@ +package com.biutag.supervisiondata.service; + +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; + +import java.util.List; +import java.util.Map; + +/** + * @author kami on 2024-11-11 14:14:32 + * @version 0.0.1 + * @since 1.8 + */ +public interface RiskTaskService { + + /** + * 信息模型任务 + * @param domain 参数 + */ + void infoModelTask(TaskParamDomain domain); + /** + * 学历模型任务 + * @param domain 参数 + */ + void eduModelTask(TaskParamDomain domain); + + /** + * 违法人员和执法办案警情 + * @param domain 参数 + */ + void caseModelTask(TaskParamDomain domain); + /** + * (三)行为因素 + * @param domain 参数 + */ + void behavior(TaskParamDomain domain); + + /** + * 风险地区 + * @param domain 参数 + */ + void riskAreaModelTask(TaskParamDomain domain); + + /** + * 高战斗人群 + * @param domain 参数 + */ + void heightFight(TaskParamDomain domain); +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/DictServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/DictServiceImpl.java new file mode 100644 index 0000000..9e321ef --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/DictServiceImpl.java @@ -0,0 +1,38 @@ +package com.biutag.supervisiondata.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDXL; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.repository.GBaseZDXLRepository; +import com.biutag.supervisiondata.service.DictService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author kami on 2024-11-15 17:24:40 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class DictServiceImpl implements DictService { + + private final GBaseZDXLRepository zdxlRepository; + + @Override + public Map syncPointType() { + List xlList = zdxlRepository.list(new LambdaQueryWrapper() + .select(GBaseZDXL::getId, GBaseZDXL::getDefine, GBaseZDXL::getFjdid)); + Map map = xlList.stream().collect(Collectors.toMap(GBaseZDXL::getId, Function.identity(), (oldValue, newValue) -> newValue)); + return map; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseBAServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseBAServiceImpl.java new file mode 100644 index 0000000..f82bb72 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseBAServiceImpl.java @@ -0,0 +1,195 @@ +package com.biutag.supervisiondata.service.impl; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; +import com.biutag.supervisiondata.pojo.constants.Default; +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; +import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseBAXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseBAYJ; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTask; +import com.biutag.supervisiondata.repository.GBaseBAXXRepository; +import com.biutag.supervisiondata.repository.GBaseBAYJRepository; +import com.biutag.supervisiondata.repository.RiskModelTaskClueRepository; +import com.biutag.supervisiondata.repository.RiskTaskRepository; +import com.biutag.supervisiondata.service.GBaseBAService; +import com.biutag.supervisiondata.service.RiskModelTaskClueService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author kami on 2024-11-12 18:12:30 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class GBaseBAServiceImpl implements GBaseBAService { + + private final GBaseBAXXRepository gBaseBAXXRepository; + + private final GBaseBAYJRepository gBaseBAYJRepository; + + private final RiskTaskRepository riskTaskRepository; + + private final RiskModelTaskClueService riskModelTaskClueService; + + private final RiskModelTaskClueRepository clueRepository; + + @Override + public void baModelTask(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 37); + riskTaskRepository.save(task); + + List xxList = getXX(domain); + + Map oldMap = domain.getOldMap(task.getModelId(), true); + + List toUpdate = new ArrayList<>(); + List toInsert = new ArrayList<>(); + + Map> map = xxList.stream().collect(Collectors.groupingBy(GBaseBAXX::getSfzhm)); + Map personMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); + log.info("开干"); + for (Map.Entry> entry : map.entrySet()) { + GBaseBAXX tmp = entry.getValue().getFirst(); + if (tmp.getRyztdm() == null) { + continue; + } + if(entry.getValue() ==null || entry.getValue().isEmpty()) { + continue; + } + LocalDate date; + try { + if (tmp.getRzsj().indexOf("-") != -1) { + date = LocalDate.parse(tmp.getRzsj(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } else if(tmp.getRzsj().indexOf(".") != -1) { + date = LocalDate.parse(tmp.getRzsj(), DateTimeFormatter.ofPattern("yyyy.M.d")); + } else { + date = LocalDate.parse(tmp.getRzsj(), DateTimeFormatter.ofPattern("yyyy年MM月dd日")); + } + } catch (Exception e) { + date = LocalDate.of(1991, 1, 2); + } + + for (GBaseBAXX gBaseBAXX : entry.getValue()) { + LocalDate t; + try { + if (gBaseBAXX.getRzsj().indexOf("-") != -1) { + t = LocalDate.parse(gBaseBAXX.getRzsj(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } else if(tmp.getRzsj().indexOf(".") != -1) { + t = LocalDate.parse(tmp.getRzsj(), DateTimeFormatter.ofPattern("yyyy.M.d")); + } else { + t = LocalDate.parse(tmp.getRzsj(), DateTimeFormatter.ofPattern("yyyy年MM月dd日")); + } + } catch (Exception e) { + t = LocalDate.of(1991, 1, 1); + } + if (t.isAfter(date)) { + tmp = gBaseBAXX; + date = t; + } + } + RiskModelTaskClue old = oldMap.get(tmp.getSfzhm()); + if (tmp.getRyztdm().equals("1")) { + // 离职 + if (old != null) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setId(old.getId()); + clue.setDel(1); + toUpdate.add(clue); + } + continue; + } + if (old == null) { + LocalDateTime eventTime = null; + if(date.isAfter(LocalDate.of(1991, 1, 5))) { + eventTime = LocalDateTime.of(date.getYear(), date.getMonth(),date.getDayOfMonth(),0 ,0,0); + } + RiskModelTaskClue clue = createClue(task.getModelId(), 2, personMap.get(tmp.getSfzhm()), task.getId(), Default.BA_TAG, "发现该人员正任职保安人员,属于特种职业,增加风险分2分。",eventTime); + toInsert.add(clue); + } + } + log.info("数据库操作阶段"); + // 新增 + if (!toInsert.isEmpty()) { + riskModelTaskClueService.saveClues(toInsert); + } + // 修改 + if (!toUpdate.isEmpty()) { + log.info("修改线索条数 | {}", toUpdate.size()); + clueRepository.updateBatchById(toUpdate); + } + + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(toUpdate.size()); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + riskTaskRepository.updateById(updateTask); + } + + RiskModelTaskClue createClue(Integer modelId, Integer score, RiskPersonal person, Integer taskId, String reason, String data, LocalDateTime eventTime) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(person.getName()); + clue.setIdCode(person.getIdCode()); + clue.setTaskId(taskId); + clue.setRiskReason(reason); + clue.setData(data); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setEventTime(eventTime); + return clue; + } + + List getXX(TaskParamDomain domain) { + List list = new ArrayList<>(); + for (List idCard : domain.getIdCards()) { + list.addAll(gBaseBAXXRepository.list(new LambdaQueryWrapper() + .select(GBaseBAXX::getXm, GBaseBAXX::getSfzhm, GBaseBAXX::getZw, GBaseBAXX::getRyztmc, GBaseBAXX::getRyztdm, GBaseBAXX::getRzsj) + .in(GBaseBAXX::getSfzhm, idCard))); + } + return list; + } + + List getYJ(TaskParamDomain domain) { + List list = new ArrayList<>(); + for (List idCard : domain.getIdCards()) { + List tmp = gBaseBAYJRepository.list(new LambdaQueryWrapper() + .select(GBaseBAYJ::getXm, GBaseBAYJ::getSfzhm, GBaseBAYJ::getZw, GBaseBAYJ::getRyztmc, GBaseBAYJ::getRyztmc, GBaseBAYJ::getRzsj) + .in(GBaseBAYJ::getSfzhm, idCard)); + for (GBaseBAYJ gBaseBAYJ : tmp) { + + } + } + return list; + } + + RiskTask createTask(Integer size, Integer modelId) { + RiskTask task = new RiskTask(); + task.setModelId(modelId); + task.setStartTime(LocalDateTime.now()); + task.setState(0); + task.setScanSize(size); + return task; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java new file mode 100644 index 0000000..9581306 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseJJDServiceImpl.java @@ -0,0 +1,268 @@ +package com.biutag.supervisiondata.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.pojo.constants.Default; +import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.repository.GBaseJJDRepository; +import com.biutag.supervisiondata.repository.GBaseSYRKXXRepository; +import com.biutag.supervisiondata.service.GBaseJJDService; +import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.PatternUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author kami on 2024-11-09 14:48:55 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class GBaseJJDServiceImpl implements GBaseJJDService { + + private final GBaseJJDRepository gBaseJJDRepository; + + private final GBaseSYRKXXRepository gBaseSYRKXXRepository; + + private final RiskPersonalService riskPersonalService; + + @Override + public void pullAndSave(LocalDateTime start, LocalDateTime end) { + // 获取接警数据 + List result = gBaseJJDRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), + end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + log.info("总条数 | {}条", result.size()); + + List personals = new ArrayList<>(); + // 身份证和手机号都为空数量 + int noneCount = 0; + // 未核实到信息数据 + int infoCount = 0; + + int ok = 0; + // 过滤数据 + List idCodes1 = new ArrayList<>(); + List mobiles1 = new ArrayList<>(); + + Map> jjdMap = new HashMap<>(); + Map> jjdMMap = new HashMap<>(); + for (GBaseJJD item : result) { + RiskPersonal person = createPerson(item); + if(person.getIdCode() != null) { + personals.add(person); + List jjd = Optional.ofNullable(jjdMap.get(person.getIdCode())).orElse(new ArrayList<>()); + jjd.add(item); + jjdMap.put(person.getIdCode(), jjd); + idCodes1.add(person.getIdCode()); + continue; + } + String idCards = PatternUtil.takeIdCard(item.getCjqk()); + if(!idCards.isEmpty()) { + person.setIdCode(idCards); + String [] strs = idCards.split(","); + for (String s : strs) { + idCodes1.add(s); + List jjd = Optional.ofNullable(jjdMap.get(s)).orElse(new ArrayList<>()); + jjd.add(item); + jjdMap.put(person.getIdCode(), jjd); + } + } else if(item.getBjrlxdh() == null) { + noneCount++; + continue; + } else { + mobiles1.add(item.getBjrlxdh()); + List jjd = Optional.ofNullable(jjdMap.get(item.getBjrlxdh())).orElse(new ArrayList<>()); + jjd.add(item); + jjdMMap.put(item.getBjrlxdh(), jjd); + } + personals.add(person); + } + // 去重 + List idCodes2 = idCodes1.stream().distinct().collect(Collectors.toList()); + List mobiles2 = mobiles1.stream().distinct().collect(Collectors.toList()); + + // 切割 + List> idCodes = IntStream.range(0, (idCodes2.size() + 9999) / 10000) + .mapToObj(i -> idCodes2.subList(i * 10000, Math.min((i + 1) * 10000, idCodes2.size()))) + .collect(Collectors.toList()); + List> mobiles = IntStream.range(0, (mobiles2.size() + 9999) / 10000) + .mapToObj(i -> mobiles2.subList(i * 10000, Math.min((i + 1) * 10000, mobiles2.size()))) + .collect(Collectors.toList()); + // 查询数据 + log.info("开始根据身份证实用人口信息补全 =》 {}", idCodes.size()); + int count = 0; + // 身份证查到的人 + List sFms = new ArrayList<>(); + // 手机号查到的人 + List lXfs = new ArrayList<>(); + for (List idCode : idCodes) { + List list = gBaseSYRKXXRepository.list(new LambdaQueryWrapper() + .in(GBaseSYRKXX::getGmsfhm, idCode)); + sFms.addAll(list); + count++; + log.info("身份证进度 | {}", count); + } + log.info("开始根据手机号实用人口信息补全 =》 {}", mobiles.size()); + for (List mobile : mobiles) { + List list = gBaseSYRKXXRepository.list(new LambdaQueryWrapper() + .in(GBaseSYRKXX::getLxdh, mobile)); + lXfs.addAll(list); + count++; + log.info("手机号进度 | {}", count); + } + Map idCodeMap = sFms.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue)); + Map> mobileMap = lXfs.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh)); + // 开始补全 + LocalDate today = LocalDate.now(); + GBaseSYRKXX info = null; + List xxxInfo; + for (RiskPersonal personal : personals) { + if(personal.getIdCode() != null) { + // 多张身份证存入异常信息 + String [] strs = personal.getIdCode().split(","); + personal.setIdCode(null); + xxxInfo = new ArrayList<>(); + for (String str : strs) { + info = idCodeMap.get(str); + if(info != null) { + xxxInfo.add(info); + } + } + if(strs.length ==1 && !xxxInfo.isEmpty()) { + info = xxxInfo.getFirst(); + } else { + info = compare(xxxInfo, personal.getName()); + } + if(info == null) { + personal.setErrorMsg(personal.getIdCode()); + } + } + if(personal.getMobileNumber() != null && info == null) { + xxxInfo = mobileMap.get(personal.getMobileNumber()); + if(xxxInfo == null || xxxInfo.isEmpty()) { + infoCount ++; + } else { + info = compare(xxxInfo, personal.getName()); + } + if(info == null && xxxInfo != null) { + StringBuilder tmp = new StringBuilder(); + for (GBaseSYRKXX gBaseSYRKXX : xxxInfo) { + if(gBaseSYRKXX.getGmsfhm()!= null) { + tmp.append(gBaseSYRKXX.getGmsfhm()).append("\n"); + } + } + personal.setErrorMsg(tmp.substring(0, tmp.length()-1)); + } + } + if(info != null) { + personal.setName(info.getXm()); + personal.setIdCode(info.getGmsfhm()); + personal.setMobileNumber(info.getLxdh()); + personal.setGender(info.getXbdm()); + personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + if(personal.getAge() == null ){ + try { + LocalDate localDate = info.getCsrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + int age = localDate.until(today).getYears(); + personal.setAge(age); + } catch (Exception e) { + log.error("发现一例没有出生日期"); + personal.setAge(-1); + } + } + ok++; + } + } + for (RiskPersonal personal : personals) { + List jjds = jjdMap.get(personal.getIdCode()); + if(jjds == null) { + jjds = jjdMMap.get(Optional.ofNullable(personal.getMobileNumber()).orElse("")); + } + if(jjds == null) { + continue; + } + GBaseJJD tmp = null; + for (GBaseJJD jjd : jjds) { + if(tmp == null) { + tmp = jjd; + continue; + } + try { + LocalDateTime time = jjd.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + if(time.isAfter(jjd.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime())) { + tmp = jjd; + } + } catch (Exception e) { + log.info("报警时间处理异常"); + } + } + if(tmp == null) { + continue; + } + personal.setControlDepartId(tmp.getGxdwdm()); + personal.setControlDepartName(tmp.getGxdwmc()); + // 如果有报警时间,暂时填报警时间 处理标签回正 + try { + LocalDateTime time = tmp.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + personal.setCreateTime(time); + personal.setControlTime(time); + } catch (Exception e) { + log.info("报警时间处理异常"); + } + } + riskPersonalService.formatAndSave(personals, Default.BIG_TAG_JJD); + log.info("未提取信息人数: {}\n异常信息人数: {}\nok人数: {}", noneCount, infoCount, ok); + } + + /** + * 多身份证对比名称 + * @param infos 信息 + * @param name 名称 + * @return 正确信息 + */ + GBaseSYRKXX compare(List infos, String name) { + GBaseSYRKXX info = null; + for (GBaseSYRKXX gBaseSYRKXX : infos) { + if(gBaseSYRKXX.getXm().equals(name)) { + info=gBaseSYRKXX; + break; + } + } + return info; + } + + RiskPersonal createPerson(GBaseJJD item) { + RiskPersonal person = new RiskPersonal(); + person.setName(item.getBjrxm()); + person.setMobileNumber(item.getBjrlxdh()); + person.setControlDepartId(item.getGxdwdm()); + person.setControlDepartName(item.getGxdwmc()); + person.setGender(item.getBjrxb()); + person.setIdCode(item.getBjrzjhm()); + // 如果有报警时间,暂时填报警时间 处理标签回正 + try { + LocalDateTime time = item.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + person.setCreateTime(time); + person.setControlTime(time); + } catch (Exception e) { + log.info("报警时间处理异常"); + } + // 这里暂时将小标签放到预览属性 处理标签回正 + person.setTags(item.getJqxzmc()); + return person; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java new file mode 100644 index 0000000..455f4c1 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java @@ -0,0 +1,281 @@ +package com.biutag.supervisiondata.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; +import com.biutag.supervisiondata.pojo.constants.Default; +import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.repository.GBaseAJJBXXRepository; +import com.biutag.supervisiondata.repository.GBaseSHRXXRepository; +import com.biutag.supervisiondata.repository.GBaseSYRKXXRepository; +import com.biutag.supervisiondata.repository.GBaseWFRXXRepository; +import com.biutag.supervisiondata.service.GBaseSHRWFRService; +import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.util.AgeUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author kami on 2024-11-10 15:24:52 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService { + + private final GBaseSHRXXRepository shrxxRepository; + + private final GBaseWFRXXRepository wfrxxRepository; + + private final GBaseSYRKXXRepository gBaseSYRKXXRepository; + + private final GBaseAJJBXXRepository ajjbxxRepository; + + private final RiskPersonalService riskPersonalService; + + @Override + public void pullAndSave(LocalDateTime start, LocalDateTime end) { + List shrList = new ArrayList<>(); + List wxrList = new ArrayList<>(); + + // 统计出所有的案件编号批量查询 + List ajNos = new ArrayList<>(); + // 手机号 + List mobiles = new ArrayList<>(); + // 身份证 + List idCards = new ArrayList<>(); + // 分别拉取受害人和违法人信息 + CompletableFuture.allOf( + CompletableFutureUtil.runSyncObject(() -> { + List shrTmp = shrxxRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), + end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + for (GBaseSHRXX gBaseSHRXX : shrTmp) { + if(gBaseSHRXX.getGmsfhm() != null) { + idCards.add(gBaseSHRXX.getGmsfhm()); + } else if(gBaseSHRXX.getLxdh() != null) { + mobiles.add(gBaseSHRXX.getLxdh()); + } else { + continue; + } + shrList.add(gBaseSHRXX); + ajNos.add(gBaseSHRXX.getAjbh()); + } + }), + CompletableFutureUtil.runSyncObject(() -> { + List wfrTmp = wfrxxRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), + end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + for (GBaseWFRXX gBaseWFRXX : wfrTmp) { + if(gBaseWFRXX.getZjhm() != null) { + idCards.add(gBaseWFRXX.getZjhm()); + } else if(gBaseWFRXX.getLxdh() != null) { + mobiles.add(gBaseWFRXX.getLxdh()); + } else { + continue; + } + wxrList.add(gBaseWFRXX); + ajNos.add(gBaseWFRXX.getAjbh()); + } + }) + ).join(); + + List distinctAJ = ajNos.stream().distinct().toList(); + // 切割 每次查10000条 + List> ajs = IntStream.range(0, (distinctAJ.size() + 9999) / 10000) + .mapToObj(i -> distinctAJ.subList(i * 10000, Math.min((i + 1) * 10000, distinctAJ.size()))) + .toList(); + + List idCards2 = idCards.stream().distinct().toList(); + List mobiles2 = mobiles.stream().distinct().toList(); + + List xxList = new ArrayList<>(); + for (List aj : ajs) { + xxList.addAll(ajjbxxRepository.list(new LambdaQueryWrapper() + .select(GBaseAJJBXX::getAjbh, GBaseAJJBXX::getBadwidmc, GBaseAJJBXX::getBadwiddm, GBaseAJJBXX::getBarq) + .in(GBaseAJJBXX::getAjbh, aj))); + } + // 案件转map方便提取 + Map xxMap = xxList.stream().collect(Collectors.toMap(GBaseAJJBXX::getAjbh, Function.identity(), (oldValue, newValue) -> newValue)); + + // 人员信息查询 + // 身份证查到的人 + List sFms = new ArrayList<>(); + // 手机号查到的人 + List lXfs = new ArrayList<>(); + CompletableFuture.allOf( + CompletableFutureUtil.runSyncObject(() -> { + List> idCode = IntStream.range(0, (idCards2.size() + 9999) / 10000) + .mapToObj(i -> idCards2.subList(i * 10000, Math.min((i + 1) * 10000, idCards2.size()))) + .toList(); + int count = 0; + log.info("身份证开始: {}", idCode.size()); + for (List arr : idCode) { + List list = gBaseSYRKXXRepository.list(new LambdaQueryWrapper() + .in(GBaseSYRKXX::getGmsfhm, arr)); + sFms.addAll(list); + count++; + log.info("身份证进度 | {}", count); + } + }), + CompletableFutureUtil.runSyncObject(() -> { + List> mobile = IntStream.range(0, (mobiles2.size() + 9999) / 10000) + .mapToObj(i -> mobiles2.subList(i * 10000, Math.min((i + 1) * 10000, mobiles2.size()))) + .toList(); + int count = 0; + log.info("手机号开始: {}", mobile.size()); + for (List arr : mobile) { + List list = gBaseSYRKXXRepository.list(new LambdaQueryWrapper() + .in(GBaseSYRKXX::getLxdh, arr)); + lXfs.addAll(list); + count++; + log.info("手机号进度 | {}", count); + } + }) + ).join(); + + Map idCodeMap = sFms.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue)); + Map> mobileMap = lXfs.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh)); + List personals = new ArrayList<>(); + + Map> shrMap = new HashMap<>(); + for (GBaseSHRXX gBaseSHRXX : shrList) { + GBaseAJJBXX ajjbxx = xxMap.get(gBaseSHRXX.getAjbh()); + if(ajjbxx == null) { + continue; + } + GBaseSYRKXX rkxx = null; + if(gBaseSHRXX.getGmsfhm() != null) { + rkxx = idCodeMap.get(gBaseSHRXX.getGmsfhm()); + } + if(gBaseSHRXX.getLxdh() != null && rkxx == null) { + List rkxxList = mobileMap.get(gBaseSHRXX.getLxdh()); + if(rkxxList != null) { + rkxx = compare(rkxxList, gBaseSHRXX.getXm()); + } + } + if(rkxx != null) { + RiskPersonal person = createPerson(Default.SHR_TAG, ajjbxx, rkxx); + if(person.getIdCode() != null) { + List tmp = Optional.ofNullable(shrMap.get(person.getIdCode())).orElse(new ArrayList<>()); + tmp.add(ajjbxx); + shrMap.put(person.getIdCode(), tmp); + } + personals.add(person); + } + } + for (GBaseWFRXX gBaseWFRXX : wxrList) { + GBaseAJJBXX ajjbxx = xxMap.get(gBaseWFRXX.getAjbh()); + if(ajjbxx == null) { + continue; + } + GBaseSYRKXX rkxx = null; + if(gBaseWFRXX.getZjhm() != null) { + rkxx = idCodeMap.get(gBaseWFRXX.getZjhm()); + } + if(gBaseWFRXX.getLxdh() != null && rkxx == null) { + List rkxxList = mobileMap.get(gBaseWFRXX.getLxdh()); + if(rkxxList != null) { + rkxx = compare(rkxxList, gBaseWFRXX.getXm()); + } + } + if(rkxx != null) { + RiskPersonal person = createPerson(Default.WFR_TAG, ajjbxx, rkxx); + List tmp = Optional.ofNullable(shrMap.get(person.getIdCode())).orElse(new ArrayList<>()); + tmp.add(ajjbxx); + shrMap.put(person.getIdCode(), tmp); + personals.add(person); + } + } + for (RiskPersonal personal : personals) { + List tmp = shrMap.get(personal.getIdCode()); + if(tmp == null || tmp.isEmpty()) { + continue; + } + GBaseAJJBXX jjx = null; + for (GBaseAJJBXX gBaseAJJBXX : tmp) { + if(jjx == null) { + jjx = gBaseAJJBXX; + continue; + } + try { + LocalDateTime time = gBaseAJJBXX.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + if(time.isAfter(jjx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime())) { + jjx = gBaseAJJBXX; + } + } catch (Exception e) { + log.info("报警时间处理异常"); + } + } + if(jjx == null) { + continue; + } + personal.setControlDepartId(jjx.getBadwiddm()); + personal.setControlDepartName(jjx.getBadwidmc()); + // 如果有报警时间,暂时填报警时间 处理标签回正 + try { + LocalDateTime time = jjx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + personal.setCreateTime(time); + personal.setControlTime(time); + } catch (Exception e) { + log.info("报警时间处理异常"); + } + } + log.info("人数: {}", personals.size()); + riskPersonalService.formatAndSave(personals, Default.BIG_TAG_SHWFR); + } + + /** + * 多身份证对比名称 + * @param infos 信息 + * @param name 名称 + * @return 正确信息 + */ + GBaseSYRKXX compare(List infos, String name) { + GBaseSYRKXX info = null; + for (GBaseSYRKXX gBaseSYRKXX : infos) { + if(gBaseSYRKXX.getXm().equals(name)) { + info=gBaseSYRKXX; + break; + } + } + return info; + } + + RiskPersonal createPerson(String tag, GBaseAJJBXX ajjbxx, GBaseSYRKXX rkxx) { + RiskPersonal personal = new RiskPersonal(); + personal.setIdCode(rkxx.getGmsfhm()); + personal.setName(rkxx.getXm()); + personal.setGender(rkxx.getXbdm()); + personal.setMobileNumber(rkxx.getLxdh()); + personal.setControlDepartId(ajjbxx.getBadwiddm()); + personal.setControlDepartName(ajjbxx.getBadwidmc()); + // 如果有报警时间,暂时填报警时间 处理标签回正 + try { + LocalDateTime time = ajjbxx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + personal.setCreateTime(time); + personal.setControlTime(time); + } catch (Exception e) { + log.info("报警时间处理异常"); + } + personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + // 这里暂时将小标签放到预览属性 处理标签回正 + personal.setTags(tag); + return personal; + } + +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/HabitServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/HabitServiceImpl.java new file mode 100644 index 0000000..f374409 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/HabitServiceImpl.java @@ -0,0 +1,252 @@ +package com.biutag.supervisiondata.service.impl; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.pojo.ClueData; +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalControlRecord; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTask; +import com.biutag.supervisiondata.repository.*; +import com.biutag.supervisiondata.service.HabitService; +import com.biutag.supervisiondata.service.RiskModelTaskClueService; +import com.biutag.supervisiondata.service.RiskPersonalControlRecordService; +import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.util.BhUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author kami on 2024-11-13 11:11:56 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class HabitServiceImpl implements HabitService { + + private final GBaseAJJBXXRepository gBaseAJJBXXRepository; + + private final GBaseWFRXXRepository gBaseWFRXXRepository; + + private final RiskTaskRepository riskTaskRepository; + + private final RiskPersonalControlRecordService recordRepository; + + private final RiskModelTaskClueService riskModelTaskClueService; + + private final RiskPersonalService riskPersonalService; + + private final RiskPersonalControlRecordService controlRecordService; + + private final RiskPersonalRepository personalRepository; + + @Override + public void habitModelTask(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 36); + riskTaskRepository.save(task); + Date d = Date.from(LocalDateTime.of(2024, 1, 1, 0, 0, 0).atZone(ZoneId.systemDefault()).toInstant()); + List ajjbxxList = gBaseAJJBXXRepository.list(new LambdaQueryWrapper() + .select(GBaseAJJBXX::getAjbh, GBaseAJJBXX::getBadwidmc, GBaseAJJBXX::getBadwiddm, GBaseAJJBXX::getBarq, GBaseAJJBXX::getAjlbmc) + .ge(GBaseAJJBXX::getBarq, d)); + log.info("总案件数:{}", ajjbxxList.size()); + // 过滤案件类别 + List targetAjList = new ArrayList<>(); + List ajNos = new ArrayList<>(); + for (GBaseAJJBXX gBaseAJJBXX : ajjbxxList) { + if (gBaseAJJBXX.getAjlbmc() == null) { + continue; + } + if (gBaseAJJBXX.getAjlbmc().contains("酒后驾驶") || gBaseAJJBXX.getAjlbmc().contains("赌博") + || gBaseAJJBXX.getAjlbmc().contains("嫖娼") || gBaseAJJBXX.getAjlbmc().contains("招嫖") + || gBaseAJJBXX.getAjlbmc().contains("嫖宿")) { + if (gBaseAJJBXX.getAjlbmc().contains("幼女")) { + continue; + } + targetAjList.add(gBaseAJJBXX); + ajNos.add(gBaseAJJBXX.getAjbh()); + } + } + log.info("共计案件:{}条", ajNos.size()); + List> ajNo = IntStream.range(0, (ajNos.size() + 9999) / 10000) + .mapToObj(i -> ajNos.subList(i * 10000, Math.min((i + 1) * 10000, ajNos.size()))) + .toList(); + + List wfrList = new ArrayList<>(); + for (List aj : ajNo) { + wfrList.addAll(gBaseWFRXXRepository.list(new LambdaQueryWrapper() + .select(GBaseWFRXX::getAjbh, GBaseWFRXX::getZjhm) + .in(GBaseWFRXX::getAjbh, aj))); + } + // 违法信息 + Map> wfrMap = wfrList.stream().filter(it -> it.getZjhm() != null).collect(Collectors.groupingBy(GBaseWFRXX::getZjhm)); + // 案件信息 + Map ajMap = targetAjList.stream().collect(Collectors.toMap(GBaseAJJBXX::getAjbh, Function.identity(), (oldValue, newValue) -> newValue)); + + List oldList = Optional.ofNullable(domain.getMap().get(36)).orElse(new ArrayList<>()); + // 人员的旧线索 + Map> clueMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + + log.info("开始遍历人员"); + List clues; + Map clueTmpMap; + List dataList; + // 新增数据源 + Map> insertDataMap = new HashMap<>(); + // 管控记录需要的id + List controlIdCodes = new ArrayList<>(); + log.info("map大小:{}", wfrMap.size()); + for (RiskPersonal person : domain.getPersons()) { + List wfTmp = wfrMap.get(person.getIdCode()); + if (wfTmp == null) { + continue; + } + // 该人员旧的线索 + clues = Optional.ofNullable(clueMap.get(person.getIdCode())).orElse(new ArrayList<>()); + clueTmpMap = clues.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (oldValue, newValue) -> newValue)); + dataList = new ArrayList<>(); + for (GBaseWFRXX gBaseWFRXX : wfTmp) { + GBaseAJJBXX aj = ajMap.get(gBaseWFRXX.getAjbh()); + if (aj == null) { + continue; + } + // 通过案件编号获取查看是否有入库记录 + RiskModelTaskClue clue = clueTmpMap.get(BhUtil.ajBh(aj.getAjbh())); + if (clue != null) { + continue; + } + // 没有旧记录 + ClueData data = ClueData.builder() + .id(aj.getAjbh()) + .departId(aj.getBadwiddm()) + .departName(aj.getBadwidmc()) + .name(person.getName()) + .idCode(person.getIdCode()) + .tag(aj.getAjlbmc()) + .personId(person.getId()) + .sourceData("结合案件信息和违法人信息相关数据,发现该人员有:"+aj.getAjlbmc()+"类型的案件,案件编号为:"+aj.getAjbh()+",属于存在不良嗜好,增加风险分1分(存在涉赌、涉酒、涉黄不良嗜好的,每项+1分,最高3分)") + .build(); + try { + data.setEventTime(aj.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + log.error("报案日期转LocalDateTime异常"); + } + dataList.add(data); + } + if (!dataList.isEmpty()) { + insertDataMap.put(person.getIdCode(), dataList); + controlIdCodes.add(person.getIdCode()); + } + } + // 创建新数据 + List toInsert = new ArrayList<>(); + List toUpdatePersonal = new ArrayList<>(); + List toInsertRecord = new ArrayList<>(); + List oldRecords = recordRepository.list(new LambdaQueryWrapper() + .select(RiskPersonalControlRecord::getIdCode, RiskPersonalControlRecord::getControlTime) + .in(RiskPersonalControlRecord::getIdCode, controlIdCodes)); + + Map> oldRecordMap = oldRecords.stream().collect(Collectors.groupingBy(RiskPersonalControlRecord::getIdCode)); + // 遍历生成实体 + for (Map.Entry> entry : insertDataMap.entrySet()) { + List records = Optional.ofNullable(oldRecordMap.get(entry.getKey())).orElse(new ArrayList<>()); + ClueData clue = entry.getValue().getFirst(); + for (ClueData clueData : entry.getValue()) { + // 理论上说之前过滤过clue,不需要再判断control是否存在了 + toInsertRecord.add(createControlRecord(clueData)); + toInsert.add(createClue(task.getModelId(), 1, task.getId(), clueData)); + } + // 修改人员当前管控单位 + if(!records.isEmpty()) { + RiskPersonalControlRecord last = null; + for (RiskPersonalControlRecord record : records) { + if(last == null) { + last = record; + continue; + } + if(last.getControlTime().isBefore(record.getControlTime())) { + last = record; + } + } + if(last != null && last.getId() == null) { + RiskPersonal person = new RiskPersonal(); + person.setId(clue.getPersonId()); + person.setControlDepartId(last.getControlDepartId()); + person.setControlDepartName(last.getControlDepartName()); + person.setControlTime(last.getControlTime()); + toUpdatePersonal.add(person); + } + } + } + log.info("开始进行数据库操作"); + if(!toInsert.isEmpty()) { + riskModelTaskClueService.saveClues(toInsert); + } + if(!toInsertRecord.isEmpty()) { + controlRecordService.batchInsert(toInsertRecord); + } + if(!toUpdatePersonal.isEmpty()) { + log.info("修改人数: {}", toUpdatePersonal.size()); + personalRepository.updateBatchById(toUpdatePersonal); + } + + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(toUpdatePersonal.size()); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + riskTaskRepository.updateById(updateTask); + } + + RiskTask createTask(Integer size, Integer modelId) { + RiskTask task = new RiskTask(); + task.setModelId(modelId); + task.setStartTime(LocalDateTime.now()); + task.setState(0); + task.setScanSize(size); + return task; + } + + RiskPersonalControlRecord createControlRecord(ClueData data) { + RiskPersonalControlRecord controlRecord = new RiskPersonalControlRecord(); + controlRecord.setName(data.getName()); + controlRecord.setIdCode(data.getIdCode()); + controlRecord.setCreateTime(LocalDateTime.now()); + controlRecord.setControlTime(data.getEventTime()); + controlRecord.setControlDepartId(data.getDepartId()); + controlRecord.setControlDepartName(data.getDepartName()); + controlRecord.setControlTag(data.getTag()); + controlRecord.setCaseId(BhUtil.ajBh(data.getId())); + return controlRecord; + } + + RiskModelTaskClue createClue(Integer modelId, Integer score, Integer taskId, ClueData data) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(data.getName()); + clue.setIdCode(data.getIdCode()); + clue.setTaskId(taskId); + clue.setData(data.getSourceData()); + clue.setEventTime(data.getEventTime()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setCaseIds(BhUtil.ajBh(data.getId())); + data.setPersonId(null); + clue.setRiskReason(data.getTag()); + return clue; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/MarriageServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/MarriageServiceImpl.java new file mode 100644 index 0000000..c3a4b9d --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/MarriageServiceImpl.java @@ -0,0 +1,192 @@ +package com.biutag.supervisiondata.service.impl; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.pojo.ClueData; +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseHY; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTask; +import com.biutag.supervisiondata.repository.GBaseHYRepository; +import com.biutag.supervisiondata.repository.RiskModelTaskClueRepository; +import com.biutag.supervisiondata.repository.RiskTaskRepository; +import com.biutag.supervisiondata.service.MarriageService; +import com.biutag.supervisiondata.service.RiskModelTaskClueService; +import com.biutag.supervisiondata.util.BhUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author kami on 2024-11-13 15:20:43 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class MarriageServiceImpl implements MarriageService { + + private final RiskTaskRepository riskTaskRepository; + + private final RiskModelTaskClueRepository clueRepository; + + private final RiskModelTaskClueService riskModelTaskClueService; + + private final GBaseHYRepository hyRepository; + + @Override + public void marriageModelTask(TaskParamDomain domain) { + // 婚姻不用管管控 + // clue 应该要看结婚状态 + RiskTask task = createTask(domain.getPersons().size(), 39); + riskTaskRepository.save(task); + List hyList = new ArrayList<>(); + log.info("开始查询结婚数据:{}", domain.getIdCards().size()); + int count = 0; + for (List idCard : domain.getIdCards()) { + count++; + hyList.addAll(hyRepository.list(new LambdaQueryWrapper() + .select(GBaseHY::getYwlxdmmc, GBaseHY::getYwlxdmdm,GBaseHY::getYxbzdm, GBaseHY::getNfsfhm, GBaseHY::getNvfsfhm, GBaseHY::getDjrq) + .eq(GBaseHY::getYxbzdm, "1") + .in(GBaseHY::getNfsfhm, idCard))); + hyList.addAll(hyRepository.list(new LambdaQueryWrapper() + .select(GBaseHY::getYwlxdmmc, GBaseHY::getYwlxdmdm, GBaseHY::getYxbzdm, GBaseHY::getNfsfhm, GBaseHY::getNvfsfhm,GBaseHY::getDjrq) + .eq(GBaseHY::getYxbzdm, "1") + .in(GBaseHY::getNvfsfhm, idCard))); + log.info("查询经度: {}", count); + } + + // 每个人应该是最新的婚姻登记为标准 + Map> manMap = new HashMap<>(); + Map> femanMap = new HashMap<>(); + for (GBaseHY gBaseHY : hyList) { + List tmp = Optional.ofNullable(manMap.get(gBaseHY.getNfsfhm())).orElse(new ArrayList<>()); + tmp.add(gBaseHY); + manMap.put(gBaseHY.getNfsfhm(), tmp); + + List tmp2 = Optional.ofNullable(femanMap.get(gBaseHY.getNvfsfhm())).orElse(new ArrayList<>()); + tmp2.add(gBaseHY); + femanMap.put(gBaseHY.getNvfsfhm(), tmp2); + } + + log.info("男性数据:{}", manMap.size()); + log.info("女性数据:{}", femanMap.size()); + // 旧线索 + List oldClues = Optional.ofNullable(domain.getMap().get(39)).orElse(new ArrayList<>()); + Map oldClueMap = oldClues.stream().collect(Collectors.toMap(RiskModelTaskClue::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); + // 遍历了 + List toInsertData = new ArrayList<>(); + List toUpdateData = new ArrayList<>(); + for (RiskPersonal person : domain.getPersons()) { + List tmpList = manMap.get(person.getIdCode()); + if(tmpList == null) { + tmpList = femanMap.get(person.getIdCode()); + } + if(tmpList == null) { + continue; + } + // 找到最新的婚姻登记 + GBaseHY last = null; + for (GBaseHY gBaseHY : tmpList) { + if(gBaseHY.getDjrq() == null) { + log.error("没有登记日期"); + continue; + } + if(last == null) { + last = gBaseHY; + continue; + } + if(gBaseHY.getDjrq().getTime() > last.getDjrq().getTime()) { + last = gBaseHY; + } + } + count++; + // 看看是不是离婚 + if(last == null || last.getYwlxdmdm() == null) { + continue; + } + if(last.getYwlxdmdm().toUpperCase().contains("IB") || last.getYwlxdmdm().toUpperCase().contains("ICB")) { + // 离婚 如果旧数据不存在就要新增 + RiskModelTaskClue clue = oldClueMap.get(person.getIdCode()); + if(clue == null) { + ClueData data = ClueData.builder() + .personId(person.getId()) + .tag(last.getYwlxdmmc()) + .id(last.getXlzjdjzh()) + .idCode(person.getIdCode()) + .name(person.getName()) + .sourceData("根据该人员最新的婚姻登记信息,发现该人员登记为离婚,存在感情失意的可能,增加风险分3分") + .build(); + data.setEventTime(last.getDjrq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + toInsertData.add(data); + } + } else if(last.getYwlxdmdm().toUpperCase().contains("IA") || last.getYwlxdmdm().toUpperCase().contains("ICA")) { + // 结婚 如果旧数据存在就要修改为0 + RiskModelTaskClue clue = oldClueMap.get(person.getIdCode()); + if(clue != null) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(clue.getId()); + update.setDel(1); + toUpdateData.add(update); + } + } + } + List toInsert = new ArrayList<>(); + log.info("插入数据条数: {}", toInsertData.size()); + for (ClueData toInsertDatum : toInsertData) { + toInsert.add(createClue(task.getModelId(), 3, task.getId(), toInsertDatum)); + } + + if(!toInsertData.isEmpty()) { + riskModelTaskClueService.saveClues(toInsert); + } + if(!toUpdateData.isEmpty()) { + log.info("修改线索 | {}", toUpdateData.size()); + clueRepository.updateBatchById(toUpdateData); + } + + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(toUpdateData.size()); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + riskTaskRepository.updateById(updateTask); + + } + + RiskTask createTask(Integer size, Integer modelId) { + RiskTask task = new RiskTask(); + task.setModelId(modelId); + task.setStartTime(LocalDateTime.now()); + task.setState(0); + task.setScanSize(size); + return task; + } + + RiskModelTaskClue createClue(Integer modelId, Integer score, Integer taskId, ClueData data) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(data.getName()); + clue.setIdCode(data.getIdCode()); + clue.setTaskId(taskId); + clue.setData(data.getSourceData()); + clue.setEventTime(data.getEventTime()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setCaseIds(BhUtil.ajBh(data.getId())); + data.setPersonId(null); + clue.setRiskReason(data.getTag()); + return clue; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java new file mode 100644 index 0000000..ee74460 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/NoControlServiceImpl.java @@ -0,0 +1,302 @@ +package com.biutag.supervisiondata.service.impl; + +import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; +import com.biutag.supervisiondata.pojo.ClueData; +import com.biutag.supervisiondata.pojo.constants.Default; +import com.biutag.supervisiondata.pojo.domain.*; +import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; +import com.biutag.supervisiondata.pojo.entity.mine.RiskTask; +import com.biutag.supervisiondata.repository.GBaseZDRYRepository; +import com.biutag.supervisiondata.repository.RiskPersonalRepository; +import com.biutag.supervisiondata.repository.RiskTaskRepository; +import com.biutag.supervisiondata.service.NoControlService; +import com.biutag.supervisiondata.service.RiskModelTaskClueService; +import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.service.RiskPersonalTagService; +import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.BhUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +/** + * @author kami on 2024-11-18 14:06:17 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class NoControlServiceImpl implements NoControlService { + + private final GBaseZDRYRepository zdryRepository; + + private final RiskTaskRepository riskTaskRepository; + + private final RiskPersonalTagService tagService; + + private final RiskPersonalRepository personalRepository; + + private final RiskModelTaskClueService clueService; + + @Override + public void syncNoControlData(TaskParamDomain domain) { + // 婚姻不用管管控 + // clue 应该要看结婚状态 + RiskTask task = createTask(domain.getPersons().size(), 45); + riskTaskRepository.save(task); + RiskTask task2 = createTask(domain.getPersons().size(), 47); + riskTaskRepository.save(task2); + + List clueData = new ArrayList<>(); + Map idCodes = new HashMap<>(); + Map mobiles = new HashMap<>(); + for (RiskPersonal person : domain.getPersons()) { + idCodes.put(person.getIdCode(), person); + mobiles.put(person.getMobileNumber(), person); + } + + CompletableFuture.allOf( + CompletableFutureUtil.runSyncObject(() -> clueData.addAll(crazyControl(idCodes, mobiles))), + CompletableFutureUtil.runSyncObject(() -> clueData.addAll(violenceControl(idCodes))), + CompletableFutureUtil.runSyncObject(() -> clueData.addAll(zyControl(idCodes))), + CompletableFutureUtil.runSyncObject(() -> clueData.addAll(crazyLevelThreeControl(idCodes, mobiles))) + ).join(); + List tags = new ArrayList<>(); + List toUpdate = new ArrayList<>(); + List clues = new ArrayList<>(); + + for (ClueData clueDatum : clueData) { + RiskPersonal personal = idCodes.get(clueDatum.getIdCode()); + if(personal.getTags().indexOf(Default.NO_CONTROL) == -1) { + RiskPersonal newOne = new RiskPersonal(); + newOne.setId(personal.getId()); + newOne.setTags(personal.getTags().concat(",".concat(Default.NO_CONTROL))); + personal.setTags(personal.getTags().concat(",".concat(Default.NO_CONTROL))); + idCodes.put(clueDatum.getIdCode(), personal); + toUpdate.add(newOne); + } + RiskPersonalTag tag = new RiskPersonalTag(); + tag.setBigTag(Default.NO_CONTROL); + tag.setTagTime(Optional.ofNullable(clueDatum.getEventTime()).orElse(LocalDateTime.now())); + tag.setName(clueDatum.getName()); + tag.setIdCode(clueDatum.getIdCode()); + tag.setSmallTag(clueDatum.getTag()); + tag.setCreateTime(LocalDateTime.now()); + tags.add(tag); + if(clueDatum.getTag().equals("神疾病三级以上人员管控不到位")) { + clues.add(createClue(task2.getModelId(), 3, task.getId(), clueDatum)); + } else { + clues.add(createClue(task.getModelId(), 5, task.getId(), clueDatum)); + } + + } + if(!tags.isEmpty()) { + tagService.saveBatchTag(tags, Default.NO_CONTROL); + } + if(!toUpdate.isEmpty()) { + log.info("修改人数:{}", toUpdate.size()); + personalRepository.updateBatchById(toUpdate); + } + if(!clues.isEmpty()) { + clueService.saveClues(clues); + } + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(clues.size()); + updateTask.setUpdateSize(toUpdate.size()); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + riskTaskRepository.updateById(updateTask); + } + + RiskTask createTask(Integer size, Integer modelId) { + RiskTask task = new RiskTask(); + task.setModelId(modelId); + task.setStartTime(LocalDateTime.now()); + task.setState(0); + task.setScanSize(size); + return task; + } + + RiskModelTaskClue createClue(Integer modelId, Integer score, Integer taskId, ClueData data) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(data.getName()); + clue.setIdCode(data.getIdCode()); + clue.setTaskId(taskId); + clue.setData(data.getSourceData()); + clue.setEventTime(data.getEventTime()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setCaseIds(BhUtil.ajBh(data.getId())); + data.setPersonId(null); + clue.setRiskReason(data.getTag()); + return clue; + } + + List crazyControl(Map idCodes, Map mobiles) { + // 精神病人属于重点人员,发现多起警情 疑似存在管控不到位的现象 + List extremeList = zdryRepository.getBaseMapper().syncPointNoControlCrazy(); + List clueData = new ArrayList<>(); + for (Extreme extreme : extremeList) { + RiskPersonal person = null; + if (extreme.getBjrzjhm() != null) { + person = idCodes.get(extreme.getBjrzjhm()); + } + if(person == null && extreme.getBjrlxdh() != null) { + person = mobiles.get(extreme.getBjrlxdh()); + } + if(person == null) { + continue; + } + ClueData data = ClueData.builder() + .id(BhUtil.jjdBh(extreme.getJjdbh())) + .idCode(person.getIdCode()) + .name(person.getName()) + .personId(person.getId()) + .tag("精神病人管控不到位") + .sourceData("该人员属于精神病人,涉及到有关警情,"+Optional.ofNullable(extreme.getJjdbh()).map(it -> "接警单编号:"+it).orElse("")+"属于管控不到位"+Optional.ofNullable(extreme.getCjqk()).map(it -> ",具体情况:"+it).orElse("")) + .departName(extreme.getGxdwmc()) + .departId(extreme.getGxdwdm()) + .build(); + try { + data.setEventTime(extreme.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + log.error("报案时间异常"); + } + clueData.add(data); + } + return clueData; + } + + List violenceControl(Map idCodes) { + // 故意犯罪并作出刑事判决人员(排除仍在羁押状态的)、公安机关查处吸毒人员(排除仍在羁押状态的), 发现在重点人员中 未纳入或未按要求落实双列管 + List violences = zdryRepository.getBaseMapper().syncPointNoControl(); + List clueData = new ArrayList<>(); + for (Violence violence : violences) { + RiskPersonal person = null; + if (violence.getZjhm() != null) { + person = idCodes.get(violence.getZjhm()); + } + if(person == null) { + continue; + } + ClueData data = ClueData.builder() + .id(BhUtil.ajBh(violence.getAjbh())) + .idCode(person.getIdCode()) + .name(person.getName()) + .personId(person.getId()) + .tag("刑事、吸毒人员管控不到位") + .sourceData("该人员属于故意犯罪并作出刑事判决人员(排除仍在羁押状态的)、公安机关查处吸毒人员(排除仍在羁押状态的),涉及到案件,"+Optional.ofNullable(violence.getAjbh()).map(it -> "案件编号:"+it).orElse("")+"属于管控不到位"+Optional.ofNullable(violence.getAjmc()).map(it -> ",案件名称:"+it).orElse("")+Optional.ofNullable(violence.getWfss()).map(it -> ",违法事实:"+it).orElse("")) + .departName(violence.getBadwidmc()) + .departId(violence.getBadwiddm()) + .build(); + try { + data.setEventTime(violence.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + log.error("报案时间异常"); + } + clueData.add(data); + } + return clueData; + } + + List zyControl(Map idCodes) { + // 看守所故意犯罪刑满释放不满5年人员, 发现在重点人员中 未纳入或未按要求落实双列管 + List noControls = zdryRepository.getBaseMapper().syncPointZDRYNoControl(); + List clueData = new ArrayList<>(); + for (NoControl noControl : noControls) { + RiskPersonal person = null; + if (noControl.getIdCardNo() != null) { + person = idCodes.get(noControl.getIdCardNo()); + } + if(person == null) { + continue; + } + ClueData data = ClueData.builder() + .id(BhUtil.zyBh(noControl.getDetNo())) + .idCode(person.getIdCode()) + .name(person.getName()) + .personId(person.getId()) + .tag("刑满释放人管控不到位") + .sourceData("该人员属于看守所故意犯罪刑满释放不满5年人员,发现在重点人员中 未纳入或未按要求落实双列管,"+Optional.ofNullable(noControl.getCrime()).map(it -> "涉及犯罪事实:"+it).orElse("")+""+Optional.ofNullable(noControl.getBriefCase()).map(it -> ",,具体事件表现为:"+it).orElse("")) + .departName(noControl.getCaseUnit()) + .departId(noControl.getCaseUnitId()) + .build(); + try { + data.setEventTime(noControl.getOutDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + log.error("出监狱时间异常"); + } + clueData.add(data); + } + return clueData; + } + + List crazyLevelThreeControl(Map idCodes,Map mobiles) { + // 卫健委精神疾病三级以上人员,发现在重点人员中 未纳入或未按要求落实双列管 + List crazyLevelThreeList = zdryRepository.getBaseMapper().syncCrazyLevelThree(); + List clueData = new ArrayList<>(); + for (CrazyLevelThree crazyLevelThree : crazyLevelThreeList) { + RiskPersonal person = null; + if (crazyLevelThree.getSfzh() != null) { + person = idCodes.get(crazyLevelThree.getSfzh()); + } + if(person == null && crazyLevelThree.getLxdh() != null) { + person = mobiles.get(crazyLevelThree.getLxdh()); + } + if(person == null) { + continue; + } + clueData.add(ClueData.builder() + .id("") + .idCode(person.getIdCode()) + .name(person.getName()) + .personId(person.getId()) + .tag("神疾病三级以上人员管控不到位") + .sourceData("卫健委精神疾病三级以上人员,发现在重点人员中 未纳入或未按要求落实双列管"+Optional.ofNullable(crazyLevelThree.getTsqksm()).map(it -> ",备注:"+it).orElse("")) + .build()); + } + return clueData; + } + + RiskPersonal createPerson(String idCode, String name, String mobile, String controlDepartId, String controlDepartName, Date controlTime) { + RiskPersonal personal = new RiskPersonal(); + personal.setIdCode(idCode); + personal.setName(name); + personal.setMobileNumber(mobile); + personal.setControlDepartId(controlDepartId); + personal.setControlDepartName(controlDepartName); + // 如果有报警时间,暂时填报警时间 处理标签回正 + try { + LocalDateTime time = controlTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + personal.setCreateTime(time); + personal.setControlTime(time); + } catch (Exception e) { + log.info("报警时间处理异常"); + } + try { + int gender = idCode.length() == 18 ? Integer.valueOf(idCode.substring(16, 17)) : Integer.valueOf(idCode.substring(14, 15)); + // 结果0男1女 余数偶女奇男 + personal.setGender(gender % 2 == 0 ? "2" : "1"); + } catch (Exception e) { + log.info("性别异常"); + } + personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + // 这里暂时将小标签放到预览属性 处理标签回正 + return personal; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java new file mode 100644 index 0000000..77352ac --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java @@ -0,0 +1,573 @@ +package com.biutag.supervisiondata.service.impl; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; +import com.biutag.supervisiondata.pojo.ClueData; +import com.biutag.supervisiondata.pojo.constants.Default; +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; +import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; +import com.biutag.supervisiondata.pojo.entity.mine.*; +import com.biutag.supervisiondata.repository.*; +import com.biutag.supervisiondata.service.PetitionService; +import com.biutag.supervisiondata.service.RiskModelTaskClueService; +import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.BhUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author kami on 2024-11-14 16:01:37 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class PetitionServiceImpl implements PetitionService { + + private final DataPetition12337Repository petition12337Repository; + + private final DataPetitionComplaintRepository complaintRepository; + + private final DataCaseVerifRepository dataCaseVerifRepository; + + private final GBaseSYRKXXRepository syrkxxRepository; + + private final RiskTaskRepository riskTaskRepository; + + private final RiskPersonalService riskPersonalService; + + private final RiskModelTaskClueService riskModelTaskClueService; + + private final RiskModelTaskClueRepository clueRepository; + + @Override + public void personPullAndSave(LocalDateTime start, LocalDateTime end) { + List personals1 = new ArrayList<>(); + List personals2= new ArrayList<>(); + List personals3= new ArrayList<>(); + List idCards = new ArrayList<>(); + List idCards_b = new ArrayList<>(); + List mobiles = new ArrayList<>(); + CompletableFuture.allOf( + CompletableFutureUtil.runSyncObject(() -> { + List list = petition12337Repository.list(new LambdaQueryWrapper() + .select(DataPetition12337::getName, DataPetition12337::getIdCode, DataPetition12337::getPhone,DataPetition12337::getThirdDepartId, DataPetition12337::getThirdDepartName, DataPetition12337::getDiscoverTime).between(DataPetition12337::getDiscoverTime, start, end) + .isNotNull(DataPetition12337::getIdCode)); + for (DataPetition12337 data : list) { + RiskPersonal person = new RiskPersonal(); + person.setIdCode(data.getIdCode()); + person.setName(data.getName()); + person.setMobileNumber(data.getPhone()); + person.setTags(Default.PETITION_12337_TAG); + person.setControlDepartId(data.getThirdDepartId()); + person.setControlDepartName(data.getThirdDepartName()); + person.setControlTime(data.getDiscoverTime()); + personals1.add(person); + idCards.add(data.getIdCode()); + } + }), + CompletableFutureUtil.runSyncObject(() -> { + List list = complaintRepository.list(new LambdaQueryWrapper() + .select(DataPetitionComplaint::getResponderName, DataPetitionComplaint::getResponderPhone, DataPetitionComplaint::getResponderName,DataPetitionComplaint::getThirdDepartId, DataPetitionComplaint::getThirdDepartName, DataPetitionComplaint::getDiscoveryTime).between(DataPetitionComplaint::getResponderIdCode, start, end) + .isNotNull(DataPetitionComplaint::getResponderIdCode)); + for (DataPetitionComplaint data : list) { + RiskPersonal person = new RiskPersonal(); + person.setIdCode(data.getResponderIdCode()); + person.setName(data.getResponderName()); + person.setMobileNumber(data.getResponderPhone()); + person.setTags(Default.PETITION_TAG); + person.setControlDepartId(data.getThirdDepartId()); + person.setControlDepartName(data.getThirdDepartName()); + person.setControlTime(data.getDiscoveryTime()); + personals2.add(person); + idCards_b.add(data.getResponderIdCode()); + } + }), + CompletableFutureUtil.runSyncObject(() -> { + List list = dataCaseVerifRepository.list(new LambdaQueryWrapper() + .select(DataCaseVerif::getResponderName, DataCaseVerif::getResponderPhone,DataCaseVerif::getThirdDepartId, DataCaseVerif::getThirdDepartName, DataCaseVerif::getDiscoveryTime).between(DataCaseVerif::getDiscoveryTime, start, end) + .isNotNull(DataCaseVerif::getResponderPhone)); + for (DataCaseVerif data : list) { + RiskPersonal person = new RiskPersonal(); + person.setName(data.getResponderName()); + person.setMobileNumber(data.getResponderPhone()); + person.setTags(Default.PETITION_CASE_TAG); + person.setControlDepartId(data.getThirdDepartId()); + person.setControlDepartName(data.getThirdDepartName()); + person.setControlTime(data.getDiscoveryTime()); + personals3.add(person); + mobiles.add(data.getResponderPhone()); + } + }) + ).join(); + log.info("{} | {} | {}",idCards.size(), idCards_b.size(), mobiles.size()); + idCards.addAll(idCards_b); + List idCards2 = idCards.stream().distinct().toList(); + List mobiles2 = mobiles.stream().distinct().toList(); + + log.info("证件数: {}", idCards.size()); + log.info("手机数: {}", mobiles.size()); + + List xxList = new ArrayList<>(); + List xxMobileList = new ArrayList<>(); + CompletableFuture.allOf( + CompletableFutureUtil.runSyncObject(() -> { + List> idCodes = IntStream.range(0, (idCards2.size() + 9999) / 10000) + .mapToObj(i -> idCards2.subList(i * 10000, Math.min((i + 1) * 10000, idCards2.size()))) + .toList(); + int count = idCodes.size(); + for (List idCode : idCodes) { + count--; + xxList.addAll(syrkxxRepository.list(new LambdaQueryWrapper() + .select(GBaseSYRKXX::getLxdh, GBaseSYRKXX::getXlmc, GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getCsrq, GBaseSYRKXX::getXbdm) + .in(GBaseSYRKXX::getGmsfhm, idCode))); + log.info("身份证进度 | {}", count); + } + + }), + CompletableFutureUtil.runSyncObject(() -> { + List> phones = IntStream.range(0, (mobiles2.size() + 9999) / 10000) + .mapToObj(i -> mobiles2.subList(i * 10000, Math.min((i + 1) * 10000, mobiles2.size()))) + .toList(); + int count = phones.size(); + for (List phone : phones) { + count--; + xxMobileList.addAll(syrkxxRepository.list(new LambdaQueryWrapper() + .select(GBaseSYRKXX::getLxdh, GBaseSYRKXX::getXlmc, GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getCsrq, GBaseSYRKXX::getXbdm) + .in(GBaseSYRKXX::getLxdh, phone))); + log.info("手机进度 | {}", count); + } + }) + ).join(); + Map map = xxList.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue)); + Map> mobileMap = xxMobileList.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh)); + List toInsert = new ArrayList<>(); + for (RiskPersonal personal : personals1) { + GBaseSYRKXX xx = map.get(personal.getIdCode()); + if(xx == null) { + personal = checkPerson(personal); + if(personal != null) { + toInsert.add(personal); + } + continue; + } + personal.setGender(xx.getXbdm()); + if(xx.getLxdh() != null) { + personal.setMobileNumber(xx.getLxdh()); + } + personal.setName(xx.getXm()); + personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + if(personal.getAge() <= 6) { + continue; + } + toInsert.add(personal); + } + for (RiskPersonal personal : personals2) { + GBaseSYRKXX xx = map.get(personal.getIdCode()); + if(xx == null) { + personal = checkPerson(personal); + if(personal != null) { + toInsert.add(personal); + } + continue; + } + personal.setGender(xx.getXbdm()); + if(xx.getLxdh() != null) { + personal.setMobileNumber(xx.getLxdh()); + } + personal.setName(xx.getXm()); + personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + if(personal.getAge() <= 6) { + continue; + } + toInsert.add(personal); + } + for (RiskPersonal personal : personals3) { + List xx = mobileMap.get(personal.getMobileNumber()); + if(xx == null) { + continue; + } + GBaseSYRKXX info = null; + if(xx.size() ==1) { + info = xx.getFirst(); + } else { + info = compare(xx, personal.getName()); + } + if(info == null) { + continue; + } + personal.setIdCode(info.getGmsfhm()); + personal.setGender(info.getXbdm()); + if(info.getLxdh() != null) { + personal.setMobileNumber(info.getLxdh()); + } + personal.setName(info.getXm()); + personal.setAge(Optional.ofNullable(AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1)); + if(personal.getAge() <= 6) { + continue; + } + toInsert.add(personal); + } + + log.info("人员开始入库 {}", toInsert.size()); + riskPersonalService.formatAndSave(toInsert, Default.BIG_TAG_PETITION); + } + + @Override + public void petitionModelTask(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 40); + riskTaskRepository.save(task); + + LocalDateTime time = LocalDateTime.now().minusMonths(12); + List pList1 = new ArrayList<>(); + for (List idCard : domain.getIdCards()) { + pList1.addAll(petition12337Repository.list(new LambdaQueryWrapper() + .select(DataPetition12337::getOnlyId, DataPetition12337::getName, DataPetition12337::getIdCode, DataPetition12337::getPhone,DataPetition12337::getThirdDepartId, DataPetition12337::getThirdDepartName, DataPetition12337::getDiscoverTime, DataPetition12337::getReviewDes).ge(DataPetition12337::getDiscoverTime, time) + .in(DataPetition12337::getIdCode, idCard))); + } + + List pList2 = new ArrayList<>(); + for (List idCard : domain.getIdCards()) { + pList2.addAll(complaintRepository.list(new LambdaQueryWrapper() + .select(DataPetitionComplaint::getOriginId, DataPetitionComplaint::getResponderName, DataPetitionComplaint::getResponderPhone, DataPetitionComplaint::getResponderName,DataPetitionComplaint::getThirdDepartId, DataPetitionComplaint::getThirdDepartName, DataPetitionComplaint::getDiscoveryTime, DataPetitionComplaint::getThingDesc).ge(DataPetitionComplaint::getDiscoveryTime, time) + .in(DataPetitionComplaint::getResponderPhone, idCard))); + } + + List pList3 = new ArrayList<>(); + List mobiles = domain.getPersons().stream().map(RiskPersonal::getMobileNumber).distinct().toList(); + List> doubleMobile = IntStream.range(0, (mobiles.size() + 9999) / 10000) + .mapToObj(i -> mobiles.subList(i * 10000, Math.min((i + 1) * 10000, mobiles.size()))) + .toList(); + for (List mobile : doubleMobile) { + pList3.addAll(dataCaseVerifRepository.list(new LambdaQueryWrapper() + .select(DataCaseVerif::getOriginId, DataCaseVerif::getResponderName, DataCaseVerif::getResponderPhone,DataCaseVerif::getThirdDepartId, DataCaseVerif::getThirdDepartName, DataCaseVerif::getDiscoveryTime, DataCaseVerif::getThingDesc).ge(DataCaseVerif::getDiscoveryTime, time) + .in(DataCaseVerif::getResponderPhone, mobile))); + } + // 先搞定这个电话号码的 + Map> man = domain.getPersons().stream().filter(item -> item.getMobileNumber() != null).collect(Collectors.groupingBy(RiskPersonal::getMobileNumber)); + Map idCodeMan = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); + + List data = new ArrayList<>(); + for (DataCaseVerif dataCaseVerif : pList3) { + List list = man.get(dataCaseVerif.getResponderPhone()); + RiskPersonal person = comparePerson(list, dataCaseVerif.getResponderName()); + if(person == null) { + continue; + } + data.add(ClueData.builder() + .id(dataCaseVerif.getOriginId()) + .tag(Default.PETITION_CASE_TAG) + .personId(person.getId()) + .departId(dataCaseVerif.getThirdDepartId()) + .departName(dataCaseVerif.getThirdDepartName()) + .eventTime(dataCaseVerif.getDiscoveryTime()) + .idCode(person.getIdCode()) + .name(person.getName()) + .sourceData("该人员在近12个月内有诉求不满或长期未化解的情况,增加风险分2分,具体情况为:"+dataCaseVerif.getThingDesc()) + .build()); + } + + for (DataPetition12337 item : pList1) { + RiskPersonal person = idCodeMan.get(item.getIdCode()); + if(person == null) { + continue; + } + data.add(ClueData.builder() + .id(item.getOnlyId()) + .tag(Default.PETITION_12337_TAG) + .personId(person.getId()) + .departId(item.getThirdDepartId()) + .departName(item.getThirdDepartName()) + .eventTime(item.getDiscoverTime()) + .idCode(person.getIdCode()) + .name(person.getName()) + .sourceData("该人员在近12个月内有诉求不满或长期未化解的情况,增加风险分2分,具体情况为:"+item.getReviewDes()) + .build()); + } + + for (DataPetitionComplaint item : pList2) { + RiskPersonal person = idCodeMan.get(item.getResponderIdCode()); + if(person == null) { + continue; + } + data.add(ClueData.builder() + .id(item.getOriginId()) + .tag(Default.PETITION_TAG) + .personId(person.getId()) + .departId(item.getThirdDepartId()) + .departName(item.getThirdDepartName()) + .eventTime(item.getDiscoveryTime()) + .idCode(person.getIdCode()) + .name(person.getName()) + .sourceData("该人员在近12个月内有诉求不满或长期未化解的情况,增加风险分2分,具体情况为:"+item.getThingDesc()) + .build()); + } + + // 数据部分 + List toUpdates = new ArrayList<>(); + List toInsert = new ArrayList<>(); + List touUpdatePerson = new ArrayList<>(); + List toInsertRecrod = new ArrayList<>(); + + + // 操作前查询之前的数据,可能要合并 + List oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); + List oldResults = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); + for (RiskModelTaskClue clue : oldList) { + if(clue.getEventTime().isBefore(time)) { + // 再见了兄弟 + RiskModelTaskClue clue1 = new RiskModelTaskClue(); + clue1.setId(clue.getId()); + clue1.setDel(1); + toUpdates.add(clue1); + } else { + oldResults.add(clue); + } + } + + + Map> oldMap = oldResults.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + + Map> clueMap = data.stream().collect(Collectors.groupingBy(ClueData::getIdCode)); + // 按季度计分 + for (Map.Entry> entry : clueMap.entrySet()) { + List oldClues = Optional.ofNullable(oldMap.get(entry.getKey())).orElse(new ArrayList<>()); + // - 先筛选出老记录,如果已经入库过了,新增的就删除 + Map oldClueMap = oldClues.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (oldValue, newValue) -> newValue)); + // 胜利者将继续进行筛选 + List winner = new ArrayList<>(); + + // 人员的管控信息 + boolean updatePeople = false; + RiskPersonal person = idCodeMan.get(entry.getKey()); + + for (ClueData clueData : entry.getValue()) { + // 找不到旧编号才继续 + if(oldClueMap.get(BhUtil.petBh(clueData.getId())) == null) { + winner.add(createClue(task.getModelId(), 2, task.getId(), clueData)); + if(person.getControlTime() != null && person.getControlTime().isBefore(clueData.getEventTime())) { + updatePeople = true; + person.setControlTime(clueData.getEventTime()); + person.setControlDepartId(clueData.getDepartId()); + person.setControlDepartName(clueData.getDepartName()); + } + toInsertRecrod.add(createControlRecord(clueData)); + } + } + if(updatePeople) { + RiskPersonal updatePerson = new RiskPersonal(); + updatePerson.setId(person.getId()); + updatePerson.setControlTime(person.getControlTime()); + updatePerson.setControlDepartId(person.getControlDepartId()); + updatePerson.setControlDepartName(person.getControlDepartName()); + touUpdatePerson.add(updatePerson); + } + // - 结合新旧数据,从新计算季度,季度最晚的算分 + oldClues.addAll(winner); + Map> winnerMap = new WeakHashMap<>(); + // 去年季度 + Map> lastWinnerMap = new WeakHashMap<>(); + int year = time.getYear(); + for (RiskModelTaskClue oldClue : oldClues) { + int month = oldClue.getEventTime().getMonthValue(); + int theYear = oldClue.getEventTime().getYear(); + int session = month / 3; + if(theYear != year) { + List list = Optional.ofNullable(lastWinnerMap.get(session)).orElse(new ArrayList<>()); + list.add(oldClue); + lastWinnerMap.put(session, list); + } else { + List list = Optional.ofNullable(winnerMap.get(session)).orElse(new ArrayList<>()); + list.add(oldClue); + winnerMap.put(session, list); + } + } + + // - 上季度排序 + for (Map.Entry> entities : lastWinnerMap.entrySet()) { + List list = entities.getValue(); + list.sort(Comparator.comparing(RiskModelTaskClue::getEventTime, Comparator.reverseOrder())); + RiskModelTaskClue clue = list.getFirst(); + int years = clue.getEventTime().getYear(); + String [] str = clue.getRiskReason().split("-"); + if(clue.getId() != null) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(clue.getId()); + update.setScore(2); + update.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度"); + toUpdates.add(update); + } else { + clue.setScore(2); + clue.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度"); + toInsert.add(clue); + } + list.remove(0); + for (RiskModelTaskClue riskModelTaskClue : list) { + years = riskModelTaskClue.getEventTime().getYear(); + str = riskModelTaskClue.getRiskReason().split("-"); + if(riskModelTaskClue.getId() != null) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(riskModelTaskClue.getId()); + update.setScore(0); + update.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度季度(已合并到本季度最后)"); + toUpdates.add(update); + } else { + riskModelTaskClue.setScore(0); + riskModelTaskClue.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度季度(已合并到本季度最后)"); + toInsert.add(riskModelTaskClue); + } + } + } + + // - 本季度排序 + for (Map.Entry> entities : winnerMap.entrySet()) { + List list = entities.getValue(); + list.sort(Comparator.comparing(RiskModelTaskClue::getEventTime, Comparator.reverseOrder())); + RiskModelTaskClue clue = list.getFirst(); + int years = clue.getEventTime().getYear(); + String [] str = clue.getRiskReason().split("-"); + if(clue.getId() != null) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(clue.getId()); + update.setScore(2); + update.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度"); + toUpdates.add(update); + } else { + clue.setScore(2); + clue.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度"); + toInsert.add(clue); + } + list.remove(0); + for (RiskModelTaskClue riskModelTaskClue : list) { + years = riskModelTaskClue.getEventTime().getYear(); + str = riskModelTaskClue.getRiskReason().split("-"); + if(riskModelTaskClue.getId() != null) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(riskModelTaskClue.getId()); + update.setScore(0); + update.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度季度(已合并到本季度最后)"); + toUpdates.add(update); + } else { + riskModelTaskClue.setScore(0); + riskModelTaskClue.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度季度(已合并到本季度最后)"); + toInsert.add(riskModelTaskClue); + } + } + } + } + if(!toInsert.isEmpty()) { + riskModelTaskClueService.saveClues(toInsert); + } + + if(!toUpdates.isEmpty()) { + log.info("修改线索数 | {}", toUpdates.size()); + clueRepository.updateBatchById(toUpdates); + } + + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(toUpdates.size()); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + riskTaskRepository.updateById(updateTask); + } + + GBaseSYRKXX compare(List infos, String name) { + GBaseSYRKXX info = null; + for (GBaseSYRKXX gBaseSYRKXX : infos) { + if(gBaseSYRKXX.getXm().equals(name)) { + info=gBaseSYRKXX; + break; + } + } + return info; + } + + RiskPersonal comparePerson(List infos, String name) { + RiskPersonal info = null; + for (RiskPersonal gBaseSYRKXX : infos) { + if(gBaseSYRKXX.getName().equals(name)) { + info=gBaseSYRKXX; + break; + } + } + return info; + } + + RiskTask createTask(Integer size, Integer modelId) { + RiskTask task = new RiskTask(); + task.setModelId(modelId); + task.setStartTime(LocalDateTime.now()); + task.setState(0); + task.setScanSize(size); + return task; + } + + RiskModelTaskClue createClue(Integer modelId, Integer score, Integer taskId, ClueData data) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(data.getName()); + clue.setIdCode(data.getIdCode()); + clue.setTaskId(taskId); + clue.setData(data.getSourceData()); + clue.setEventTime(data.getEventTime()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setCaseIds(BhUtil.petBh(data.getId())); + data.setPersonId(null); + clue.setRiskReason(data.getTag()); + return clue; + } + + RiskPersonalControlRecord createControlRecord(ClueData data) { + RiskPersonalControlRecord controlRecord = new RiskPersonalControlRecord(); + controlRecord.setName(data.getName()); + controlRecord.setIdCode(data.getIdCode()); + controlRecord.setCreateTime(LocalDateTime.now()); + controlRecord.setControlTime(data.getEventTime()); + controlRecord.setControlDepartId(data.getDepartId()); + controlRecord.setControlDepartName(data.getDepartName()); + controlRecord.setControlTag(data.getTag()); + controlRecord.setCaseId(BhUtil.ajBh(data.getId())); + return controlRecord; + } + + RiskPersonal checkPerson(RiskPersonal personal) { + if(personal.getName()== null ||personal.getIdCode() == null || personal.getName().isEmpty() || personal.getIdCode().isEmpty()) { + return null; + } + try{ + int age = AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now()); + if(age <= 6) { + return null; + } + personal.setAge(age); + } catch (Exception e) { + return null; + } + if(personal.getGender() == null) { + try{ + int gender = personal.getIdCode().length() == 18 ? Integer.valueOf(personal.getIdCode().substring(16, 17)) : Integer.valueOf(personal.getIdCode().substring(14, 15)); + // 结果0男1女 余数偶女奇男 + personal.setGender(gender % 2 == 0 ?"2":"1"); + } catch (Exception e) { + return null; + } + } + return personal; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java new file mode 100644 index 0000000..9b8e078 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java @@ -0,0 +1,599 @@ +package com.biutag.supervisiondata.service.impl; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.config.cache.RedisDao; +import com.biutag.supervisiondata.mapper.mine.SupDepartMapper; +import com.biutag.supervisiondata.mapper.mine.SupExternalDepartMapper; +import com.biutag.supervisiondata.pojo.ClueData; +import com.biutag.supervisiondata.pojo.constants.Default; +import com.biutag.supervisiondata.pojo.domain.*; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseTbDZdrylb; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDRY; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseZDXL; +import com.biutag.supervisiondata.pojo.entity.mine.*; +import com.biutag.supervisiondata.repository.*; +import com.biutag.supervisiondata.service.PointService; +import com.biutag.supervisiondata.service.RiskModelTaskClueService; +import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.BhUtil; +import com.biutag.supervisiondata.util.PatternUtil; +import com.biutag.supervisiondata.util.TxtUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.awt.*; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author kami on 2024-11-15 18:04:18 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class PointServiceImpl implements PointService { + + private final GBaseZDRYRepository zdryRepository; + + private final GBaseZDXLRepository zdxlRepository; + + private final RiskPersonalService riskPersonalService; + + private final RiskModelTaskClueService modelTaskClueService; + + private final RiskTaskRepository taskRepository; + + private final SupDepartMapper supDepartMapper; + + @Override + public void personPullAndSave(LocalDateTime start, LocalDateTime end) { + riskPersonalService.formatAndSave(getPersons(), Default.POINT_POEPLE); + } + + @Override + public void syncScore(TaskParamDomain domain) { + List persons = getPersons(); + RiskTask task = createTask(persons.size(), 43); + taskRepository.save(task); + + List clues = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); + Map> oldClueMap = clues.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + Map> map = persons.stream().collect(Collectors.groupingBy(RiskPersonal::getIdCode)); + + List toInsert = new ArrayList<>(); + + for (Map.Entry> entry : map.entrySet()) { + List olds = oldClueMap.get(entry.getKey()); + if (olds == null) { + // 全部增加 + for (RiskPersonal personal : entry.getValue()) { + toInsert.add(createClue(task.getModelId(), 5, task.getId(), ClueData.builder() + .tag(personal.getTags()) + .name(personal.getName()) + .idCode(personal.getIdCode()) + .eventTime(Optional.ofNullable(personal.getControlTime()).orElse(LocalDateTime.now())) + .departId(personal.getControlDepartId()) + .departName(personal.getControlDepartName()) + .sourceData("该人员存在标签:" + personal.getTags() + ",属于特定人员,增加风险分5分") + .build())); + } + continue; + } + Map clueMap = olds.stream().collect(Collectors.toMap(RiskModelTaskClue::getRiskReason, Function.identity(), (oldValue, newValue) -> newValue)); + for (RiskPersonal personal : entry.getValue()) { + if (clueMap.get(personal.getTags()) == null) { + toInsert.add(createClue(task.getModelId(), 5, task.getId(), ClueData.builder() + .tag(personal.getTags()) + .name(personal.getName()) + .idCode(personal.getIdCode()) + .eventTime(Optional.ofNullable(personal.getControlTime()).orElse(LocalDateTime.now())) + .departId(personal.getControlDepartId()) + .departName(personal.getControlDepartName()) + .sourceData("该人员存在标签:" + personal.getTags() + ",属于特定人员,增加风险分5分") + .build())); + } + } + } + if (!toInsert.isEmpty()) { + modelTaskClueService.saveClues(toInsert); + } + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(0); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + taskRepository.updateById(updateTask); + } + + @Override + public void syncViolence(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 44); + taskRepository.save(task); + Map personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); + + List list = zdryRepository.getBaseMapper().syncViolencePerson(); + + Map> map = new HashMap<>(); + + List olds = Optional.ofNullable(domain.getMap().get(task.getId())).orElse(new ArrayList<>()); + Map> maps = olds.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + List toInsert = new ArrayList<>(); + for (Violence violence : list) { + if (violence.getZjhm() == null || personalMap.get(violence.getZjhm()) == null) { + continue; + } + Map old = Optional.ofNullable(map.get(violence.getZjhm())).orElse(new HashMap<>()); + if (old.get(violence.getAjbh()) != null) { + continue; + } + + List oldClues = Optional.ofNullable(maps.get(violence.getZjhm())).orElse(new ArrayList<>()); + Map oldMap = oldClues.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (oldValue, newValue) -> newValue)); + if (oldMap.get(BhUtil.ajBh(violence.getAjbh())) != null) { + continue; + } + old.put(violence.getAjbh(), 1); + map.put(violence.getZjhm(), old); + RiskPersonal person = personalMap.get(violence.getZjhm()); + ClueData data = ClueData.builder() + .name(person.getName()) + .id(violence.getAjbh()) + .personId(person.getId()) + .idCode(person.getIdCode()) + .sourceData(JSON.toJSONString(violence)) + .sourceData("通过核查案件信息,发现该人员有暴力伤害行为,案件编号为:" + violence.getAjbh() + Optional.ofNullable(violence.getWfss()).map(it -> ",具体情况为:" + it).orElse("")) + .tag(violence.getAjlbmc()) + .build(); + if (violence.getBadwiddm() != null) { + data.setDepartId(violence.getBadwiddm()); + data.setDepartId(violence.getBadwidmc()); + } + try { + data.setEventTime(violence.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + } + toInsert.add(createClue2(task.getModelId(), 5, task.getId(), data)); + } + + if (!toInsert.isEmpty()) { + modelTaskClueService.saveClues(toInsert); + } + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(0); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + taskRepository.updateById(updateTask); + } + + @Override + public void syncKillSelf(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 46); + taskRepository.save(task); + Map personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); + List list = zdryRepository.getBaseMapper().syncKillSelf(); + List olds = Optional.ofNullable(domain.getMap().get(task.getId())).orElse(new ArrayList<>()); + Map> maps = olds.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + List toInsert = new ArrayList<>(); + for (Extreme extreme : list) { + if (extreme.getBjrzjhm() == null || personalMap.get(extreme.getBjrzjhm()) == null) { + continue; + } + List oldClues = Optional.ofNullable(maps.get(extreme.getBjrzjhm())).orElse(new ArrayList<>()); + Map oldMap = oldClues.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (oldValue, newValue) -> newValue)); + if (oldMap.get(BhUtil.jjdBh(extreme.getJjdbh())) != null) { + continue; + } + RiskPersonal person = personalMap.get(extreme.getBjrzjhm()); + ClueData data = ClueData.builder() + .name(person.getName()) + .id(extreme.getJjdbh()) + .personId(person.getId()) + .idCode(person.getIdCode()) + .sourceData("通过核查案件信息,发现该人员有近3个月,每出现一次扬言滋事、自杀等行为,接警单编号为:" + extreme.getJjdbh() + Optional.ofNullable(extreme.getBjnr()).map(it -> ",具体情况为:" + it).orElse("") + Optional.ofNullable(extreme.getCjqk()).map(it -> ",处警情况为:" + it).orElse("")) + .tag("扬言滋事、自杀等行为") + .build(); + if (extreme.getGxdwdm() != null) { + data.setDepartId(extreme.getGxdwdm()); + data.setDepartName(extreme.getGxdwmc()); + } + try { + data.setEventTime(extreme.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + } + toInsert.add(createClue2(task.getModelId(), 10, task.getId(), data)); + } + + if (!toInsert.isEmpty()) { + modelTaskClueService.saveClues(toInsert); + } + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(0); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + taskRepository.updateById(updateTask); + } + + @Override + public void syncDrug(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 47); + taskRepository.save(task); + + Map oldMap = domain.getOldMap(task.getModelId(), true); + Map idCode = new HashMap<>(); + List list = zdryRepository.getBaseMapper().selectDrugMan(); + Map personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (old, newVal) -> newVal)); + List toInsert = new ArrayList<>(); + for (Drug drug : list) { + RiskPersonal personal = personalMap.get(drug.getSfzh()); + if (personal == null) continue; + if (idCode.get(drug.getSfzh()) != null) continue; + if (oldMap.get(drug.getSfzh()) != null) continue; + + idCode.put(drug.getSfzh(), 1); + ClueData data = ClueData.builder() + .name(personal.getName()) + .id(personal.getId().toString()) + .idCode(personal.getIdCode()) + .tag("涉药人员") + .personId(personal.getId()) + .sourceData("发现该人员于" + drug.getGzdw() + "工作,属于特种工种中的涉药人员,增加风险分2分") + .build(); + toInsert.add(createClue(task.getModelId(), 2, task.getId(), data)); + } + if (!toInsert.isEmpty()) { + log.info("增加涉药人员:{}", toInsert.size()); + modelTaskClueService.saveClues(toInsert); + } + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(0); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + taskRepository.updateById(updateTask); + } + + @Override + public void syncControlNoPower(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 48); + taskRepository.save(task); + Map oldMap = domain.getOldMap(task.getModelId(), true); + Map idCode = new HashMap<>(); + List list = zdryRepository.getBaseMapper().noPower(); + + Map personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (old, newVal) -> newVal)); + List toInsert = new ArrayList<>(); + for (GBaseZDRY gBaseZDRY : list) { + RiskPersonal personal = personalMap.get(gBaseZDRY.getSfzh()); + if (personal == null) continue; + if (idCode.get(gBaseZDRY.getSfzh()) != null) continue; + if (oldMap.get(gBaseZDRY.getSfzh()) != null) continue; + idCode.put(gBaseZDRY.getSfzh(), 1); + + ClueData data = ClueData.builder() + .name(personal.getName()) + .id(personal.getId().toString()) + .idCode(personal.getIdCode()) + .tag("特定对象日常管控不到位") + .departId(gBaseZDRY.getXzdpcsdm()) + .departName(gBaseZDRY.getXzdpcs()) + .personId(personal.getId()) + .eventTime(LocalDateTime.of(2024, 10, 7, 12, 11, 23)) + .sourceData("发现该人员属于重点人员,该人员的管控民警所管控的重点人员达到100人以上\n属于未落实日常管控要求,增加风险分4分") + .build(); + toInsert.add(createClue(task.getModelId(), 4, task.getId(), data)); + } + if (!toInsert.isEmpty()) { + log.info("增加特定对象日常管控不到位人员:{}", toInsert.size()); + modelTaskClueService.saveClues(toInsert); + } + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(0); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + taskRepository.updateById(updateTask); + } + + private final GBaseJJDRepository jjdRepository; + + private final RiskTestRepository riskTestRepository; + + @Override + public void syncPointCall(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 50); + taskRepository.save(task); + // 获取接警数据 + List result = jjdRepository.getBaseMapper().selectPointCall(); + List person = getPersons(); + Map map = new HashMap<>(); + Map noUseMap = new HashMap<>(); + + for (GBaseJJD gBaseJJD : result) { + String dh = gBaseJJD.getBjrlxdh(); + if (dh == null || dh.isEmpty()) { + dh = gBaseJJD.getBjdh(); + } + if (dh == null || dh.isEmpty()) { + continue; + } + if (gBaseJJD.getJqxzdm() == null) { + continue; + } + if (gBaseJJD.getJqxzdm().startsWith("9")) { + Integer count = Optional.ofNullable(noUseMap.get(dh)).orElse(0); + count++; + noUseMap.put(dh, count); + } else { + Integer count = Optional.ofNullable(map.get(dh)).orElse(0); + count++; + map.put(dh, count); + } + } + log.info("报警:{},{}", map.size(), noUseMap.size()); + + List toInsert = new ArrayList<>(); + Map> aMAP = person.stream().collect(Collectors.groupingBy(RiskPersonal::getIdCode)); + RedisDao.getInstance().removeListAll(Default.CALL_REDIS); + List tmp = new ArrayList<>(); + for (Map.Entry> entry : aMAP.entrySet()) { + if (entry.getValue().getFirst().getMobileNumber() == null) { + continue; + } + RiskPersonal personal = entry.getValue().getFirst(); + String[] str = personal.getMobileNumber().split(","); + int num = 0; + int noUsefulNum = 0; + StringBuilder mobile = new StringBuilder(); + for (String s : str) { + if (s.contains("无") || s.equals("00000000") || s.equals("1")) { + continue; + } + mobile.append(s).append(","); + int count = Optional.ofNullable(map.get(s)).orElse(0); + num += count; + + int count2 = Optional.ofNullable(noUseMap.get(s)).orElse(0); + noUsefulNum += count2; + } + if (num > 5 || noUsefulNum > 100) { + StringBuilder mark = new StringBuilder(); + for (RiskPersonal p : entry.getValue()) { + mark.append(p.getTags()).append(","); + } + PointCall call = new PointCall(); + call.setCallCount(num); + call.setNoUsefulCallCount(noUsefulNum); + call.setLabels(mark.substring(0, mark.length() - 1)); + call.setName(personal.getName()); + call.setMobiles(mobile.substring(0, mobile.length() - 1)); + call.setIdCode(personal.getIdCode()); + call.setControlId(personal.getControlDepartId()); + call.setControlName(personal.getControlDepartName()); + + StringBuilder txt = new StringBuilder("该人员今年"); + if (num > 5) { + txt.append("有效报警").append(num).append("次 "); + } + if (noUsefulNum > 100) { + txt.append("无效报警").append(noUsefulNum).append("次 "); + } + txt.append("疑似人员管控不到位。"); + call.setDesc(txt.toString()); + RiskTest test = new RiskTest(); + test.setName(JSON.toJSONString(call)); + tmp.add(test); + ClueData data = ClueData.builder() + .name(personal.getName()) + .idCode(personal.getIdCode()) + .tag("特定对象日常管控不到位") + .departId(personal.getControlDepartId()) + .departName(call.getControlName()) + .personId(personal.getId()) + .eventTime(LocalDateTime.now()) + .sourceData(call.getDesc()) + .build(); + toInsert.add(createClue(task.getModelId(), 4, task.getId(), data)); + } + } + if (!tmp.isEmpty()) { + riskTestRepository.saveBatch(tmp); + } + + if (!toInsert.isEmpty()) { + log.info("增加特定对象日常管控不到位人员:{}", toInsert.size()); + modelTaskClueService.saveClues(toInsert); + } + + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(0); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + taskRepository.updateById(updateTask); + } + + RiskModelTaskClue createClue(Integer modelId, Integer score, Integer taskId, ClueData data) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(data.getName()); + clue.setIdCode(data.getIdCode()); + clue.setTaskId(taskId); + clue.setData(data.getSourceData()); + clue.setEventTime(data.getEventTime()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setCaseIds("point"); + data.setPersonId(null); + clue.setRiskReason(data.getTag()); + return clue; + } + + RiskModelTaskClue createClue2(Integer modelId, Integer score, Integer taskId, ClueData data) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(data.getName()); + clue.setIdCode(data.getIdCode()); + clue.setTaskId(taskId); + clue.setData(data.getSourceData()); + clue.setEventTime(data.getEventTime()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setCaseIds(BhUtil.ajBh(data.getId())); + data.setPersonId(data.getPersonId()); + clue.setRiskReason(data.getTag()); + return clue; + } + + RiskTask createTask(Integer size, Integer modelId) { + RiskTask task = new RiskTask(); + task.setModelId(modelId); + task.setStartTime(LocalDateTime.now()); + task.setState(0); + task.setScanSize(size); + return task; + } + + SupDepart findLevelThreeDepart(SupDepart supDepart, Map departMap) { + if(supDepart == null){ + return null; + } + if(supDepart.getLevel() == 3) { + return supDepart; + } + supDepart = departMap.get(supDepart.getPid()); + return findLevelThreeDepart(supDepart, departMap); + } + + private final GBaseTbDZdrylbRepository zdrylbRepository; + + private final SupExternalDepartRepository externalDepartRepository; + + List getPersons() { + List lbList = zdrylbRepository.list(new LambdaQueryWrapper() + .select(GBaseTbDZdrylb::getCode, GBaseTbDZdrylb::getDefine)); + List supDeparts = supDepartMapper.selectList(new LambdaQueryWrapper() + .select(SupDepart::getId,SupDepart::getCode, SupDepart::getLevel, SupDepart::getShortName, SupDepart::getPid) + .ge(SupDepart::getLevel, 3)); + + Map supExternalDepartMap = new WeakHashMap<>(); + List externalDeparts = new ArrayList<>(); + + Map lbMap = new WeakHashMap<>(); + Map supDepartCodeMap = new WeakHashMap<>(); + Map supDepartIdMap = new WeakHashMap<>(); + + for (SupDepart supDepart : supDeparts) { + supDepartCodeMap.put(supDepart.getCode(), supDepart); + supDepartIdMap.put(supDepart.getId(), supDepart); + } + + for (GBaseTbDZdrylb lb : lbList) { + if (lb.getCode().startsWith("0")) { + lbMap.put(Integer.valueOf(lb.getCode().replaceFirst("0", "")), lb.getDefine()); + } else { + lbMap.put(Integer.valueOf(lb.getCode()), lb.getDefine()); + } + } + + List list = zdryRepository.getBaseMapper().syncPointPeople(); + log.info("重点人员查询人数: {}", list.size()); + List personals = new ArrayList<>(); + LocalDate date = LocalDate.now(); + Map> map = new HashMap<>(); + int zdCount = 0; + int noDepartCount = 0; + for (GBaseZDRY ry : list) { + List codes = PatternUtil.takeMarkPosition(ry.getZdrylbbj()); + if (codes.isEmpty()) { + continue; + } + List sb = new ArrayList<>(); + for (Integer index : codes) { + String lbName = lbMap.get(index); + if (lbName.isEmpty()) { + continue; + } + sb.add(lbName); + } + if (sb.isEmpty()) { + continue; + } + zdCount++; + sb = sb.stream().distinct().toList(); + Map tmp = Optional.ofNullable(map.get(ry.getSfzh())).orElse(new HashMap<>()); + + SupDepart depart = supDepartCodeMap.get(ry.getGxdwjgdm()); + depart = findLevelThreeDepart(depart, supDepartIdMap); + Integer exist = supExternalDepartMap.get(ry.getGxdwjgdm()); + if(exist == null) { + SupExternalDepart externalDepart = new SupExternalDepart(); + externalDepart.setExternalId(ry.getGxdwjgdm()); + externalDepart.setExternalName(ry.getGxdw()); + externalDepart.setSource("重点人员"); + externalDeparts.add(externalDepart); + supExternalDepartMap.put(ry.getGxdwjgdm(),1); + } + if(depart == null) { + noDepartCount++; + } + for (String s : sb) { + if (tmp.get(s) != null) { + continue; + } + tmp.put(s, 1); + RiskPersonal personal = new RiskPersonal(); + personal.setTags(s); + personal.setCreateTime(LocalDateTime.now()); + personal.setIdCode(ry.getSfzh()); + personal.setName(ry.getXm()); + + personal.setControlDepartName(Optional.ofNullable(depart).map(SupDepart::getShortName).orElse(ry.getGxdw())); + personal.setControlDepartId(Optional.ofNullable(depart).map(SupDepart::getId).orElse(ry.getGxdwjgdm())); + try { + personal.setControlTime(LocalDateTime.parse(ry.getJlbgsj(), DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + } catch (Exception e) { + } + // 基本信息 + try { + personal.setAge(AgeUtil.idCard2Age(personal.getIdCode(), date)); + int gender = personal.getIdCode().length() == 18 ? Integer.valueOf(personal.getIdCode().substring(16, 17)) : Integer.valueOf(personal.getIdCode().substring(14, 15)); + // 结果0男1女 余数偶女奇男 + personal.setGender(gender % 2 == 0 ? "2" : "1"); + } catch (Exception e) { + } + if (ry.getZdrylxfs() != null) { +// personal.setMobileNumber(ry.getZdrylxfs().length() > 20 ? "" : ry.getZdrylxfs()); + personal.setMobileNumber(ry.getZdrylxfs()); + } + personals.add(personal); + } + map.put(ry.getSfzh(), tmp); + } + log.info("重点人员入库数:{} 未匹配到本地组织机构数:{}",zdCount, noDepartCount); + externalDepartRepository.saveBatch(externalDeparts); + return personals; + } + +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/PoliceServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/PoliceServiceImpl.java new file mode 100644 index 0000000..bc1a75d --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/PoliceServiceImpl.java @@ -0,0 +1,229 @@ +package com.biutag.supervisiondata.service.impl; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.pojo.constants.Default; +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseBAXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; +import com.biutag.supervisiondata.pojo.entity.mine.*; +import com.biutag.supervisiondata.pojo.enums.Dispute; +import com.biutag.supervisiondata.repository.GBaseJJDRepository; +import com.biutag.supervisiondata.repository.RiskModelTaskClueRepository; +import com.biutag.supervisiondata.repository.RiskPersonalRepository; +import com.biutag.supervisiondata.repository.RiskTaskRepository; +import com.biutag.supervisiondata.service.*; +import com.biutag.supervisiondata.util.BhUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 情感、房地产、房屋、医患、债务、土地、劳资、家庭暴力、邻里纠纷 + * @author kami on 2024-11-12 19:40:02 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class PoliceServiceImpl implements PoliceService { + + private final GBaseJJDRepository jjdRepository; + + private final RiskModelTaskClueService riskModelTaskClueService; + + private final RiskPersonalTagService tagService; + + private final RiskPersonalService riskPersonalService; + + private final RiskPersonalControlRecordService controlRecordService; + + private final RiskPersonalRepository riskPersonalRepository; + + private final RiskTaskRepository riskTaskRepository; + + private final RiskModelTaskClueRepository taskClueRepository; + + @Override + public void contradictModelTask(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 38); + riskTaskRepository.save(task); + List jjds = new ArrayList<>(); + + for (List idCard : domain.getIdCards()) { + jjds.addAll(jjdRepository.list(new LambdaQueryWrapper() + .select(GBaseJJD::getJjdbh, GBaseJJD::getBjsj, GBaseJJD::getGxdwdm, GBaseJJD::getGxdwmc, GBaseJJD::getJqxzmc, GBaseJJD::getBjrzjhm) + .in(GBaseJJD::getBjrzjhm, idCard))); + } + + List result = new ArrayList<>(); + // 过滤警情 + for (GBaseJJD jjd : jjds) { + if(jjd.getJqxzmc()==null) { + continue; + } + // 情感、房地产、房屋、医患、债务、土地、劳资、家庭暴力、邻里纠纷 + if(jjd.getJqxzmc().contains("情感") || jjd.getJqxzmc().contains("房地产") + || jjd.getJqxzmc().contains("房屋") || jjd.getJqxzmc().contains("医患") + || jjd.getJqxzmc().contains("债务") || jjd.getJqxzmc().contains("土地") + || jjd.getJqxzmc().contains("劳资") || jjd.getJqxzmc().contains("家庭暴力") + || jjd.getJqxzmc().contains("邻里纠纷")) { + result.add(jjd); + } + } + + log.info("警情:{}", result.size()); + // 旧数据 + List oldList = Optional.ofNullable(domain.getMap().get(38)).orElse(new ArrayList<>()); + List updateClueList = new ArrayList<>(); + LocalDateTime timeLimit = LocalDateTime.now().minusMonths(12); + Map> map = new HashMap<>(); + for (RiskModelTaskClue clue : oldList) { + if(clue.getEventTime().isBefore(timeLimit)) { + RiskModelTaskClue up = new RiskModelTaskClue(); + up.setId(clue.getId()); + up.setDel(1); + updateClueList.add(up); + } + List tmp = Optional.ofNullable(map.get(clue.getIdCode())).orElse(new ArrayList<>()); + tmp.add(clue); + map.put(clue.getIdCode(), tmp); + } + + Map personMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); + // ******* 数据操作 ******* + List toInsert = new ArrayList<>(); + List controlRecords = new ArrayList<>(); + List toUpdatePerson = new ArrayList<>(); + List toInsertTags = new ArrayList<>(); + // ******* 数据操作 ******* + // 开始 + for (GBaseJJD jjd : result) { + List tmp = Optional.ofNullable(map.get(jjd.getBjrzjhm())).orElse(new ArrayList<>()); + RiskPersonal person = personMap.get(jjd.getBjrzjhm()); + if(person == null) { + continue; + } + boolean insert = true; + for (RiskModelTaskClue clue : tmp) { + if(clue.getCaseIds().equals(BhUtil.jjdBh(jjd.getJjdbh()))) { + insert = false; + break; + } + } + if(insert) { + toInsert.add(createClue(task.getModelId(), 1, person, task.getId(), jjd, "通过对近12个月的警情筛查,发现该人员涉及:"+jjd.getJqxzmc()+"的警情,接警单编号为:"+jjd.getJjdbh()+",该警情属于矛盾纠纷,增加风险分1分(发生一起增加1分,最高10分)")); + RiskPersonalControlRecord tmpRecord = createControlRecord(person, jjd, toInsert.getLast().getRiskReason()); + controlRecords.add(tmpRecord); + if(person.getControlTime() == null || tmpRecord.getControlTime().isAfter(person.getControlTime())) { + RiskPersonal personToUpdate = getRiskPersonal(person, tmpRecord); + toUpdatePerson.add(personToUpdate); + toInsertTags.add(createTag(Dispute.contains(jjd.getJqxzmc()), toInsert.getLast().getEventTime(), person)); + } + } + } + if(!toInsert.isEmpty()) { + log.info("新增线索:{}",toInsert.size()); + riskModelTaskClueService.saveClues(toInsert); + } + if(!controlRecords.isEmpty()) { + log.info("新增管控记录:{}",controlRecords.size()); + controlRecordService.batchInsert(controlRecords); + } + if(!toUpdatePerson.isEmpty()) { + log.info("修改风险人员:{}",toUpdatePerson.size()); + riskPersonalRepository.updateBatchById(toUpdatePerson, 5000); + } + + if(!toInsertTags.isEmpty()) { + log.info("操作新增标签数据:{}",toInsertTags.size()); + tagService.saveBatchTag(toInsertTags, Default.BIG_TAG_TRUBO); + } + + if(!updateClueList.isEmpty()) { + taskClueRepository.updateBatchById(updateClueList, 10000); + } + + RiskTask updateTask = new RiskTask(); + updateTask.setId(task.getId()); + updateTask.setInsertSize(toInsert.size()); + updateTask.setUpdateSize(toUpdatePerson.size()); + updateTask.setState(1); + updateTask.setEndTime(LocalDateTime.now()); + riskTaskRepository.updateById(updateTask); + } + + private static RiskPersonal getRiskPersonal(RiskPersonal person, RiskPersonalControlRecord tmpRecord) { + RiskPersonal personToUpdate = new RiskPersonal(); + personToUpdate.setId(person.getId()); + personToUpdate.setControlTime(tmpRecord.getControlTime()); + personToUpdate.setControlDepartName(tmpRecord.getControlDepartName()); + personToUpdate.setControlDepartId(tmpRecord.getControlDepartId()); + if(person.getTags().indexOf(Default.BIG_TAG_TRUBO) == -1) { + personToUpdate.setTags(person.getTags().concat(",".concat(Default.BIG_TAG_TRUBO))); + } + return personToUpdate; + } + + RiskModelTaskClue createClue(Integer modelId, Integer score, RiskPersonal person, Integer taskId,GBaseJJD jjd, String data) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(person.getName()); + clue.setIdCode(person.getIdCode()); + clue.setTaskId(taskId); + clue.setRiskReason(jjd.getJqxzmc()); + clue.setData(data); + clue.setEventTime(jjd.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setCaseIds(BhUtil.jjdBh(jjd.getJjdbh())); + return clue; + } + + RiskTask createTask(Integer size, Integer modelId) { + RiskTask task = new RiskTask(); + task.setModelId(modelId); + task.setStartTime(LocalDateTime.now()); + task.setState(0); + task.setScanSize(size); + return task; + } + + RiskPersonalControlRecord createControlRecord(RiskPersonal person, GBaseJJD jjd, String tag) { + RiskPersonalControlRecord controlRecord = new RiskPersonalControlRecord(); + controlRecord.setName(person.getName()); + controlRecord.setIdCode(person.getIdCode()); + controlRecord.setCreateTime(LocalDateTime.now()); + try { + controlRecord.setControlTime(jjd.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + log.info("报警时间转换异常"); + } + controlRecord.setControlDepartId(jjd.getGxdwdm()); + controlRecord.setControlDepartName(jjd.getGxdwmc()); + controlRecord.setControlTag(tag); + controlRecord.setCaseId(BhUtil.jjdBh(jjd.getJjdbh())); + return controlRecord; + } + + RiskPersonalTag createTag(String tag, LocalDateTime eventTime, RiskPersonal personal) { + RiskPersonalTag personalTag = new RiskPersonalTag(); + personalTag.setTagTime(eventTime); + personalTag.setBigTag(Default.BIG_TAG_TRUBO); + personalTag.setSmallTag(tag); + personalTag.setIdCode(personal.getIdCode()); + personalTag.setName(personal.getName()); + personalTag.setCreateTime(LocalDateTime.now()); + return personalTag; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskModelTaskClueServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskModelTaskClueServiceImpl.java new file mode 100644 index 0000000..507f4d2 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskModelTaskClueServiceImpl.java @@ -0,0 +1,90 @@ +package com.biutag.supervisiondata.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.common.exception.BusinessException; +import com.biutag.supervisiondata.common.response.StatusCode; +import com.biutag.supervisiondata.mapper.mine.RiskModelTaskClueMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalControlRecord; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; +import com.biutag.supervisiondata.service.RiskModelTaskClueService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author kami on 2024-11-11 14:11:44 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class RiskModelTaskClueServiceImpl implements RiskModelTaskClueService { + + @Qualifier("chaosBean") + private final DataSource dataSource; + + public Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + + + @Override + public void saveClues(List list) { + List> control = IntStream.range(0, (list.size() + 9999) / 10000) + .mapToObj(i -> list.subList(i * 10000, Math.min((i + 1) * 10000, list.size()))) + .collect(Collectors.toList()); + for (List record : control) { + try { + batchInsert(record); + } catch (Exception e) { + log.error("", e); + } + } + } + + final String sql = "INSERT INTO risk_model_task_clue(model_id, name, id_code, task_id, source_id, risk_reason, data, score, event_time, create_time, update_time, case_ids) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)"; + + public void batchInsert(List alliances) { + try (Connection connection = getConnection(); + PreparedStatement prepareStatement = connection.prepareStatement(sql)) { + connection.setAutoCommit(false); + alliances.stream().forEachOrdered(it -> { + try { + prepareStatement.setObject(1, it.getModelId()); + prepareStatement.setObject(2, Optional.ofNullable(it.getName()).orElse("")); + prepareStatement.setObject(3, Optional.ofNullable(it.getIdCode()).orElse("")); + prepareStatement.setObject(4, it.getTaskId()); + prepareStatement.setObject(5, it.getSourceId()); + prepareStatement.setObject(6, Optional.ofNullable(it.getRiskReason()).orElse("")); + prepareStatement.setObject(7, Optional.ofNullable(it.getData()).orElse("")); + prepareStatement.setObject(8, Optional.ofNullable(it.getScore()).orElse(0)); + prepareStatement.setObject(9, Optional.ofNullable(it.getEventTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); + prepareStatement.setObject(10, Optional.ofNullable(it.getCreateTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); + prepareStatement.setObject(11, Optional.ofNullable(it.getUpdateTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); + prepareStatement.setObject(12, Optional.ofNullable(it.getCaseIds()).orElse("")); + prepareStatement.addBatch(); + } catch (SQLException e) { + log.error("", e); + } + }); + prepareStatement.executeBatch(); + connection.commit(); + } catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(StatusCode.BUSINESS, "数据保存失败"); + } + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalControlRecordImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalControlRecordImpl.java new file mode 100644 index 0000000..c442714 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalControlRecordImpl.java @@ -0,0 +1,67 @@ +package com.biutag.supervisiondata.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervisiondata.common.exception.BusinessException; +import com.biutag.supervisiondata.common.response.StatusCode; +import com.biutag.supervisiondata.mapper.mine.RiskPersonalControlRecordMapper; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalControlRecord; +import com.biutag.supervisiondata.service.RiskPersonalControlRecordService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Optional; + +/** + * @author kami on 2024-11-20 10:08:08 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class RiskPersonalControlRecordImpl extends ServiceImpl implements RiskPersonalControlRecordService { + + @Override + public void batchInsert(List records) { + try (Connection connection = getConnection(); + PreparedStatement prepareStatement = connection.prepareStatement(sql)) { + connection.setAutoCommit(false); + records.stream().forEachOrdered(it -> { + try { + prepareStatement.setObject(1, Optional.ofNullable(it.getName()).orElse("")); + prepareStatement.setObject(2, Optional.ofNullable(it.getIdCode()).orElse("")); + prepareStatement.setObject(3, Optional.ofNullable(it.getControlDepartId()).orElse("")); + prepareStatement.setObject(4, Optional.ofNullable(it.getControlDepartName()).orElse("")); + prepareStatement.setObject(5, Optional.ofNullable(it.getControlTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); + prepareStatement.setObject(6, Optional.ofNullable(it.getControlTag()).orElse("")); + prepareStatement.setObject(7, it.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + prepareStatement.addBatch(); + } catch (SQLException e) { + log.error("", e); + } + }); + prepareStatement.executeBatch(); + connection.commit(); + } catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(StatusCode.BUSINESS, "数据保存失败"); + } + } + + final String sql = "INSERT INTO risk_personal_control_record(name, id_code, control_depart_id, control_depart_name, control_time, control_tag, create_time) VALUES(?,?,?,?,?,?,?)"; + + @Qualifier("chaosBean") + private final DataSource dataSource; + + public Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalServiceImpl.java new file mode 100644 index 0000000..814a2b7 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalServiceImpl.java @@ -0,0 +1,267 @@ +package com.biutag.supervisiondata.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.common.exception.BusinessException; +import com.biutag.supervisiondata.common.response.StatusCode; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalControlRecord; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; +import com.biutag.supervisiondata.repository.RiskPersonalRepository; +import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.service.RiskPersonalTagService; +import com.biutag.supervisiondata.util.AgeUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author kami on 2024-11-09 16:14:25 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class RiskPersonalServiceImpl implements RiskPersonalService { + + private final RiskPersonalRepository repository; + + private final RiskPersonalTagService tagService; + + @Qualifier("chaosBean") + private final DataSource dataSource; + + + @Override + public void formatAndSave(List list, String bigTag) { + List searchOldCode = new ArrayList<>(); + list.stream().map(RiskPersonal::getIdCode).distinct().forEach(searchOldCode::add); + // 速度是割出来的 + List> olds = IntStream.range(0, (searchOldCode.size() + 9999) / 10000) + .mapToObj(i -> searchOldCode.subList(i * 10000, Math.min((i + 1) * 10000, searchOldCode.size()))) + .collect(Collectors.toList()); + + List oldPerson = new ArrayList<>(); + for (List old : olds) { + oldPerson.addAll(repository.list(new LambdaQueryWrapper() + .in(RiskPersonal::getIdCode, old))); + } + Map oldMap = oldPerson.stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); +// list.stream().filter(item -> item.getIdCode()!=null).forEach(it -> it.setIdCode(it.getIdCode().toUpperCase())); + // 暂时先去重 后面要加标签 + Map> map = list.stream().filter(item -> item.getIdCode()!=null) + .collect(Collectors.groupingBy(RiskPersonal::getIdCode)); + // 新增 + List data = new ArrayList<>(); + // 修改 + List updateData = new ArrayList<>(); + List tags = new ArrayList<>(); + + for (Map.Entry> entry : map.entrySet()) { + RiskPersonal tmp = entry.getValue().getFirst(); + for (RiskPersonal riskPersonal : entry.getValue()) { + RiskPersonalTag tag = new RiskPersonalTag(); + tag.setBigTag(bigTag); + tag.setTagTime(Optional.ofNullable(riskPersonal.getControlTime()).orElse(LocalDateTime.now())); + tag.setName(riskPersonal.getName()); + tag.setIdCode(riskPersonal.getIdCode()); + tag.setSmallTag(riskPersonal.getTags()); + tag.setCreateTime(LocalDateTime.now()); + tags.add(tag); + } + // 看看这个人老数据里面有没有 + RiskPersonal oldPersonal = oldMap.get(tmp.getIdCode()); + if(oldPersonal == null) { + // 两个数据回正 + tmp.setTags(bigTag); + tmp.setCreateTime(LocalDateTime.now()); + data.add(tmp); + continue; + } + RiskPersonal update = new RiskPersonal(); + update.setId(oldPersonal.getId()); + if(oldPersonal.getTags().indexOf(bigTag) == -1) { + update.setTags(oldPersonal.getTags().concat(",".concat(bigTag))); + updateData.add(update); + } + } + log.info("保存长度: {}", data.size()); + if(!data.isEmpty()) { + List> persons = IntStream.range(0, (data.size() + 9999) / 10000) + .mapToObj(i -> data.subList(i * 10000, Math.min((i + 1) * 10000, data.size()))) + .collect(Collectors.toList()); + for (List person : persons) { + try { + batchInsert(person); + } catch (Exception e) { + log.error("", e); + } + } + } + + if(!tags.isEmpty()) { + log.info("开始操作待操作标签:{}", tags.size()); + tagService.saveBatchTag(tags, bigTag); + } + + if(!updateData.isEmpty()) { + log.info("开始修改: {}", updateData.size()); + repository.updateBatchById(updateData, 5000); + } + } + + public Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + + final String sql = "INSERT INTO risk_personal(name, gender, age, id_code, mobile_number, control_depart_id, control_depart_name, control_time, create_time, tags, error_msg) VALUES(?,?,?,?,?,?,?,?,?,?,?)"; + + final String sql3 = "INSERT INTO risk_personal_control_record(name, id_code, control_depart_id, control_depart_name, control_time, control_tag, create_time) VALUES(?,?,?,?,?,?,?)"; + + + public void batchInsert(List alliances) { + try (Connection connection = getConnection(); + PreparedStatement prepareStatement = connection.prepareStatement(sql)) { + connection.setAutoCommit(false); + alliances.stream().forEachOrdered(it -> { + try { + prepareStatement.setObject(1, Optional.ofNullable(it.getName()).orElse("")); + prepareStatement.setObject(2, Optional.ofNullable(it.getGender()).orElse("-1")); + prepareStatement.setObject(3, Optional.ofNullable(it.getAge()).orElse(-1)); + prepareStatement.setObject(4, Optional.ofNullable(it.getIdCode()).orElse("")); + prepareStatement.setObject(5, Optional.ofNullable(it.getMobileNumber()).orElse("")); + prepareStatement.setObject(6, Optional.ofNullable(it.getControlDepartId()).orElse("")); + prepareStatement.setObject(7, Optional.ofNullable(it.getControlDepartName()).orElse("")); + prepareStatement.setObject(8, Optional.ofNullable(it.getControlTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); + prepareStatement.setObject(9, it.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + prepareStatement.setObject(10, Optional.ofNullable(it.getTags()).orElse("")); + prepareStatement.setObject(11, Optional.ofNullable(it.getErrorMsg()).orElse("")); + prepareStatement.addBatch(); + } catch (SQLException e) { + log.error("", e); + } + }); + prepareStatement.executeBatch(); + connection.commit(); + } catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(StatusCode.BUSINESS, "数据保存失败"); + } + } + + @Override + public void batchInsert3(List alliances) { + try (Connection connection = getConnection(); + PreparedStatement prepareStatement = connection.prepareStatement(sql3)) { + connection.setAutoCommit(false); + alliances.stream().forEachOrdered(it -> { + try { + prepareStatement.setObject(1, Optional.ofNullable(it.getName()).orElse("")); + prepareStatement.setObject(2, Optional.ofNullable(it.getIdCode()).orElse("")); + prepareStatement.setObject(3, Optional.ofNullable(it.getControlDepartId()).orElse("")); + prepareStatement.setObject(4, Optional.ofNullable(it.getControlDepartName()).orElse("")); + prepareStatement.setObject(5, Optional.ofNullable(it.getControlTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); + prepareStatement.setObject(6, Optional.ofNullable(it.getControlTag()).orElse("")); + prepareStatement.setObject(7, it.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + prepareStatement.addBatch(); + } catch (SQLException e) { + log.error("", e); + } + }); + prepareStatement.executeBatch(); + connection.commit(); + } catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(StatusCode.BUSINESS, "数据保存失败"); + } + } + + @Override + public void updateBatchScore(List personals) { + List> list = IntStream.range(0, (personals.size() + 9999) / 10000) + .mapToObj(i -> personals.subList(i * 10000, Math.min((i + 1) * 10000, personals.size()))) + .toList(); + log.info("开始批量修改: {}", list.size()); + int count = list.size(); + for (List riskPersonals : list) { + batchUpdateData(riskPersonals); + count--; + log.info("进度:{}", count); + } + } + + final String updateSQL = "UPDATE risk_personal SET risk_score = ? WHERE id = ?"; + + + void batchUpdateData(List personals) { + try (Connection connection = getConnection(); + PreparedStatement prepareStatement = connection.prepareStatement(updateSQL)) { + connection.setAutoCommit(false); + personals.stream().forEachOrdered(it -> { + try { + prepareStatement.setObject(1, Optional.ofNullable(it.getRickScore()).orElse(0.0)); + prepareStatement.setObject(2, it.getId()); + prepareStatement.addBatch(); + } catch (SQLException e) { + log.error("", e); + } + }); + prepareStatement.executeBatch(); + connection.commit(); + } catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(StatusCode.BUSINESS, "数据修改失败"); + } + } + + @Override + public void fixed() { + List personals = repository.list(); + List del = new ArrayList<>(); + for (RiskPersonal personal : personals) { + boolean up = false; + if(personal.getAge() == -1) { + try{ + int age = AgeUtil.idCard2Age(personal.getIdCode(), LocalDate.now()); + personal.setAge(age); + up = true; + } catch (Exception e) { + del.add(personal.getId()); + } + } + if(personal.getAge() <= 6) { + del.add(personal.getId()); + } + if(personal.getGender().equals("-1")) { + try{ + int gender = personal.getIdCode().length() == 18 ? Integer.valueOf(personal.getIdCode().substring(16, 17)) : Integer.valueOf(personal.getIdCode().substring(14, 15)); + // 结果0男1女 余数偶女奇男 + personal.setGender(gender % 2 == 0 ?"2":"1"); + up = true; + } catch (Exception e) { + del.add(personal.getId()); + } + } + if(up) { + repository.updateById(personal); + } + } + log.info("总数: {}", del.size()); + for (Integer i : del) { + repository.removeById(i); + } + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalTagServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalTagServiceImpl.java new file mode 100644 index 0000000..3de96af --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskPersonalTagServiceImpl.java @@ -0,0 +1,161 @@ +package com.biutag.supervisiondata.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.common.exception.BusinessException; +import com.biutag.supervisiondata.common.response.StatusCode; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag; +import com.biutag.supervisiondata.repository.RiskPersonalTagRepository; +import com.biutag.supervisiondata.service.RiskPersonalTagService; +import jakarta.annotation.Resource; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author kami on 2024-11-09 16:08:40 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class RiskPersonalTagServiceImpl implements RiskPersonalTagService { + + private final RiskPersonalTagRepository tagRepository; + + @Qualifier("chaosBean") + private final DataSource dataSource; + + @Override + public void saveBatchTag(List tags, String bitTag) { + Map> map = tags.stream().collect(Collectors.groupingBy(RiskPersonalTag::getIdCode)); + // 标签要插入的人员 + List idCodes = new ArrayList<>(); + for (Map.Entry> entry : map.entrySet()) { + idCodes.add(entry.getKey()); + } + List oldTags = tagRepository.list(new LambdaQueryWrapper().eq(RiskPersonalTag::getBigTag, bitTag) + .in(RiskPersonalTag::getIdCode, idCodes)); + Map> oldTagMap = oldTags.stream().collect(Collectors.groupingBy(RiskPersonalTag::getIdCode)); + + List toInsert = new ArrayList<>(); + List toUpdate = new ArrayList<>(); + // 剔重 + for (Map.Entry> entry : map.entrySet()) { + // 新增先剔重 + Map distinct = new HashMap<>(); + for (RiskPersonalTag personalTag : entry.getValue()) { + RiskPersonalTag tmp = distinct.get(personalTag.getSmallTag()); + if(tmp == null) { + distinct.put(personalTag.getSmallTag(), personalTag); + continue; + } + if(tmp.getTagTime().isBefore(personalTag.getTagTime())) { + distinct.put(personalTag.getSmallTag(), personalTag); + } + } + // 剔重后的数据 + List tmpList = distinct.values().stream().toList(); + + List olds = Optional.ofNullable(oldTagMap.get(entry.getKey())).orElse(new ArrayList<>()); + if(olds.isEmpty()) { + toInsert.addAll(entry.getValue()); + continue; + } + Map old = olds.stream().collect(Collectors.toMap(RiskPersonalTag::getSmallTag, Function.identity(), (oldValue, newValue) -> newValue)); + for (RiskPersonalTag personalTag : tmpList) { + RiskPersonalTag oldTag = old.get(personalTag.getSmallTag()); + if(oldTag == null) { + toInsert.add(personalTag); + continue; + } + if(oldTag.getTagTime().isBefore(personalTag.getTagTime())) { + RiskPersonalTag update = new RiskPersonalTag(); + update.setId(oldTag.getId()); + update.setTagTime(personalTag.getTagTime()); + toUpdate.add(update); + } + } + } + + if(!toInsert.isEmpty()) { + log.info("开始插入标签数据:{}", toInsert.size()); + List> batches = IntStream.range(0, (toInsert.size() + 9999) / 10000) + .mapToObj(i -> toInsert.subList(i * 10000, Math.min((i + 1) * 10000, toInsert.size()))) + .toList(); + for (List batch : batches) { + batchInsert(batch); + } + } + if(!toUpdate.isEmpty()) { + log.info("开始修改标签数据:{}", toUpdate.size()); + batchUpdate(toUpdate); + } + + } + + public void batchInsert(List tags) { + try (Connection connection = getConnection(); + PreparedStatement prepareStatement = connection.prepareStatement(sql)) { + connection.setAutoCommit(false); + tags.stream().forEachOrdered(it -> { + try { + prepareStatement.setObject(1, Optional.ofNullable(it.getName()).orElse("")); + prepareStatement.setObject(2, Optional.ofNullable(it.getIdCode()).orElse("")); + prepareStatement.setObject(3, Optional.ofNullable(it.getBigTag()).orElse("")); + prepareStatement.setObject(4, Optional.ofNullable(it.getSmallTag()).orElse("")); + prepareStatement.setObject(5, Optional.ofNullable(it.getTagTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); + prepareStatement.setObject(6, it.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + prepareStatement.addBatch(); + } catch (SQLException e) { + log.error("", e); + } + }); + prepareStatement.executeBatch(); + connection.commit(); + } catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(StatusCode.BUSINESS, "数据保存失败"); + } + } + + public void batchUpdate(List tags) { + try (Connection connection = getConnection(); + PreparedStatement prepareStatement = connection.prepareStatement(updateSQL)) { + connection.setAutoCommit(false); + tags.stream().forEachOrdered(it -> { + try { + prepareStatement.setObject(1, Optional.ofNullable(it.getTagTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null)); + prepareStatement.setObject(2, it.getId()); + prepareStatement.addBatch(); + } catch (SQLException e) { + log.error("", e); + } + }); + prepareStatement.executeBatch(); + connection.commit(); + } catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(StatusCode.BUSINESS, "数据修改失败"); + } + } + + public Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + + final String sql = "INSERT INTO risk_personal_tag(name, id_code, big_tag, small_tag, tag_time, create_time) VALUES(?,?,?,?,?,?)"; + + final String updateSQL = "UPDATE risk_personal_tag SET tag_time = ? WHERE id = ?"; +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskScoreRuleServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskScoreRuleServiceImpl.java new file mode 100644 index 0000000..4746c27 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskScoreRuleServiceImpl.java @@ -0,0 +1,121 @@ +package com.biutag.supervisiondata.service.impl; + +import cn.hutool.core.util.NumberUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervisiondata.pojo.entity.mine.Model; +import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue; +import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal; +import com.biutag.supervisiondata.pojo.entity.mine.RiskScoreRule; +import com.biutag.supervisiondata.repository.ModelRepository; +import com.biutag.supervisiondata.repository.RiskModelTaskClueRepository; +import com.biutag.supervisiondata.repository.RiskPersonalRepository; +import com.biutag.supervisiondata.repository.RiskScoreRuleRepository; +import com.biutag.supervisiondata.service.RiskPersonalControlRecordService; +import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.service.RiskScoreRuleService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author kami on 2024-11-18 19:38:10 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class RiskScoreRuleServiceImpl implements RiskScoreRuleService { + + private final RiskPersonalRepository personalRepository; + + private final RiskScoreRuleRepository riskScoreRuleRepository; + + private final ModelRepository modelRepository; + + private final RiskModelTaskClueRepository riskModelTaskClueRepository; + + private final RiskPersonalService riskPersonalService; + + @Override + public void runScore(List idCodes) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .select(RiskPersonal::getIdCode, RiskPersonal::getId, RiskPersonal::getRickScore); + if(idCodes != null && !idCodes.isEmpty()) { + queryWrapper.in(RiskPersonal::getIdCode, idCodes); + } + + List riskPersonals = personalRepository.list(queryWrapper); + List rules = riskScoreRuleRepository.list(new LambdaQueryWrapper<>()); + + List rulesV1 = rules.stream().filter(item -> item.getLevel() == 1).toList(); + Map> ruleMap = rules.stream().filter(item -> item.getLevel() == 2).collect(Collectors.groupingBy(RiskScoreRule::getPid)); + + List models = modelRepository.list(new LambdaQueryWrapper() + .select(Model::getId, Model::getRiskScoreRuleId)); + Map modelMap = models.stream().collect(Collectors.toMap(Model::getRiskScoreRuleId, Function.identity(), (oldValue, newValue) -> newValue)); + + List clues = riskModelTaskClueRepository.list(new LambdaQueryWrapper() + .select(RiskModelTaskClue::getIdCode, RiskModelTaskClue::getModelId, RiskModelTaskClue::getScore) + .eq(RiskModelTaskClue::getDel, 0)); + + Map>> clueMap = new HashMap<>(); + for (RiskModelTaskClue clue : clues) { + Map> tmp = Optional.ofNullable(clueMap.get(clue.getIdCode())).orElse(new HashMap<>()); + List list = Optional.ofNullable(tmp.get(clue.getModelId())).orElse(new ArrayList<>()); + list.add(clue); + tmp.put(clue.getModelId(), list); + clueMap.put(clue.getIdCode(), tmp); + } + List toUpdates = new ArrayList<>(); + int count = 0; + int size = riskPersonals.size(); + RiskPersonal update; + for (RiskPersonal person : riskPersonals) { + BigDecimal total = new BigDecimal("0.0"); + for (RiskScoreRule rule : rulesV1) { + List r = Optional.ofNullable(ruleMap.get(rule.getId())).orElse(new ArrayList<>()); + BigDecimal score = new BigDecimal("0.00"); + for (RiskScoreRule riskScoreRule : r) { + Model model = modelMap.get(riskScoreRule.getId()); + if(model == null) { + continue; + } + Map> tmp = clueMap.get(person.getIdCode()); + if(tmp == null) { + continue; + } + List temp = tmp.get(model.getId()); + if(temp == null) { + continue; + } + Integer ruleScore = temp.stream().mapToInt(RiskModelTaskClue::getScore).sum(); + BigDecimal n2 = new BigDecimal(Double.toString(Math.min(ruleScore.doubleValue(), riskScoreRule.getScore()))); + score=score.add(n2); + } + BigDecimal ruleScore = new BigDecimal(Double.toString(rule.getScore())); + BigDecimal weight = new BigDecimal(Integer.toString(rule.getWeight())); + score = score.multiply(weight).divide(ruleScore, 2, RoundingMode.UP); + total = total.add(score); + } + if(person.getRickScore().compareTo(total.doubleValue()) != 0) { + update = new RiskPersonal(); + update.setId(person.getId()); + update.setRickScore(total.doubleValue()); + toUpdates.add(update); + } + count++; + if(count%1000 == 0) { + log.info("已完成打分: {},共计:{}", count,size); + } + } + riskPersonalService.updateBatchScore(toUpdates); + } +} diff --git a/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java b/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java new file mode 100644 index 0000000..7f4cc56 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/service/impl/RiskTaskServiceImpl.java @@ -0,0 +1,887 @@ +package com.biutag.supervisiondata.service.impl; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; +import com.biutag.supervisiondata.pojo.ClueData; +import com.biutag.supervisiondata.pojo.ClueInfo; +import com.biutag.supervisiondata.pojo.constants.Default; +import com.biutag.supervisiondata.pojo.domain.FightMan; +import com.biutag.supervisiondata.pojo.domain.TaskParamDomain; +import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD; +import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX; +import com.biutag.supervisiondata.pojo.entity.mine.*; +import com.biutag.supervisiondata.pojo.enums.Charge; +import com.biutag.supervisiondata.pojo.enums.Edu; +import com.biutag.supervisiondata.repository.*; +import com.biutag.supervisiondata.service.RiskModelTaskClueService; +import com.biutag.supervisiondata.service.RiskPersonalControlRecordService; +import com.biutag.supervisiondata.service.RiskPersonalService; +import com.biutag.supervisiondata.service.RiskTaskService; +import com.biutag.supervisiondata.util.AgeUtil; +import com.biutag.supervisiondata.util.BhUtil; +import com.biutag.supervisiondata.util.PatternUtil; +import com.biutag.supervisiondata.util.TxtUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author kami on 2024-11-11 14:14:39 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@Service +@AllArgsConstructor +public class RiskTaskServiceImpl implements RiskTaskService { + + private final RiskTaskRepository riskTaskRepository; + + private final GBaseJJDRepository jjdRepository; + + private final GBaseSYRKXXRepository syrkxxRepository; + + private final GBaseWFRXXRepository wfrxxRepository; + + private final GBaseAJJBXXRepository ajjbxxRepository; + + private final RiskPersonalRepository riskPersonalRepository; + + private final RiskPersonalControlRecordService controlRecordRepository; + + private final RiskModelTaskClueRepository clueRepository; + + private final RiskModelTaskClueService riskModelTaskClueService; + + private final RiskPersonalService riskPersonalService; + + private final RiskPersonalControlRecordService controlRecordService; + + @Override + public void infoModelTask(TaskParamDomain domain) { + RiskTask ageTask = createTask(domain.getPersons().size(), 33); + RiskTask genderTask = createTask(domain.getPersons().size(), 32); + riskTaskRepository.save(ageTask); + riskTaskRepository.save(genderTask); + + ClueInfo[] infos = new ClueInfo[2]; + CompletableFuture.allOf( + CompletableFutureUtil.runSyncObject(() -> infos[0] = ageModel(domain, ageTask)), + CompletableFutureUtil.runSyncObject(() -> infos[1] = genderModel(domain, genderTask)) + ).join(); + + RiskTask ageUpdate = new RiskTask(); + ageUpdate.setId(ageTask.getId()); + int size = 0; + if (!infos[0].getToHidden().isEmpty()) { + size = infos[0].getToHidden().size(); + } + ageUpdate.setUpdateSize(size); + if (!infos[0].getToInsert().isEmpty()) { + size = infos[0].getToInsert().size(); + } + ageUpdate.setInsertSize(size); + ageUpdate.setState(1); + ageUpdate.setEndTime(LocalDateTime.now()); + riskTaskRepository.updateById(ageUpdate); + + RiskTask genderUpdate = new RiskTask(); + genderUpdate.setId(genderTask.getId()); + genderUpdate.setUpdateSize(0); + if (!infos[1].getToInsert().isEmpty()) { + size = infos[1].getToInsert().size(); + } + genderUpdate.setInsertSize(size); + genderUpdate.setState(1); + genderUpdate.setEndTime(LocalDateTime.now()); + List clues = new ArrayList<>(); + clues.addAll(infos[0].getToInsert()); + clues.addAll(infos[1].getToInsert()); + riskModelTaskClueService.saveClues(clues); + if(!infos[0].getToHidden().isEmpty()) { + clueRepository.updateBatchById(infos[0].getToHidden()); + } + riskTaskRepository.updateById(ageUpdate); + } + + @Override + public void eduModelTask(TaskParamDomain domain) { + RiskTask eduTask = createTask(domain.getPersons().size(), 34); + riskTaskRepository.save(eduTask); + + List xxList = new ArrayList<>(); + int count = 0; + log.info("开始查学历 | {}", domain.getIdCards().size()); + for (List idCard : domain.getIdCards()) { + count++; + xxList.addAll(syrkxxRepository.list(new LambdaQueryWrapper() + .select(GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXlmc) + .in(GBaseSYRKXX::getGmsfhm, idCard))); + log.info("学历进度 | {}", count); + } + // 日常转map + Map xxMap = xxList.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue)); + // 旧数据 + Map oldMap = domain.getOldMap(34, true); + + List toUpdate = new ArrayList<>(); + List toInsert = new ArrayList<>(); + log.info("开始遍历学历"); + for (RiskPersonal person : domain.getPersons()) { + if (xxMap.get(person.getIdCode()) == null) { + continue; + } + GBaseSYRKXX xx = xxMap.get(person.getIdCode()); + if (xx.getXlmc() == null) { + continue; + } + String edu = switch (xx.getXlmc()) { + case "小学教育", "文盲", "小学毕业", "小学肄业" -> "小学及以下"; + case "初中毕业", "初级中等教育", "初中肄业", "普通高中结业", "普通高级中学教育", "普通高中毕业", "普通高中肄业" -> + "初中/高中"; + case "中等专科结业", "中等专科教育", "大学专科毕业", "技工学校肄业", "大学专科结业", "中等专业毕业" -> + "中专/大专"; + default -> null; + }; + if (edu == null) { + continue; + } + RiskModelTaskClue old = oldMap.get(person.getIdCode()); + if (old != null && old.getRiskReason().equals(edu)) { + continue; + } + Integer score = Edu.contains(edu); + if (old == null) { + //创建新的 + toInsert.add(createClue(eduTask.getModelId(), score, eduTask.getId(), ClueData.builder() + .name(person.getName()) + .idCode(person.getIdCode()) + .tag(edu) + .sourceData("该人员的学历为"+xx.getXlmc()+",属于"+edu+",增加风险分"+score+"分") + .eventTime(LocalDateTime.now()) + .personId(person.getId()) + .build(), "edu"+person.getId().toString())); + continue; + } + RiskModelTaskClue tmp = new RiskModelTaskClue(); + tmp.setId(old.getId()); + tmp.setRiskReason(edu); + tmp.setData("该人员的学历为"+xx.getXlmc()+",属于"+edu+",增加风险分"+score+"分"); + tmp.setScore(Edu.contains(edu)); + toUpdate.add(tmp); + } + RiskTask eduUpdate = new RiskTask(); + eduUpdate.setId(eduTask.getId()); + int size = 0; + if (!toInsert.isEmpty()) { + size = toInsert.size(); + riskModelTaskClueService.saveClues(toInsert); + log.info("批量新增学历完成"); + } + eduUpdate.setInsertSize(size); + if (!toUpdate.isEmpty()) { + clueRepository.updateBatchById(toUpdate, 10000); + size = toUpdate.size(); + log.info("批量修改学历完成"); + } + eduUpdate.setState(1); + eduUpdate.setUpdateSize(size); + eduUpdate.setEndTime(LocalDateTime.now()); + riskTaskRepository.updateById(eduUpdate); + } + + @Override + public void caseModelTask(TaskParamDomain domain) { + RiskTask caseTask = createTask(domain.getPersons().size(), 35); + riskTaskRepository.save(caseTask); + // 1 - 违法信息 + List wfxxList = new ArrayList<>(); + for (List idCard : domain.getIdCards()) { + wfxxList.addAll(wfrxxRepository.list(new LambdaQueryWrapper() + .select(GBaseWFRXX::getAjbh, GBaseWFRXX::getZjhm, GBaseWFRXX::getSxzm) + .in(GBaseWFRXX::getZjhm, idCard))); + } + log.info("违法数量: {}", wfxxList.size()); + + // 1 - 信息转map 2 - 案件编号list + Map> xxMap = new HashMap<>(); + List ajIdList = new ArrayList<>(); + for (GBaseWFRXX gBaseWFRXX : wfxxList) { + if (gBaseWFRXX.getSxzm() == null) { + continue; + } + String charge = chargeContain(gBaseWFRXX.getSxzm()); + if (charge == null) { + continue; + } + ajIdList.add(gBaseWFRXX.getAjbh()); + List tmp = Optional.ofNullable(xxMap.get(gBaseWFRXX.getZjhm())).orElse(new ArrayList<>()); + tmp.add(gBaseWFRXX); + xxMap.put(gBaseWFRXX.getZjhm(), tmp); + } + // 切割 每次查10000条 + List> ajs = IntStream.range(0, (ajIdList.size() + 9999) / 10000) + .mapToObj(i -> ajIdList.subList(i * 10000, Math.min((i + 1) * 10000, ajIdList.size()))) + .toList(); + + List xxList = new ArrayList<>(); + // 查案件基本信息 + for (List aj : ajs) { + xxList.addAll(ajjbxxRepository.list(new LambdaQueryWrapper() + .select(GBaseAJJBXX::getAjbh, GBaseAJJBXX::getBadwidmc, GBaseAJJBXX::getBadwiddm, GBaseAJJBXX::getBarq) + .in(GBaseAJJBXX::getAjbh, aj))); + } + // 案件转map方便提取 + Map ajxxMap = xxList.stream().collect(Collectors.toMap(GBaseAJJBXX::getAjbh, Function.identity(), (oldValue, newValue) -> newValue)); + + // 管控部门记录 + List controlRecords = new ArrayList<>(); + for (List idCard : domain.getIdCards()) { + controlRecords.addAll(controlRecordRepository.list(new LambdaQueryWrapper() + .in(RiskPersonalControlRecord::getIdCode, idCard))); + } + // 转map + Map> controlMap = Optional.of(controlRecords).filter(it -> !it.isEmpty()) + .map(it -> it.stream().collect(Collectors.groupingBy(RiskPersonalControlRecord::getIdCode))) + .orElse(new HashMap<>()); + + Map oldMap = domain.getOldMap(35, true); + // ************** 要动的表 ************** + List toInsertControl = new ArrayList<>(); + List toUpdatePerson = new ArrayList<>(); + List toInsertClue = new ArrayList<>(); + List toUpdateClue = new ArrayList<>(); + // ************** ************** + Map bHMap; + for (RiskPersonal person : domain.getPersons()) { + List tmp = xxMap.get(person.getIdCode()); + // 案件编号 + StringBuilder caseNo = new StringBuilder(); + // 原因 + StringBuilder reason = new StringBuilder(); + List controls = controlMap.get(person.getIdCode()); + if (controls == null || controls.isEmpty()) { + bHMap = new HashMap<>(); + controls = new ArrayList<>(); + } else { + bHMap = controls.stream().collect(Collectors.toMap(RiskPersonalControlRecord::getCaseId, Function.identity(), (oldValue, newValue) -> newValue)); + } + List tmpRecords = new ArrayList<>(); + // 如果没有违法 + if (tmp == null || tmp.isEmpty()) { + continue; + } + for (GBaseWFRXX gBaseWFRXX : tmp) { + if (gBaseWFRXX.getSxzm() == null) { + continue; + } + caseNo.append(gBaseWFRXX.getAjbh()).append(","); + reason.append(chargeContain(gBaseWFRXX.getSxzm())).append(","); + RiskPersonalControlRecord record = bHMap.get(BhUtil.ajBh(gBaseWFRXX.getAjbh())); + if (record == null) { + //如果没有管控记录 新建 + GBaseAJJBXX ajxx = ajxxMap.get(gBaseWFRXX.getAjbh()); + if (ajxx == null) { + continue; + } + RiskPersonalControlRecord controlRecord = createControlRecord(person, ajxx, gBaseWFRXX); + toInsertControl.add(controlRecord); + tmpRecords.add(controlRecord); + } + } + controls.addAll(tmpRecords); + RiskPersonalControlRecord last = null; + for (RiskPersonalControlRecord riskPersonalControlRecord : controls) { + if (riskPersonalControlRecord == null) { + continue; + } + if (last == null) { + last = riskPersonalControlRecord; + continue; + } + if (riskPersonalControlRecord.getControlTime().isAfter(last.getControlTime())) { + last = riskPersonalControlRecord; + } + } + if (last != null && last.getId() == null) { + // 说明不是老数据 修改风险人员管控 + RiskPersonal p = new RiskPersonal(); + p.setId(person.getId()); + p.setControlDepartName(last.getControlDepartName()); + p.setControlDepartId(last.getControlDepartId()); + p.setControlTime(last.getControlTime()); + toUpdatePerson.add(p); + } + // 记录中的案件编号 + RiskModelTaskClue old = oldMap.get(person.getIdCode()); + String caseIds = Optional.ofNullable(old).map(RiskModelTaskClue::getCaseIds).orElse(""); + String[] oldCase = caseIds.split(","); + if (oldCase.length == caseNo.toString().split(",").length - 1) { + // 涉及案件和老的长度一致,说明没有新增事件 + continue; + } + if (old != null) { + // 将旧的作废 + RiskModelTaskClue updateClue = new RiskModelTaskClue(); + updateClue.setId(old.getId()); + updateClue.setDel(1); + toUpdateClue.add(updateClue); + continue; + } + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(caseTask.getModelId()); + clue.setScore(5); + clue.setName(person.getName()); + clue.setIdCode(person.getIdCode()); + clue.setTaskId(caseTask.getId()); + StringBuilder data = new StringBuilder(); + if (!reason.isEmpty()) { + clue.setRiskReason(reason.substring(0, reason.length() - 1)); + data.append("发现该人员涉嫌以下罪名:"+clue.getRiskReason()); + } + if (!caseNo.isEmpty()) { + clue.setCaseIds(caseNo.substring(0, caseNo.length() - 1)); + data.append(",相关案件编号为:").append(clue.getCaseIds()); + } + if(!data.isEmpty()) { + data.append(",属于涉严重暴力犯罪前科人员,增加风险分5分"); + } + if (last != null && last.getControlTime() != null) { + clue.setEventTime(last.getControlTime()); + } + clue.setData(data.toString()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + toInsertClue.add(clue); + } + RiskTask caseUpdate = new RiskTask(); + caseUpdate.setId(caseTask.getId()); + if (!toInsertClue.isEmpty()) { + riskModelTaskClueService.saveClues(toInsertClue); + } + if (!toUpdateClue.isEmpty()) { + clueRepository.updateBatchById(toUpdateClue); + } + if (!toUpdatePerson.isEmpty()) { + riskPersonalRepository.updateBatchById(toUpdatePerson); + } + controlRecordService.batchInsert(toInsertControl); + caseUpdate.setState(1); + caseUpdate.setInsertSize(toInsertClue.size()); + caseUpdate.setUpdateSize(toUpdateClue.size()); + caseUpdate.setEndTime(LocalDateTime.now()); + riskTaskRepository.updateById(caseUpdate); + } + + @Override + public void behavior(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 20); + riskTaskRepository.save(task); + + LocalDateTime end = LocalDateTime.now(); + LocalDateTime start = end.minusMonths(3); + // 获取接警数据 + List result = jjdRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), + end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + log.info("总条数 | {}条", result.size()); + + List jjdList = new ArrayList<>(); + for (GBaseJJD jjd : result) { + if (jjd.getJqxzmc().contains("扬言实施放火") || jjd.getJqxzmc().contains("扬言爆炸") + || jjd.getJqxzmc().contains("扬言放火") || jjd.getJqxzmc().contains("扬言投放危险物品") + || jjd.getJqxzmc().contains("扬言杀人") || jjd.getJqxzmc().contains("扬言冲撞") + || jjd.getJqxzmc().contains("扬言伤人") || jjd.getJqxzmc().contains("其他扬言极端") + || jjd.getJqxzmc().contains("自杀")) { + jjdList.add(jjd); + } + } + Map idNumberMap = new HashMap<>(); + Map mobileMap = new HashMap<>(); + for (RiskPersonal person : domain.getPersons()) { + idNumberMap.put(person.getIdCode(), person); + if (person.getMobileNumber() != null && !person.getMobileNumber().isEmpty()) { + mobileMap.put(person.getMobileNumber(), person); + } + } + List clueData = new ArrayList<>(); + for (GBaseJJD gBaseJJD : jjdList) { + RiskPersonal person = null; + if (gBaseJJD.getBjrzjhm() != null) { + person = idNumberMap.get(gBaseJJD.getBjrzjhm()); + } + if (person == null && gBaseJJD.getBjrlxdh() != null) { + person = mobileMap.get(gBaseJJD.getBjrlxdh()); + } + if (person == null) { + String idCards = PatternUtil.takeIdCard(gBaseJJD.getCjqk()); + if (idCards == null) { + continue; + } + String[] cardArr = idCards.split(","); + for (String s : cardArr) { + person = idNumberMap.get(s); + if (person != null) { + clueData.add(ClueData.builder() + .id(gBaseJJD.getJjdbh()) + .name(person.getName()) + .idCode(person.getIdCode()) + .tag(JSONObject.of("jqxzmc", gBaseJJD.getJqxzmc(), "cjqk", gBaseJJD.getCjqk()).toJSONString()) + .departName(gBaseJJD.getGxdwmc()) + .departId(gBaseJJD.getGxdwdm()) + .personId(person.getId()) + .eventTime(gBaseJJD.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()) + .build()); + } + } + continue; + } + ClueData data = ClueData.builder() + .id(gBaseJJD.getJjdbh()) + .name(person.getName()) + .idCode(person.getIdCode()) + .tag(JSONObject.of("jqxzmc", gBaseJJD.getJqxzmc(), "cjqk", gBaseJJD.getCjqk()).toJSONString()) + .departName(gBaseJJD.getGxdwmc()) + .departId(gBaseJJD.getGxdwdm()) + .personId(person.getId()) + .build(); + try { + data.setEventTime(gBaseJJD.getBjsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + log.error("报案日期转LocalDateTime异常"); + } + clueData.add(data); + } + List toInsert = new ArrayList<>(); + Map> toInsertMap = new HashMap<>(); + + List oldList = Optional.ofNullable(domain.getMap().get(20)).orElse(new ArrayList<>()); + Map> oldMap = oldList.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode)); + for (ClueData clueDatum : clueData) { + List tmpList = oldMap.get(clueDatum.getIdCode()); + if (tmpList == null || tmpList.isEmpty()) { + toInsert.add(createClue(task.getId(), 10, task.getId(), clueDatum, BhUtil.jjdBh(clueDatum.getId()))); + List tmp = Optional.ofNullable(toInsertMap.get(clueDatum.getIdCode())).orElse(new ArrayList<>()); + tmp.add(createControlRecord(clueDatum)); + toInsertMap.put(clueDatum.getIdCode(), tmp); + continue; + } + boolean exist = false; + for (RiskModelTaskClue clue : tmpList) { + if (clue.getCaseIds().equals(BhUtil.jjdBh(clueDatum.getId()))) { + exist = true; + break; + } + } + if (!exist) { + toInsert.add(createClue(task.getId(), 10, task.getId(), clueDatum, BhUtil.jjdBh(clueDatum.getId()))); + List tmp = Optional.ofNullable(toInsertMap.get(clueDatum.getIdCode())).orElse(new ArrayList<>()); + tmp.add(createControlRecord(clueDatum)); + toInsertMap.put(clueDatum.getIdCode(), tmp); + } + } + StringBuilder sb = new StringBuilder(); + for (RiskModelTaskClue clue : toInsert) { + sb.append(JSON.toJSONString(clue)).append("\n"); + } + TxtUtil.write(sb.toString(), "/work/test.txt"); + } + + @Override + public void riskAreaModelTask(TaskParamDomain domain) { + RiskTask task = createTask(domain.getPersons().size(), 41); + riskTaskRepository.save(task); + List> idCards = new ArrayList<>(); + // 旧的clue + List oldClueList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>()); + Map map = oldClueList.stream().collect(Collectors.toMap(RiskModelTaskClue::getIdCode, RiskModelTaskClue::getIdCode, (oldValue, newValue) -> newValue)); + Map personMap = new HashMap<>(); + // 将旧clue的人剔除出去,一个人的出生地一般不会变 + for (RiskPersonal person : domain.getPersons()) { + if(map.get(person.getIdCode()) != null) { + continue; + } + if(idCards.isEmpty() || idCards.getLast().size() >= 10000) { + idCards.add(new ArrayList<>()); + } + idCards.getLast().add(person.getIdCode()); + personMap.put(person.getIdCode(), person); + } + if(idCards.isEmpty()) { + RiskTask endTask = endTask(task.getId()); + endTask.setInsertSize(0); + endTask.setUpdateSize(0); + endTask.setErrMsg("没有新增数据"); + return; + } + + List xxList = new ArrayList<>(); + List area = List.of("431122", "431322", "433127", "431382", "430525", "430722"); + int count = idCards.size(); + for (List idCard : idCards) { + count--; + xxList.addAll(syrkxxRepository.list(new LambdaQueryWrapper() + .select(GBaseSYRKXX::getXm, GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getCsdxzqhdm, GBaseSYRKXX::getCsdxzqhmc) + .in(GBaseSYRKXX::getCsdxzqhdm, area) + .in(GBaseSYRKXX::getGmsfhm, idCard))); + log.info("地区进度 | {}", count); + } + + if(xxList.isEmpty()) { + RiskTask endTask = endTask(task.getId()); + endTask.setInsertSize(0); + endTask.setUpdateSize(0); + endTask.setErrMsg("没有新增数据"); + return; + } + + List toInsert = new ArrayList<>(); + // 新增 + for (GBaseSYRKXX gBaseSYRKXX : xxList) { + RiskPersonal person = personMap.get(gBaseSYRKXX.getGmsfhm()); + toInsert.add(createClue(task.getModelId(), 2, task.getId(), ClueData.builder() + .id(BhUtil.sfBh(person.getId().toString())) + .name(person.getName()) + .idCode(person.getIdCode()) + .personId(person.getId()) + .eventTime(LocalDateTime.now()) + .sourceData("发现该人员在"+gBaseSYRKXX.getCsdxzqhmc()+"成长,该地区暴力警情情况较多,增加风险分2分") + .tag(Default.FIGHT_BORN) + .build(), "area___"+person.getId().toString())); + } + if(!toInsert.isEmpty()) { + log.info("开始操作新增项:{}", toInsert.size()); + riskModelTaskClueService.saveClues(toInsert); + } + RiskTask endTask = endTask(task.getId()); + endTask.setInsertSize(toInsert.size()); + endTask.setUpdateSize(0); + riskTaskRepository.updateById(endTask); + } + + @Override + public void heightFight(TaskParamDomain domain) { + // 战斗过的用户 + List xxList = syrkxxRepository.getBaseMapper().selectHeightFight("2024-01-01 00:00:00"); + log.info("用户数 : {}", xxList.size()); + Map syrkxxMap = xxList.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue)); + + RiskTask task = createTask(xxList.size(), 42); + riskTaskRepository.save(task); + + List idCodes = xxList.stream().map(GBaseSYRKXX::getGmsfhm).distinct().toList(); + log.info("查询用户数 : {}", idCodes.size()); + + List fightMans = syrkxxRepository.getBaseMapper().selectListByIdCode(idCodes); + log.info("fightman : {}", fightMans.size()); + + Map personalMap = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (oldValue, newValue) -> newValue)); + + Map oldMap = domain.getOldMap(task.getModelId(), true); + + List toUpdates = new ArrayList<>(); + List toInsert = new ArrayList<>(); + List toInsertPeople = new ArrayList<>(); + + Map fightManMap = new HashMap<>(); + List manList = new ArrayList<>(); + int count = 0; + for (FightMan fightMan : fightMans) { + if(fightMan.getFightCount() < 5) { + continue; + } + count++; + RiskModelTaskClue old = oldMap.get(fightMan.getGmsfhm()); + if(old != null) { + RiskModelTaskClue update = new RiskModelTaskClue(); + update.setId(old.getId()); + update.setData("该人员在近期发生"+fightMan.getFightCount()+"起矛盾纠纷,属于高频次矛盾纠纷发生人员,增加风险分3分"); + toUpdates.add(update); + continue; + } + // 看看人员信息是否存在,决定需要增加人员不 + RiskPersonal person = personalMap.get(fightMan.getGmsfhm()); + if(person == null) { + fightManMap.put(fightMan.getGmsfhm(), fightMan); + manList.add(fightMan.getGmsfhm()); + continue; + } + RiskModelTaskClue clue = createClue(task.getModelId(),3, person,task.getId(), Default.FIGHT_MUCH, "该人员在近期发生"+fightMan.getFightCount()+"起矛盾纠纷,属于高频次矛盾纠纷发生人员,增加风险分3分"); + toInsert.add(clue); + person.setId(null); + person.setTags(Default.FIGHT_MUCH); + toInsertPeople.add(person); + } + log.info("大于等于5的个数 : {}", count); + + + List list = syrkxxRepository.list(new LambdaQueryWrapper() + .select(GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getLxdh, GBaseSYRKXX::getSspcsmc, GBaseSYRKXX::getSspcsdm) + .in(GBaseSYRKXX::getGmsfhm, manList)); + + Map map = list.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue)); + for (Map.Entry s : fightManMap.entrySet()) { + GBaseSYRKXX xx = map.get(s.getKey()); + if(xx == null) { + xx = syrkxxMap.get(s.getKey()); + } + if(xx == null) { + continue; + } + RiskPersonal personal = createPerson(xx, Default.FIGHT_MUCH); + toInsertPeople.add(personal); + + RiskModelTaskClue clue = createClue(task.getModelId(),3, personal,task.getId(), Default.FIGHT_MUCH, "该人员在近期发生"+s.getValue().getFightCount()+"起矛盾纠纷,属于高频次矛盾纠纷发生人员,增加风险分3分"); + toInsert.add(clue); + } + + if(!toInsertPeople.isEmpty()) { + log.info("新增人员 | {}", toInsertPeople.size()); + riskPersonalService.formatAndSave(toInsertPeople, Default.FIGHT_MUCH); + } + + if(!toUpdates.isEmpty()) { + log.info("修改线索 | {}", toUpdates.size()); + clueRepository.updateBatchById(toUpdates); + } + if(!toInsert.isEmpty()) { + log.info("新增线索 | {}", toInsert.size()); + riskModelTaskClueService.saveClues(toInsert); + } + + RiskTask endTask = endTask(task.getId()); + endTask.setInsertSize(toInsert.size()); + endTask.setUpdateSize(toUpdates.size()); + endTask.setUpdateSize(0); + riskTaskRepository.updateById(endTask); + } + + /** + * 年龄模型 + * + * @param domain 参数 + * @param task 任务 + * @return 筛选出来的用户 + */ + ClueInfo ageModel(TaskParamDomain domain, RiskTask task) { + List taskClue = new ArrayList<>(); + List toHidden = new ArrayList<>(); + Map oldMap = domain.getOldMap(task.getModelId(), true); + LocalDate now = LocalDate.now(); + for (RiskPersonal person : domain.getPersons()) { + if (person.getIdCode() == null) { + continue; + } + RiskModelTaskClue old = oldMap.get(person.getIdCode()); + Integer age = AgeUtil.idCard2Age(person.getIdCode(), now); + if (age == null) { + continue; + } + // 符合条件但是又没有旧数据 | 新增 + if (age >= 16 && age <= 34) { + RiskModelTaskClue clue = createClue(33, 1, person, task.getId(), "年龄处于16岁至34岁之间", "该人员年龄为"+age+",属于16岁至34岁之间,增加风险分1分"); + taskClue.add(clue); + if (old != null) { + RiskModelTaskClue hidden = new RiskModelTaskClue(); + hidden.setId(old.getId()); + hidden.setDel(0); + toHidden.add(hidden); + } + continue; + } + if (age >= 35 && age <= 55) { + RiskModelTaskClue clue = createClue(33, 2, person, task.getId(), "年龄处于35岁至55岁之间", "该人员年龄为"+age+",属于35岁至55岁之间,增加风险分2分"); + taskClue.add(clue); + if (old != null) { + RiskModelTaskClue hidden = new RiskModelTaskClue(); + hidden.setId(old.getId()); + hidden.setDel(0); + toHidden.add(hidden); + } + } +// if (age >= 75) { +// RiskModelTaskClue clue = createClue(33, -1, person, task.getId(), "年龄处于75岁以上"); +// taskClue.add(clue); +// if (old != null) { +// RiskModelTaskClue hidden = new RiskModelTaskClue(); +// hidden.setId(old.getId()); +// hidden.setDel(0); +// toHidden.add(hidden); +// } +// } + } + return ClueInfo.builder() + .toHidden(toHidden) + .toInsert(taskClue) + .build(); + } + + /** + * 性别模型 + * + * @param domain 参数 + * @param task 任务 + * @return 筛选出来的用户 + */ + ClueInfo genderModel(TaskParamDomain domain, RiskTask task) { + List taskClue = new ArrayList<>(); + Map oldMap = domain.getOldMap(task.getModelId(), true); + + for (RiskPersonal person : domain.getPersons()) { + if (person.getGender() == null) { + continue; + } + if (!person.getGender().equals("1")) { + continue; + } + if (oldMap.get(person.getIdCode()) != null) { + continue; + } + RiskModelTaskClue clue = createClue(32, 1, person, task.getId(), "性别为男性", "该人员性别为男性,增加风险分1分"); + taskClue.add(clue); + } + return ClueInfo.builder().toInsert(taskClue).build(); + } + + RiskModelTaskClue createClue(Integer modelId, Integer score, RiskPersonal person, Integer taskId, String reason, String data) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(person.getName()); + clue.setIdCode(person.getIdCode()); + clue.setTaskId(taskId); + clue.setRiskReason(reason); + clue.setData(data); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setEventTime(LocalDateTime.now()); + return clue; + } + + RiskModelTaskClue createClue(Integer modelId, Integer score, Integer taskId, ClueData data, String caseId) { + RiskModelTaskClue clue = new RiskModelTaskClue(); + clue.setModelId(modelId); + clue.setScore(score); + clue.setName(data.getName()); + clue.setIdCode(data.getIdCode()); + clue.setTaskId(taskId); + clue.setData(data.getSourceData()); + clue.setEventTime(data.getEventTime()); + clue.setCreateTime(LocalDateTime.now()); + clue.setUpdateTime(LocalDateTime.now()); + clue.setCaseIds(caseId); + data.setPersonId(null); + clue.setRiskReason(data.getTag()); + return clue; + } + + RiskTask createTask(Integer size, Integer modelId) { + RiskTask task = new RiskTask(); + task.setModelId(modelId); + task.setStartTime(LocalDateTime.now()); + task.setState(0); + task.setScanSize(size); + return task; + } + + RiskTask endTask(Integer id) { + RiskTask task = new RiskTask(); + task.setId(id); + task.setEndTime(LocalDateTime.now()); + task.setState(1); + return task; + } + + + RiskPersonalControlRecord createControlRecord(ClueData data) { + RiskPersonalControlRecord controlRecord = new RiskPersonalControlRecord(); + controlRecord.setName(data.getName()); + controlRecord.setIdCode(data.getIdCode()); + controlRecord.setCreateTime(LocalDateTime.now()); + controlRecord.setControlTime(data.getEventTime()); + controlRecord.setControlDepartId(data.getDepartId()); + controlRecord.setControlDepartName(data.getDepartName()); + controlRecord.setControlTag(data.getTag()); + controlRecord.setCaseId(BhUtil.ajBh(data.getId())); + return controlRecord; + } + + RiskPersonalControlRecord createControlRecord(RiskPersonal person, GBaseAJJBXX ajxx, GBaseWFRXX gBaseWFRXX) { + RiskPersonalControlRecord controlRecord = new RiskPersonalControlRecord(); + controlRecord.setName(person.getName()); + controlRecord.setIdCode(person.getIdCode()); + controlRecord.setCreateTime(LocalDateTime.now()); + try { + controlRecord.setControlTime(ajxx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } catch (Exception e) { + log.info("报案日期转化异常"); + } + controlRecord.setControlDepartId(ajxx.getBadwiddm()); + controlRecord.setControlDepartName(ajxx.getBadwidmc()); + controlRecord.setControlTag(gBaseWFRXX.getSxzm()); + controlRecord.setCaseId("aj___" + gBaseWFRXX.getAjbh()); + return controlRecord; + } + + /** + * 判断罪名 + * + * @param charge 罪名 + * @return 罪名 + */ + String chargeContain(String charge) { + String res = Charge.contains(charge); + if (res != null) { + return res; + } + if (charge.contains("故意伤害") && (charge.contains("重伤") || + charge.contains("死亡"))) { + return "涉故意伤害致人重伤或死亡"; + } + return null; + } + + RiskPersonal createPerson(GBaseSYRKXX xx, String tag) { + RiskPersonal person = new RiskPersonal(); + person.setName(xx.getXm()); + person.setMobileNumber(xx.getLxdh()); + person.setIdCode(xx.getGmsfhm()); + person.setControlDepartId(xx.getSspcsdm()); + person.setControlDepartName(xx.getSspcsmc()); + try{ + int age = AgeUtil.idCard2Age(person.getIdCode(), LocalDate.now()); + if(age <= 6) { + return null; + } + person.setAge(age); + } catch (Exception e) { + return null; + } + if(person.getGender() == null) { + try{ + int gender = person.getIdCode().length() == 18 ? Integer.valueOf(person.getIdCode().substring(16, 17)) : Integer.valueOf(person.getIdCode().substring(14, 15)); + // 结果0男1女 余数偶女奇男 + person.setGender(gender % 2 == 0 ?"2":"1"); + } catch (Exception e) { + return null; + } + } + person.setCreateTime(LocalDateTime.now()); + person.setControlTime(LocalDateTime.now()); + person.setTags(tag); + return person; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/task/TaskService.java b/src/main/java/com/biutag/supervisiondata/task/TaskService.java new file mode 100644 index 0000000..189c20d --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/task/TaskService.java @@ -0,0 +1,22 @@ +package com.biutag.supervisiondata.task; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + + +/** + * @author kami on 2024-07-25 10:52:39 + * @version 0.0.1 + * @since 1.8 + */ +@Component +@Slf4j +public class TaskService { + + + @Scheduled(cron = "0 0/10 * * * ?") + public void ageModel() { + } + +} diff --git a/src/main/java/com/biutag/supervisiondata/util/AgeUtil.java b/src/main/java/com/biutag/supervisiondata/util/AgeUtil.java new file mode 100644 index 0000000..ce473e8 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/util/AgeUtil.java @@ -0,0 +1,35 @@ +package com.biutag.supervisiondata.util; + +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +/** + * @author kami on 2024-11-11 14:25:33 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@UtilityClass +public class AgeUtil { + + /** + * 身份证提取年龄 + * @param idNumber 证件号 + * @param now 当前日期 + * @return + */ + public static Integer idCard2Age(String idNumber, LocalDate now) { + try { + String bornDate = idNumber.length() == 15 ? "19".concat(idNumber.substring(6, 12)) : + idNumber.substring(6, 14); + LocalDate d = LocalDate.parse(bornDate, DateTimeFormatter.ofPattern("yyyyMMdd")); + return d.until(now).getYears(); + } catch (Exception e) { + log.info("身份证转年龄异常"); + } + return null; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/util/BhUtil.java b/src/main/java/com/biutag/supervisiondata/util/BhUtil.java new file mode 100644 index 0000000..37464a7 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/util/BhUtil.java @@ -0,0 +1,42 @@ +package com.biutag.supervisiondata.util; + +import lombok.experimental.UtilityClass; + +/** + * @author kami on 2024-11-13 13:21:38 + * @version 0.0.1 + * @since 1.8 + */ +@UtilityClass +public class BhUtil { + + private static final String AJ_PIX = "aj___"; + + private static final String JJ_PIX = "jjd___"; + + private static final String PET_PIX = "pet___"; + + private static final String SF_PIX = "sf___"; + + private static final String ZY_PIX = "zy___"; + + public static String ajBh(String id) { + return AJ_PIX+id; + } + + public static String jjdBh(String id) { + return JJ_PIX+id; + } + + public static String petBh(String id) { + return PET_PIX+id; + } + + public static String sfBh(String id) { + return SF_PIX+id; + } + + public static String zyBh(String id) { + return ZY_PIX+id; + } +} diff --git a/src/main/java/com/biutag/supervisiondata/util/PatternUtil.java b/src/main/java/com/biutag/supervisiondata/util/PatternUtil.java new file mode 100644 index 0000000..6147baf --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/util/PatternUtil.java @@ -0,0 +1,55 @@ +package com.biutag.supervisiondata.util; + +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author kami on 2024-11-08 20:18:20 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@UtilityClass +public class PatternUtil { + + private static final Pattern ID_CARD = Pattern.compile("\\d{17}[\\d|x|X]|\\d{15}"); + + private static final Pattern MARK = Pattern.compile("1"); + + public static String takeIdCard(String content) { + StringBuilder str = new StringBuilder(); + if(content == null) { + return str.toString(); + } + Matcher IdCardNumber = ID_CARD.matcher(content); + while (IdCardNumber.find()) { + str.append(IdCardNumber.group()).append(","); + } + if(str.isEmpty()) { + return str.toString(); + } + return str.substring(0, str.length()-1); + } + + public static List takeMarkPosition(String content) { + List indexes = new ArrayList<>(); + if(content == null) { + return indexes; + } + Matcher code = MARK.matcher(content); + while (code.find()) { + indexes.add(code.start()+1); + } + return indexes; + } + + public static void main(String[] args) { + String test = "00001100101"; + log.info("{}", takeMarkPosition(test)); + } +} diff --git a/src/main/java/com/biutag/supervisiondata/util/RandomUtil.java b/src/main/java/com/biutag/supervisiondata/util/RandomUtil.java new file mode 100644 index 0000000..f993cbf --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/util/RandomUtil.java @@ -0,0 +1,89 @@ +package com.biutag.supervisiondata.util; + +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.ThreadLocalRandom; + +/** + * 随机数工具类 + */ +@Slf4j +@UtilityClass +public class RandomUtil { + private static final String ALL_CHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*"; + private static final String LETTER_CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + private static final String NUMBER_CHAR = "0123456789"; + + /** + * 获取定长的随机数,包含大小写、数字 + * @param length 随机数长度 + * @return 随机字符串 + */ + public static String generateString(int length) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + sb.append(ALL_CHAR.charAt(ThreadLocalRandom.current().nextInt(ALL_CHAR.length()))); + } + return sb.toString(); + } + + /** + * 获取定长的随机数,包含大小写字母 + * + * @param length 随机数长度 + * @return 随机字符串 + */ + public static String generateMixString(int length) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + sb.append(LETTER_CHAR.charAt(ThreadLocalRandom.current().nextInt(LETTER_CHAR.length()))); + } + return sb.toString(); + } + + /** + * 获取定长的随机数,只包含小写字母 + * @param length 随机数长度 + * @return 随机字符串 + */ + public static String generateLowerString(int length) { + return generateMixString(length).toLowerCase(); + } + + /** + * 获取定长的随机数,只包含大写字母 + * @param length 随机数长度 + * @return 随机字符串 + */ + public static String generateUpperString(int length) { + return generateMixString(length).toUpperCase(); + } + + /** + * 获取定长的随机数,只包含数字 + * @param length 随机数长度 + * @return 随机字符串 + */ + public static String generateNumberString(int length) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + sb.append(NUMBER_CHAR.charAt(ThreadLocalRandom.current().nextInt(NUMBER_CHAR.length()))); + } + return sb.toString(); + } + + /** + * 获取定长的随机数,只包含大写字母 + * + * @param length 随机数长度 + * @return + */ + public static String generateUpperStringFast(int length) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + sb.append(LETTER_CHAR.charAt(ThreadLocalRandom.current().nextInt(length))); + } + return sb.toString(); + } +} diff --git a/src/main/java/com/biutag/supervisiondata/util/TxtUtil.java b/src/main/java/com/biutag/supervisiondata/util/TxtUtil.java new file mode 100644 index 0000000..c153059 --- /dev/null +++ b/src/main/java/com/biutag/supervisiondata/util/TxtUtil.java @@ -0,0 +1,33 @@ +package com.biutag.supervisiondata.util; + +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; + +/** + * @author kami on 2024-07-15 15:47:40 + * @version 0.0.1 + * @since 1.8 + */ +@Slf4j +@UtilityClass +public class TxtUtil { + + public static void write(String str, String path) { + try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) { + bw.write(str); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + log.info("{}", Date.from(LocalDateTime.of(2024,1,1,0,0,0).atZone(ZoneId.systemDefault()).toInstant())); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..c22c243 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,85 @@ +server: + port: 8567 + +spring: + application: + name: supervision-data + threads: + virtual: + enabled: true + jackson: + date-format: yyyy-MM-dd HH:mm:ss + default-property-inclusion: non_null + time-zone: GMT+8 + servlet: + multipart: + max-file-size: 1024MB + max-request-size: 1024MB + file-size-threshold: 0 + datasource: + mine: + jdbc-url: jdbc:mysql://65.47.6.109:3306/negative?useSSL=false&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2b8 +# jdbc-url: jdbc:mysql://172.31.217.20:31868/negative?useSSL=false&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2b8 + username: root + password: ip12341234 + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.zaxxer.hikari.HikariDataSource + hikari: + minimum-idle: 5 + idle-timeout: 30000 + max-lifetime: 30000 + connection-timeout: 30000 + connection-test-query: SELECT 1 + dwd: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.gbase.jdbc.Driver + jdbc-url: jdbc:gbase://65.47.16.209:5258/csga_dwd + username: csga_wdpc + password: csga_wdpc@123 + hikari: + minimum-idle: 5 + idle-timeout: 30000 + max-lifetime: 30000 + connection-timeout: 30000 + connection-test-query: SELECT 1 + ads: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.gbase.jdbc.Driver + jdbc-url: jdbc:gbase://65.47.16.209:5258/csga_ads + username: csga_wdpc + password: csga_wdpc@123 + hikari: + minimum-idle: 5 + idle-timeout: 30000 + max-lifetime: 30000 + connection-timeout: 30000 + connection-test-query: SELECT 1 + data: + redis: + host: 65.47.6.109 + # 端口,默认为6379 + port: 6379 + password: ip1234!@#$ + database: 0 + lettuce: + pool: + max-active: 500 + max-wait: 3000 + max-idle: 500 + min-idle: 20 + +# Log +logging: + level: + com: + biutag: + supervisiondata: + service: debug + + +management: + endpoint: + web: + exposure: + include: 'health ' + diff --git a/src/main/resources/lib/gbase-connector-java-8.3.81.53-build52.8-bin.jar b/src/main/resources/lib/gbase-connector-java-8.3.81.53-build52.8-bin.jar new file mode 100644 index 0000000..778cd39 Binary files /dev/null and b/src/main/resources/lib/gbase-connector-java-8.3.81.53-build52.8-bin.jar differ diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..420058c --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,62 @@ + + + logs + + + + + + + + + + + + ${log.colorPattern} + UTF-8 + + + + + + + ${log.path}/info/info.%d{yyyy-MM-dd}.log + ${log.maxHistory} + + + ${log.pattern} + + + INFO + ACCEPT + DENY + + + + + + ${log.path}/error/error.%d{yyyy-MM-dd}.log + ${log.maxHistory} + + + ${log.pattern} + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ads/GBaseSYRKXXMapper.xml b/src/main/resources/mapper/ads/GBaseSYRKXXMapper.xml new file mode 100644 index 0000000..f142eb6 --- /dev/null +++ b/src/main/resources/mapper/ads/GBaseSYRKXXMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseAJJBXXMapper.xml b/src/main/resources/mapper/dwd/GBaseAJJBXXMapper.xml new file mode 100644 index 0000000..d0b43c0 --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseAJJBXXMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseBAXXMapper.xml b/src/main/resources/mapper/dwd/GBaseBAXXMapper.xml new file mode 100644 index 0000000..a301acf --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseBAXXMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseBAYJMapper.xml b/src/main/resources/mapper/dwd/GBaseBAYJMapper.xml new file mode 100644 index 0000000..f086454 --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseBAYJMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseHYMapper.xml b/src/main/resources/mapper/dwd/GBaseHYMapper.xml new file mode 100644 index 0000000..299c05a --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseHYMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseJJDMapper.xml b/src/main/resources/mapper/dwd/GBaseJJDMapper.xml new file mode 100644 index 0000000..0844dd4 --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseJJDMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseSHRXXMapper.xml b/src/main/resources/mapper/dwd/GBaseSHRXXMapper.xml new file mode 100644 index 0000000..19cc0fa --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseSHRXXMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseTbDZdrylbMapper.xml b/src/main/resources/mapper/dwd/GBaseTbDZdrylbMapper.xml new file mode 100644 index 0000000..975a6da --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseTbDZdrylbMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseWFRXXMapper.xml b/src/main/resources/mapper/dwd/GBaseWFRXXMapper.xml new file mode 100644 index 0000000..b9cff50 --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseWFRXXMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseZDRYMapper.xml b/src/main/resources/mapper/dwd/GBaseZDRYMapper.xml new file mode 100644 index 0000000..c53e490 --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseZDRYMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseZDXLMapper.xml b/src/main/resources/mapper/dwd/GBaseZDXLMapper.xml new file mode 100644 index 0000000..9e5dcab --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseZDXLMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/dwd/GBaseZYRYXXMapper.xml b/src/main/resources/mapper/dwd/GBaseZYRYXXMapper.xml new file mode 100644 index 0000000..c1c030b --- /dev/null +++ b/src/main/resources/mapper/dwd/GBaseZYRYXXMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/DataCaseVerifMapper.xml b/src/main/resources/mapper/mine/DataCaseVerifMapper.xml new file mode 100644 index 0000000..daf7c7c --- /dev/null +++ b/src/main/resources/mapper/mine/DataCaseVerifMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/DataPetition12337Mapper.xml b/src/main/resources/mapper/mine/DataPetition12337Mapper.xml new file mode 100644 index 0000000..d638046 --- /dev/null +++ b/src/main/resources/mapper/mine/DataPetition12337Mapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/DataPetitionComplaintMapper.xml b/src/main/resources/mapper/mine/DataPetitionComplaintMapper.xml new file mode 100644 index 0000000..612f198 --- /dev/null +++ b/src/main/resources/mapper/mine/DataPetitionComplaintMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/ModelMapper.xml b/src/main/resources/mapper/mine/ModelMapper.xml new file mode 100644 index 0000000..0533a04 --- /dev/null +++ b/src/main/resources/mapper/mine/ModelMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/RiskModelTaskClueMapper.xml b/src/main/resources/mapper/mine/RiskModelTaskClueMapper.xml new file mode 100644 index 0000000..9b41428 --- /dev/null +++ b/src/main/resources/mapper/mine/RiskModelTaskClueMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/RiskPersonalControlRecordMapper.xml b/src/main/resources/mapper/mine/RiskPersonalControlRecordMapper.xml new file mode 100644 index 0000000..b9db295 --- /dev/null +++ b/src/main/resources/mapper/mine/RiskPersonalControlRecordMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/src/main/resources/mapper/mine/RiskPersonalMapper.xml b/src/main/resources/mapper/mine/RiskPersonalMapper.xml new file mode 100644 index 0000000..41a72a6 --- /dev/null +++ b/src/main/resources/mapper/mine/RiskPersonalMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/RiskPersonalTagMapper.xml b/src/main/resources/mapper/mine/RiskPersonalTagMapper.xml new file mode 100644 index 0000000..5fa3036 --- /dev/null +++ b/src/main/resources/mapper/mine/RiskPersonalTagMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/RiskScoreRuleMapper.xml b/src/main/resources/mapper/mine/RiskScoreRuleMapper.xml new file mode 100644 index 0000000..1956ac5 --- /dev/null +++ b/src/main/resources/mapper/mine/RiskScoreRuleMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/RiskTaskMapper.xml b/src/main/resources/mapper/mine/RiskTaskMapper.xml new file mode 100644 index 0000000..86a99df --- /dev/null +++ b/src/main/resources/mapper/mine/RiskTaskMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/RiskTestMapper.xml b/src/main/resources/mapper/mine/RiskTestMapper.xml new file mode 100644 index 0000000..5ea035e --- /dev/null +++ b/src/main/resources/mapper/mine/RiskTestMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/SupDepartMapper.xml b/src/main/resources/mapper/mine/SupDepartMapper.xml new file mode 100644 index 0000000..c6bcd76 --- /dev/null +++ b/src/main/resources/mapper/mine/SupDepartMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/mapper/mine/SupExternalDepartMapper.xml b/src/main/resources/mapper/mine/SupExternalDepartMapper.xml new file mode 100644 index 0000000..b5052f9 --- /dev/null +++ b/src/main/resources/mapper/mine/SupExternalDepartMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/test/java/com/biutag/supervisiondata/SupervisionDataApplicationTests.java b/src/test/java/com/biutag/supervisiondata/SupervisionDataApplicationTests.java new file mode 100644 index 0000000..24a0e21 --- /dev/null +++ b/src/test/java/com/biutag/supervisiondata/SupervisionDataApplicationTests.java @@ -0,0 +1,13 @@ +package com.biutag.supervisiondata; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SupervisionDataApplicationTests { + + @Test + void contextLoads() { + } + +}