新增图谱功能及验收清单
This commit is contained in:
@@ -0,0 +1,384 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.ccdi.project.mapper.CcdiFundGraphMapper">
|
||||
|
||||
<resultMap id="FundGraphNodeResultMap" type="com.ruoyi.ccdi.project.domain.vo.CcdiFundGraphNodeVO">
|
||||
<id property="objectKey" column="objectKey"/>
|
||||
<result property="nodeKey" column="nodeKey"/>
|
||||
<result property="nodeName" column="nodeName"/>
|
||||
<result property="idNo" column="idNo"/>
|
||||
<result property="cinocsno" column="cinocsno"/>
|
||||
<result property="idnoType" column="idnoType"/>
|
||||
<result property="staffId" column="staffId"/>
|
||||
<result property="sourceType" column="sourceType"/>
|
||||
<result property="nodeType" column="nodeType"/>
|
||||
<result property="identityType" column="identityType"/>
|
||||
<result property="relationType" column="relationType"/>
|
||||
<result property="accountCount" column="accountCount"/>
|
||||
<result property="createdTime" column="createdTime"/>
|
||||
<result property="updatedTime" column="updatedTime"/>
|
||||
<result property="canExpand" column="canExpand"/>
|
||||
<result property="depth" column="depth"/>
|
||||
<result property="totalAmount" column="totalAmount"/>
|
||||
<result property="transactionCount" column="transactionCount"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="FundGraphEdgeResultMap" type="com.ruoyi.ccdi.project.domain.vo.CcdiFundGraphEdgeVO">
|
||||
<id property="edgeKey" column="edgeKey"/>
|
||||
<result property="fromKey" column="fromKey"/>
|
||||
<result property="toKey" column="toKey"/>
|
||||
<result property="fromObjectKey" column="fromObjectKey"/>
|
||||
<result property="toObjectKey" column="toObjectKey"/>
|
||||
<result property="fromName" column="fromName"/>
|
||||
<result property="toName" column="toName"/>
|
||||
<result property="totalAmount" column="totalAmount"/>
|
||||
<result property="transactionCount" column="transactionCount"/>
|
||||
<result property="firstTrxDate" column="firstTrxDate"/>
|
||||
<result property="lastTrxDate" column="lastTrxDate"/>
|
||||
<result property="direction" column="direction"/>
|
||||
<result property="familyRelationType" column="familyRelationType"/>
|
||||
<result property="sourceType" column="sourceType"/>
|
||||
<result property="relationDesc" column="relationDesc"/>
|
||||
<result property="sourceDesc" column="sourceDesc"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="depth" column="depth"/>
|
||||
<result property="canTrace" column="canTrace"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="FundGraphStatementResultMap" type="com.ruoyi.ccdi.project.domain.vo.CcdiFundGraphStatementVO">
|
||||
<id property="bankStatementId" column="bankStatementId"/>
|
||||
<result property="trxDate" column="trxDate"/>
|
||||
<result property="leAccountNo" column="leAccountNo"/>
|
||||
<result property="leAccountName" column="leAccountName"/>
|
||||
<result property="customerAccountName" column="customerAccountName"/>
|
||||
<result property="customerAccountNo" column="customerAccountNo"/>
|
||||
<result property="cashType" column="cashType"/>
|
||||
<result property="userMemo" column="userMemo"/>
|
||||
<result property="amount" column="amount"/>
|
||||
<result property="direction" column="direction"/>
|
||||
<result property="familyRelationType" column="familyRelationType"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="detailFilter">
|
||||
<if test="query.transactionStartTime != null and query.transactionStartTime != ''">
|
||||
AND d.trx_date <![CDATA[ >= ]]> (#{query.transactionStartTime} COLLATE utf8mb4_general_ci)
|
||||
</if>
|
||||
<if test="query.transactionEndTime != null and query.transactionEndTime != ''">
|
||||
AND d.trx_date <![CDATA[ <= ]]>
|
||||
(CASE
|
||||
WHEN LENGTH(TRIM(#{query.transactionEndTime})) = 10
|
||||
THEN CONCAT(TRIM(#{query.transactionEndTime}), ' 23:59:59')
|
||||
ELSE TRIM(#{query.transactionEndTime})
|
||||
END COLLATE utf8mb4_general_ci)
|
||||
</if>
|
||||
<if test="query.amountMin != null">
|
||||
AND d.amount <![CDATA[ >= ]]> #{query.amountMin}
|
||||
</if>
|
||||
<if test="query.amountMax != null">
|
||||
AND d.amount <![CDATA[ <= ]]> #{query.amountMax}
|
||||
</if>
|
||||
<if test="query.direction != null and query.direction != ''">
|
||||
AND d.flag = (#{query.direction} COLLATE utf8mb4_general_ci)
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<sql id="subjectJoinRows">
|
||||
SELECT
|
||||
d.object_key AS detailObjectKey,
|
||||
d.bank_statement_id AS bankStatementId,
|
||||
d.trx_date AS trxDate,
|
||||
d.le_account_no AS leAccountNo,
|
||||
d.le_account_name AS leAccountName,
|
||||
d.customer_account_name AS customerAccountName,
|
||||
d.customer_account_no AS customerAccountNo,
|
||||
d.cash_type AS cashType,
|
||||
d.user_memo AS userMemo,
|
||||
d.amount,
|
||||
d.flag AS direction,
|
||||
d.family_relation_type AS familyRelationType,
|
||||
from_subject.object_key AS fromObjectKey,
|
||||
to_subject.object_key AS toObjectKey,
|
||||
CONCAT('idno_node/', from_subject.object_key) AS fromKey,
|
||||
CONCAT('idno_node/', to_subject.object_key) AS toKey,
|
||||
from_subject.name AS fromName,
|
||||
to_subject.name AS toName,
|
||||
from_subject.idnocfno AS fromIdNo,
|
||||
to_subject.idnocfno AS toIdNo
|
||||
FROM lx_fund_flow_detail_edge d
|
||||
INNER JOIN lx_fund_flow_own_account_edge from_own
|
||||
ON from_own.to_key = d.from_key
|
||||
INNER JOIN lx_fund_flow_subject_node from_subject
|
||||
ON CONCAT('idno_node/', from_subject.object_key) = from_own.from_key
|
||||
INNER JOIN lx_fund_flow_own_account_edge to_own
|
||||
ON to_own.to_key = d.to_key
|
||||
INNER JOIN lx_fund_flow_subject_node to_subject
|
||||
ON CONCAT('idno_node/', to_subject.object_key) = to_own.from_key
|
||||
WHERE 1 = 1
|
||||
<if test="query.objectKey != null and query.objectKey != ''">
|
||||
AND (
|
||||
from_subject.object_key = (#{query.objectKey} COLLATE utf8mb4_general_ci)
|
||||
OR to_subject.object_key = (#{query.objectKey} COLLATE utf8mb4_general_ci)
|
||||
)
|
||||
</if>
|
||||
<include refid="detailFilter"/>
|
||||
</sql>
|
||||
|
||||
<select id="selectFundGraphSubjects" resultMap="FundGraphNodeResultMap">
|
||||
SELECT
|
||||
n.object_key AS objectKey,
|
||||
CONCAT('idno_node/', n.object_key) AS nodeKey,
|
||||
n.name AS nodeName,
|
||||
n.idnocfno AS idNo,
|
||||
n.cinocsno AS cinocsno,
|
||||
n.idno_type AS idnoType,
|
||||
n.staff_id AS staffId,
|
||||
n.source_type AS sourceType,
|
||||
CASE
|
||||
WHEN n.idno_type = 'NAME_PROXY' OR n.source_type LIKE '%COUNTERPARTY%' THEN 'PROXY'
|
||||
ELSE 'PERSON'
|
||||
END AS nodeType,
|
||||
CASE
|
||||
WHEN n.idnocfno IS NOT NULL AND TRIM(n.idnocfno) != '' THEN 'IDNO'
|
||||
ELSE 'NAME'
|
||||
END AS identityType,
|
||||
CASE
|
||||
WHEN n.source_type LIKE 'GRAPH_TEST_FAMILY_%' THEN REPLACE(n.source_type, 'GRAPH_TEST_FAMILY_', '')
|
||||
ELSE NULL
|
||||
END AS relationType,
|
||||
CASE
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM lx_fund_flow_own_account_edge own
|
||||
WHERE own.from_key = CONCAT('idno_node/', n.object_key)
|
||||
) THEN 1
|
||||
ELSE 0
|
||||
END AS canExpand,
|
||||
(
|
||||
SELECT COUNT(1)
|
||||
FROM lx_fund_flow_own_account_edge own_count
|
||||
WHERE own_count.from_key = CONCAT('idno_node/', n.object_key)
|
||||
) AS accountCount,
|
||||
DATE_FORMAT(n.created_time, '%Y-%m-%d %H:%i:%s') AS createdTime,
|
||||
DATE_FORMAT(n.updated_time, '%Y-%m-%d %H:%i:%s') AS updatedTime,
|
||||
0 AS depth,
|
||||
0 AS totalAmount,
|
||||
0 AS transactionCount
|
||||
FROM lx_fund_flow_subject_node n
|
||||
WHERE 1 = 1
|
||||
<if test="query.objectKey != null and query.objectKey != ''">
|
||||
AND n.object_key = (#{query.objectKey} COLLATE utf8mb4_general_ci)
|
||||
</if>
|
||||
<if test="query.objectKey == null or query.objectKey == ''">
|
||||
<if test="query.keyword != null and query.keyword != ''">
|
||||
AND (
|
||||
n.idnocfno = (TRIM(#{query.keyword}) COLLATE utf8mb4_general_ci)
|
||||
OR n.name LIKE (CONCAT('%', TRIM(#{query.keyword}), '%') COLLATE utf8mb4_general_ci)
|
||||
OR n.object_key = (TRIM(#{query.keyword}) COLLATE utf8mb4_general_ci)
|
||||
)
|
||||
</if>
|
||||
</if>
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN n.idnocfno = (TRIM(IFNULL(#{query.keyword}, '')) COLLATE utf8mb4_general_ci) THEN 0
|
||||
WHEN n.object_key = (TRIM(IFNULL(#{query.keyword}, '')) COLLATE utf8mb4_general_ci) THEN 1
|
||||
WHEN n.staff_id IS NOT NULL AND TRIM(n.staff_id) != '' THEN 2
|
||||
WHEN UPPER(IFNULL(n.source_type, '')) LIKE '%EMPLOYEE%' THEN 2
|
||||
WHEN n.source_type LIKE '%员工%' THEN 2
|
||||
ELSE 3
|
||||
END,
|
||||
n.name
|
||||
LIMIT
|
||||
<choose>
|
||||
<when test="query.limit != null and query.limit > 0">
|
||||
#{query.limit}
|
||||
</when>
|
||||
<otherwise>
|
||||
20
|
||||
</otherwise>
|
||||
</choose>
|
||||
</select>
|
||||
|
||||
<select id="selectFundGraphEdges" resultMap="FundGraphEdgeResultMap">
|
||||
SELECT
|
||||
MD5(CONCAT(graph_rows.fromKey, '|', graph_rows.toKey, '|', graph_rows.direction, '|', IFNULL(graph_rows.familyRelationType, ''))) AS edgeKey,
|
||||
graph_rows.fromKey,
|
||||
graph_rows.toKey,
|
||||
graph_rows.fromObjectKey,
|
||||
graph_rows.toObjectKey,
|
||||
MAX(graph_rows.fromName) AS fromName,
|
||||
MAX(graph_rows.toName) AS toName,
|
||||
SUM(graph_rows.amount) AS totalAmount,
|
||||
COUNT(1) AS transactionCount,
|
||||
MIN(graph_rows.trxDate) AS firstTrxDate,
|
||||
MAX(graph_rows.trxDate) AS lastTrxDate,
|
||||
graph_rows.direction,
|
||||
graph_rows.familyRelationType,
|
||||
'BANK' AS sourceType,
|
||||
NULL AS relationDesc,
|
||||
NULL AS sourceDesc,
|
||||
NULL AS remark,
|
||||
1 AS depth,
|
||||
CASE
|
||||
WHEN MAX(
|
||||
CASE
|
||||
WHEN graph_rows.fromObjectKey = #{query.objectKey} THEN
|
||||
CASE
|
||||
WHEN graph_rows.toIdNo IS NOT NULL AND TRIM(graph_rows.toIdNo) != '' THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
ELSE
|
||||
CASE
|
||||
WHEN graph_rows.fromIdNo IS NOT NULL AND TRIM(graph_rows.fromIdNo) != '' THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
END
|
||||
) = 1 THEN 1
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM lx_fund_flow_own_account_edge own
|
||||
WHERE own.from_key = CASE
|
||||
WHEN graph_rows.fromObjectKey = #{query.objectKey}
|
||||
THEN graph_rows.toKey
|
||||
ELSE graph_rows.fromKey
|
||||
END
|
||||
) THEN 1
|
||||
ELSE 0
|
||||
END AS canTrace
|
||||
FROM (
|
||||
<include refid="subjectJoinRows"/>
|
||||
) graph_rows
|
||||
WHERE 1 = 1
|
||||
GROUP BY
|
||||
graph_rows.fromKey,
|
||||
graph_rows.toKey,
|
||||
graph_rows.fromObjectKey,
|
||||
graph_rows.toObjectKey,
|
||||
graph_rows.direction,
|
||||
graph_rows.familyRelationType
|
||||
<if test="query.minTotalAmount != null">
|
||||
HAVING SUM(graph_rows.amount) <![CDATA[ >= ]]> #{query.minTotalAmount}
|
||||
</if>
|
||||
ORDER BY totalAmount DESC, transactionCount DESC
|
||||
LIMIT #{query.limit}
|
||||
</select>
|
||||
|
||||
<select id="selectFundGraphManualEdges" resultMap="FundGraphEdgeResultMap">
|
||||
SELECT
|
||||
m.object_key AS edgeKey,
|
||||
CONCAT('idno_node/', m.from_object_key) AS fromKey,
|
||||
CONCAT('idno_node/', m.to_object_key) AS toKey,
|
||||
m.from_object_key AS fromObjectKey,
|
||||
m.to_object_key AS toObjectKey,
|
||||
COALESCE(from_subject.name, m.from_name) AS fromName,
|
||||
COALESCE(to_subject.name, m.to_name) AS toName,
|
||||
m.amount AS totalAmount,
|
||||
m.transaction_count AS transactionCount,
|
||||
DATE_FORMAT(m.created_time, '%Y-%m-%d %H:%i:%s') AS firstTrxDate,
|
||||
DATE_FORMAT(m.created_time, '%Y-%m-%d %H:%i:%s') AS lastTrxDate,
|
||||
m.direction,
|
||||
NULL AS familyRelationType,
|
||||
m.source_type AS sourceType,
|
||||
m.relation_desc AS relationDesc,
|
||||
m.source_desc AS sourceDesc,
|
||||
m.remark,
|
||||
1 AS depth,
|
||||
0 AS canTrace
|
||||
FROM lx_fund_flow_manual_edge m
|
||||
LEFT JOIN lx_fund_flow_subject_node from_subject
|
||||
ON from_subject.object_key = m.from_object_key
|
||||
LEFT JOIN lx_fund_flow_subject_node to_subject
|
||||
ON to_subject.object_key = m.to_object_key
|
||||
WHERE m.source_type = 'MANUAL'
|
||||
AND (
|
||||
m.from_object_key = (#{query.objectKey} COLLATE utf8mb4_general_ci)
|
||||
OR m.to_object_key = (#{query.objectKey} COLLATE utf8mb4_general_ci)
|
||||
)
|
||||
ORDER BY m.updated_time DESC
|
||||
LIMIT #{query.limit}
|
||||
</select>
|
||||
|
||||
<select id="selectFundGraphEdgeDetails" resultMap="FundGraphStatementResultMap">
|
||||
SELECT
|
||||
graph_rows.bankStatementId,
|
||||
graph_rows.trxDate,
|
||||
graph_rows.leAccountNo,
|
||||
graph_rows.leAccountName,
|
||||
graph_rows.customerAccountName,
|
||||
graph_rows.customerAccountNo,
|
||||
graph_rows.cashType,
|
||||
graph_rows.userMemo,
|
||||
graph_rows.amount,
|
||||
graph_rows.direction,
|
||||
graph_rows.familyRelationType
|
||||
FROM (
|
||||
<include refid="subjectJoinRows"/>
|
||||
) graph_rows
|
||||
WHERE graph_rows.fromKey = (#{query.fromKey} COLLATE utf8mb4_general_ci)
|
||||
AND graph_rows.toKey = (#{query.toKey} COLLATE utf8mb4_general_ci)
|
||||
<if test="query.direction != null and query.direction != ''">
|
||||
AND graph_rows.direction = (#{query.direction} COLLATE utf8mb4_general_ci)
|
||||
</if>
|
||||
ORDER BY graph_rows.trxDate DESC, graph_rows.bankStatementId DESC
|
||||
</select>
|
||||
|
||||
<select id="countSubjectByObjectKey" resultType="int">
|
||||
SELECT COUNT(1)
|
||||
FROM lx_fund_flow_subject_node
|
||||
WHERE object_key = (#{objectKey} COLLATE utf8mb4_general_ci)
|
||||
</select>
|
||||
|
||||
<insert id="insertManualSubject">
|
||||
INSERT IGNORE INTO lx_fund_flow_subject_node (
|
||||
object_key,
|
||||
idnocfno,
|
||||
name,
|
||||
idno_type,
|
||||
source_type
|
||||
) VALUES (
|
||||
#{objectKey},
|
||||
#{idNo},
|
||||
#{name},
|
||||
CASE
|
||||
WHEN #{idNo} IS NULL OR TRIM(#{idNo}) = '' THEN 'NAME_PROXY'
|
||||
ELSE 'PERSON'
|
||||
END,
|
||||
'MANUAL'
|
||||
)
|
||||
</insert>
|
||||
|
||||
<insert id="insertManualEdge">
|
||||
INSERT INTO lx_fund_flow_manual_edge (
|
||||
object_key,
|
||||
from_object_key,
|
||||
to_object_key,
|
||||
from_name,
|
||||
to_name,
|
||||
amount,
|
||||
transaction_count,
|
||||
direction,
|
||||
relation_desc,
|
||||
source_desc,
|
||||
remark,
|
||||
source_type,
|
||||
created_by,
|
||||
updated_by
|
||||
) VALUES (
|
||||
#{objectKey},
|
||||
#{dto.fromObjectKey},
|
||||
#{dto.toObjectKey},
|
||||
#{dto.fromName},
|
||||
#{dto.toName},
|
||||
#{dto.amount},
|
||||
#{dto.transactionCount},
|
||||
#{dto.direction},
|
||||
#{dto.relationDesc},
|
||||
#{dto.sourceDesc},
|
||||
#{dto.remark},
|
||||
'MANUAL',
|
||||
#{operator},
|
||||
#{operator}
|
||||
)
|
||||
</insert>
|
||||
</mapper>
|
||||
@@ -0,0 +1,330 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.ccdi.project.mapper.CcdiRelationGraphMapper">
|
||||
|
||||
<resultMap id="RelationGraphNodeResultMap" type="com.ruoyi.ccdi.project.domain.vo.CcdiRelationGraphNodeVO">
|
||||
<id property="objectKey" column="objectKey"/>
|
||||
<result property="nodeKey" column="nodeKey"/>
|
||||
<result property="nodeName" column="nodeName"/>
|
||||
<result property="idNumber" column="idNumber"/>
|
||||
<result property="subjectType" column="subjectType"/>
|
||||
<result property="sourceType" column="sourceType"/>
|
||||
<result property="createdTime" column="createdTime"/>
|
||||
<result property="updatedTime" column="updatedTime"/>
|
||||
<result property="canExpand" column="canExpand"/>
|
||||
<result property="depth" column="depth"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="RelationGraphEdgeResultMap" type="com.ruoyi.ccdi.project.domain.vo.CcdiRelationGraphEdgeVO">
|
||||
<id property="objectKey" column="objectKey"/>
|
||||
<result property="fromKey" column="fromKey"/>
|
||||
<result property="toKey" column="toKey"/>
|
||||
<result property="edgeTable" column="edgeTable"/>
|
||||
<result property="relationType" column="relationType"/>
|
||||
<result property="companyName" column="companyName"/>
|
||||
<result property="stockName" column="stockName"/>
|
||||
<result property="stockType" column="stockType"/>
|
||||
<result property="stockPercent" column="stockPercent"/>
|
||||
<result property="shouldCapi" column="shouldCapi"/>
|
||||
<result property="shouldCapiValue" column="shouldCapiValue"/>
|
||||
<result property="shouldCapiUnit" column="shouldCapiUnit"/>
|
||||
<result property="shoudDate" column="shoudDate"/>
|
||||
<result property="pKeyNo" column="pKeyNo"/>
|
||||
<result property="operName" column="operName"/>
|
||||
<result property="operKeyNo" column="operKeyNo"/>
|
||||
<result property="personId" column="personId"/>
|
||||
<result property="relationName" column="relationName"/>
|
||||
<result property="relationCertNo" column="relationCertNo"/>
|
||||
<result property="gender" column="gender"/>
|
||||
<result property="birthDate" column="birthDate"/>
|
||||
<result property="relationCertType" column="relationCertType"/>
|
||||
<result property="mobilePhone1" column="mobilePhone1"/>
|
||||
<result property="mobilePhone2" column="mobilePhone2"/>
|
||||
<result property="wechatNo1" column="wechatNo1"/>
|
||||
<result property="wechatNo2" column="wechatNo2"/>
|
||||
<result property="wechatNo3" column="wechatNo3"/>
|
||||
<result property="contactAddress" column="contactAddress"/>
|
||||
<result property="annualIncome" column="annualIncome"/>
|
||||
<result property="relationDesc" column="relationDesc"/>
|
||||
<result property="status" column="status"/>
|
||||
<result property="effectiveDate" column="effectiveDate"/>
|
||||
<result property="invalidDate" column="invalidDate"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="dataSource" column="dataSource"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="SuspectedEnterpriseResultMap" type="com.ruoyi.ccdi.project.domain.vo.CcdiRelationGraphSuspectedEnterpriseItemVO">
|
||||
<result property="candidateKeyNo" column="candidateKeyNo"/>
|
||||
<result property="personName" column="personName"/>
|
||||
<result property="companyId" column="companyId"/>
|
||||
<result property="companyName" column="companyName"/>
|
||||
<result property="creditCode" column="creditCode"/>
|
||||
<result property="enterpriseStatus" column="enterpriseStatus"/>
|
||||
<result property="industryName" column="industryName"/>
|
||||
<result property="relationType" column="relationType"/>
|
||||
<result property="stockPercent" column="stockPercent"/>
|
||||
<result property="establishDate" column="establishDate"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="nodeColumns">
|
||||
n.object_key AS objectKey,
|
||||
CONCAT('rel_node/', n.object_key) AS nodeKey,
|
||||
n.node_name AS nodeName,
|
||||
n.id_number AS idNumber,
|
||||
n.subject_type AS subjectType,
|
||||
n.source_type AS sourceType,
|
||||
DATE_FORMAT(n.created_time, '%Y-%m-%d %H:%i:%s') AS createdTime,
|
||||
DATE_FORMAT(n.updated_time, '%Y-%m-%d %H:%i:%s') AS updatedTime,
|
||||
1 AS canExpand,
|
||||
0 AS depth
|
||||
</sql>
|
||||
|
||||
<select id="selectRelationGraphSubjects" resultMap="RelationGraphNodeResultMap">
|
||||
SELECT
|
||||
<include refid="nodeColumns"/>
|
||||
FROM lx_rel_node n
|
||||
WHERE 1 = 1
|
||||
<if test="query.objectKey != null and query.objectKey != ''">
|
||||
AND n.object_key = (#{query.objectKey} COLLATE utf8mb4_general_ci)
|
||||
</if>
|
||||
<if test="query.objectKey == null or query.objectKey == ''">
|
||||
<if test="query.keyword != null and query.keyword != ''">
|
||||
AND (
|
||||
n.object_key = (TRIM(#{query.keyword}) COLLATE utf8mb4_general_ci)
|
||||
OR n.id_number = (TRIM(#{query.keyword}) COLLATE utf8mb4_general_ci)
|
||||
OR n.node_name LIKE (CONCAT('%', TRIM(#{query.keyword}), '%') COLLATE utf8mb4_general_ci)
|
||||
)
|
||||
</if>
|
||||
</if>
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN n.object_key = (TRIM(IFNULL(#{query.keyword}, '')) COLLATE utf8mb4_general_ci) THEN 0
|
||||
WHEN n.id_number = (TRIM(IFNULL(#{query.keyword}, '')) COLLATE utf8mb4_general_ci) THEN 1
|
||||
ELSE 2
|
||||
END,
|
||||
n.node_name
|
||||
LIMIT 20
|
||||
</select>
|
||||
|
||||
<select id="selectRelationGraphNodesByKeys" resultMap="RelationGraphNodeResultMap">
|
||||
SELECT
|
||||
<include refid="nodeColumns"/>
|
||||
FROM lx_rel_node n
|
||||
WHERE n.object_key IN
|
||||
<foreach collection="objectKeys" item="objectKey" open="(" separator="," close=")">
|
||||
#{objectKey}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<select id="selectRelationGraphEdges" resultMap="RelationGraphEdgeResultMap">
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT
|
||||
e.object_key AS objectKey,
|
||||
e.from_key AS fromKey,
|
||||
e.to_key AS toKey,
|
||||
'lx_rel_family_edge' AS edgeTable,
|
||||
e.relation_type AS relationType,
|
||||
NULL AS companyName,
|
||||
NULL AS stockName,
|
||||
NULL AS stockType,
|
||||
NULL AS stockPercent,
|
||||
NULL AS shouldCapi,
|
||||
NULL AS shouldCapiValue,
|
||||
NULL AS shouldCapiUnit,
|
||||
NULL AS shoudDate,
|
||||
NULL AS pKeyNo,
|
||||
NULL AS operName,
|
||||
NULL AS operKeyNo,
|
||||
e.person_id AS personId,
|
||||
e.relation_name AS relationName,
|
||||
e.relation_cert_no AS relationCertNo,
|
||||
NULL AS gender,
|
||||
NULL AS birthDate,
|
||||
NULL AS relationCertType,
|
||||
NULL AS mobilePhone1,
|
||||
NULL AS mobilePhone2,
|
||||
NULL AS wechatNo1,
|
||||
NULL AS wechatNo2,
|
||||
NULL AS wechatNo3,
|
||||
NULL AS contactAddress,
|
||||
NULL AS annualIncome,
|
||||
e.relation_desc AS relationDesc,
|
||||
NULL AS status,
|
||||
NULL AS effectiveDate,
|
||||
NULL AS invalidDate,
|
||||
NULL AS remark,
|
||||
NULL AS dataSource
|
||||
FROM lx_rel_family_edge e
|
||||
WHERE e.from_key = CONCAT('rel_node/', #{query.objectKey})
|
||||
OR e.to_key = CONCAT('rel_node/', #{query.objectKey})
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
e.object_key AS objectKey,
|
||||
e.from_key AS fromKey,
|
||||
e.to_key AS toKey,
|
||||
'lx_rel_stock_edge' AS edgeTable,
|
||||
e.stock_type AS relationType,
|
||||
e.company_name AS companyName,
|
||||
e.stock_name AS stockName,
|
||||
e.stock_type AS stockType,
|
||||
e.stock_percent AS stockPercent,
|
||||
e.should_capi AS shouldCapi,
|
||||
e.should_capi_value AS shouldCapiValue,
|
||||
e.should_capi_unit AS shouldCapiUnit,
|
||||
e.shoud_date AS shoudDate,
|
||||
e.p_key_no AS pKeyNo,
|
||||
NULL AS operName,
|
||||
NULL AS operKeyNo,
|
||||
NULL AS personId,
|
||||
NULL AS relationName,
|
||||
NULL AS relationCertNo,
|
||||
NULL AS gender,
|
||||
NULL AS birthDate,
|
||||
NULL AS relationCertType,
|
||||
NULL AS mobilePhone1,
|
||||
NULL AS mobilePhone2,
|
||||
NULL AS wechatNo1,
|
||||
NULL AS wechatNo2,
|
||||
NULL AS wechatNo3,
|
||||
NULL AS contactAddress,
|
||||
NULL AS annualIncome,
|
||||
NULL AS relationDesc,
|
||||
NULL AS status,
|
||||
NULL AS effectiveDate,
|
||||
NULL AS invalidDate,
|
||||
NULL AS remark,
|
||||
NULL AS dataSource
|
||||
FROM lx_rel_stock_edge e
|
||||
WHERE e.from_key = CONCAT('rel_node/', #{query.objectKey})
|
||||
OR e.to_key = CONCAT('rel_node/', #{query.objectKey})
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
e.object_key AS objectKey,
|
||||
e.from_key AS fromKey,
|
||||
e.to_key AS toKey,
|
||||
'lx_rel_represent_edge' AS edgeTable,
|
||||
'法定代表人' AS relationType,
|
||||
NULL AS companyName,
|
||||
NULL AS stockName,
|
||||
NULL AS stockType,
|
||||
NULL AS stockPercent,
|
||||
NULL AS shouldCapi,
|
||||
NULL AS shouldCapiValue,
|
||||
NULL AS shouldCapiUnit,
|
||||
NULL AS shoudDate,
|
||||
NULL AS pKeyNo,
|
||||
e.oper_name AS operName,
|
||||
e.oper_key_no AS operKeyNo,
|
||||
NULL AS personId,
|
||||
NULL AS relationName,
|
||||
NULL AS relationCertNo,
|
||||
NULL AS gender,
|
||||
NULL AS birthDate,
|
||||
NULL AS relationCertType,
|
||||
NULL AS mobilePhone1,
|
||||
NULL AS mobilePhone2,
|
||||
NULL AS wechatNo1,
|
||||
NULL AS wechatNo2,
|
||||
NULL AS wechatNo3,
|
||||
NULL AS contactAddress,
|
||||
NULL AS annualIncome,
|
||||
NULL AS relationDesc,
|
||||
NULL AS status,
|
||||
NULL AS effectiveDate,
|
||||
NULL AS invalidDate,
|
||||
NULL AS remark,
|
||||
NULL AS dataSource
|
||||
FROM lx_rel_represent_edge e
|
||||
WHERE e.from_key = CONCAT('rel_node/', #{query.objectKey})
|
||||
OR e.to_key = CONCAT('rel_node/', #{query.objectKey})
|
||||
) graph_edges
|
||||
ORDER BY
|
||||
CASE edgeTable
|
||||
WHEN 'lx_rel_family_edge' THEN 0
|
||||
WHEN 'lx_rel_stock_edge' THEN 1
|
||||
ELSE 2
|
||||
END,
|
||||
relationType,
|
||||
objectKey
|
||||
LIMIT #{query.limit}
|
||||
</select>
|
||||
|
||||
<select id="countSuspectedEnterpriseKeyNos" resultType="int">
|
||||
SELECT COUNT(DISTINCT candidate_key_no)
|
||||
FROM (
|
||||
SELECT e.oper_key_no AS candidate_key_no
|
||||
FROM lx_rel_represent_edge e
|
||||
WHERE e.oper_name = (#{personName} COLLATE utf8mb4_general_ci)
|
||||
AND e.oper_key_no IS NOT NULL
|
||||
AND e.oper_key_no != ''
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT e.p_key_no AS candidate_key_no
|
||||
FROM lx_rel_stock_edge e
|
||||
WHERE e.stock_name = (#{personName} COLLATE utf8mb4_general_ci)
|
||||
AND e.stock_type = '自然人股东'
|
||||
AND e.p_key_no IS NOT NULL
|
||||
AND e.p_key_no != ''
|
||||
) same_name_candidates
|
||||
</select>
|
||||
|
||||
<select id="selectSuspectedEnterprises" resultMap="SuspectedEnterpriseResultMap">
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT
|
||||
e.oper_key_no AS candidateKeyNo,
|
||||
e.oper_name AS personName,
|
||||
REPLACE(e.to_key, 'rel_node/', '') AS companyId,
|
||||
COALESCE(ent.enterprise_name, company_node.node_name) AS companyName,
|
||||
COALESCE(ent.social_credit_code, company_node.id_number) AS creditCode,
|
||||
ent.status AS enterpriseStatus,
|
||||
ent.industry_name AS industryName,
|
||||
'法定代表人' AS relationType,
|
||||
NULL AS stockPercent,
|
||||
DATE_FORMAT(ent.establish_date, '%Y-%m-%d') AS establishDate,
|
||||
0 AS relationSort
|
||||
FROM lx_rel_represent_edge e
|
||||
LEFT JOIN lx_rel_node company_node
|
||||
ON company_node.object_key = REPLACE(e.to_key, 'rel_node/', '')
|
||||
LEFT JOIN ccdi_enterprise_base_info ent
|
||||
ON ent.social_credit_code = company_node.id_number
|
||||
WHERE e.oper_name = (#{personName} COLLATE utf8mb4_general_ci)
|
||||
AND e.oper_key_no IS NOT NULL
|
||||
AND e.oper_key_no != ''
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
e.p_key_no AS candidateKeyNo,
|
||||
e.stock_name AS personName,
|
||||
REPLACE(e.to_key, 'rel_node/', '') AS companyId,
|
||||
COALESCE(ent.enterprise_name, e.company_name, company_node.node_name) AS companyName,
|
||||
COALESCE(ent.social_credit_code, company_node.id_number) AS creditCode,
|
||||
ent.status AS enterpriseStatus,
|
||||
ent.industry_name AS industryName,
|
||||
e.stock_type AS relationType,
|
||||
e.stock_percent AS stockPercent,
|
||||
COALESCE(DATE_FORMAT(ent.establish_date, '%Y-%m-%d'), e.shoud_date) AS establishDate,
|
||||
1 AS relationSort
|
||||
FROM lx_rel_stock_edge e
|
||||
LEFT JOIN lx_rel_node company_node
|
||||
ON company_node.object_key = REPLACE(e.to_key, 'rel_node/', '')
|
||||
LEFT JOIN ccdi_enterprise_base_info ent
|
||||
ON ent.social_credit_code = company_node.id_number
|
||||
WHERE e.stock_name = (#{personName} COLLATE utf8mb4_general_ci)
|
||||
AND e.stock_type = '自然人股东'
|
||||
AND e.p_key_no IS NOT NULL
|
||||
AND e.p_key_no != ''
|
||||
) suspected_enterprises
|
||||
ORDER BY relationSort, companyName, companyId
|
||||
LIMIT #{limit}
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user