From c007f0ca1785db093d48f4846cda82fe8e955765 Mon Sep 17 00:00:00 2001
From: kimi <kimi42345@gmail.com>
Date: 星期三, 27 五月 2020 09:59:29 +0800
Subject: [PATCH] merage

---
 src/main/resources/mapping/TableInfoMapper.xml |  694 +++++++++++++++++++++++++++++++++------------------------
 1 files changed, 398 insertions(+), 296 deletions(-)

diff --git a/src/main/resources/mapping/TableInfoMapper.xml b/src/main/resources/mapping/TableInfoMapper.xml
index 8a6f8e0..ab82581 100644
--- a/src/main/resources/mapping/TableInfoMapper.xml
+++ b/src/main/resources/mapping/TableInfoMapper.xml
@@ -6,8 +6,7 @@
         show TABLES like #{tableName}
     </select>
 
-    <select id="selectIdxByTableName" parameterType="java.lang.String" resultType="java.util.Map"
-            statementType="STATEMENT">
+    <select id="selectIdxByTableName" parameterType="java.lang.String"   resultType="java.util.Map" statementType="STATEMENT">
         SELECT * FROM mysql.`innodb_index_stats` a WHERE  a.table_name =  ${tableName}
     </select>
 
@@ -15,307 +14,393 @@
         select COLUMN_NAME as fieldName,DATA_TYPE as dbType, character_maximum_length as length from information_schema.COLUMNS where table_name = #{tableName} and table_schema = (select database())
     </select>
 
-    <select id="getTableFieldFromDb" parameterType="com.highdatas.mdm.entity.TableSchema"
-            resultType="com.highdatas.mdm.entity.TableSchemaResult">
+    <select id="getTableFieldFromDb" parameterType="com.highdatas.mdm.entity.TableSchema" resultType="com.highdatas.mdm.entity.TableSchemaResult">
         select COLUMN_NAME as fieldName,DATA_TYPE as dbType,character_maximum_length as length from information_schema.COLUMNS where table_name = #{tableName} and table_schema = #{dbName}
     </select>
 
-    <select id="selectByPage" resultType="java.util.Map" statementType="STATEMENT">
+    <select id="selectByPage" resultType="java.util.Map" statementType="STATEMENT" >
         select ${fields} from ${tableName} where ${where}  ${limit}
     </select>
 
-    <select id="selectDistinct" resultType="java.util.Map" statementType="STATEMENT">
+    <select id="selectDistinct" resultType="java.util.Map" statementType="STATEMENT" >
         select DISTINCT ${fields} from ${tableName} where ${where}
     </select>
 
-    <select id="selectByPageByVersion" resultType="java.util.Map" statementType="STATEMENT">
+    <select id="selectByPageByVersion" resultType="java.util.Map" statementType="STATEMENT" >
         <![CDATA[
-         SELECT ${fields}
-FROM
-    (SELECT ${A1fields}
-    FROM ${tableName} a1
-    LEFT JOIN
-        (SELECT DISTINCT mt1.std_id
-        FROM ${tableTempName} mt1
-        LEFT JOIN maintain_detail md
-            ON md.pre_merge_id = mt1.id
-        LEFT JOIN maintain m
-            ON m.id = md.parent_id
-        WHERE m.order_no <= ${fromOrderNo}
-                AND m.order_no > ${toOrderNo}
-                AND m.table_name = '${tableName}'
-                AND (operate = 'create'
-                OR operate = 'update') ) v
-            ON v.std_id = a1.id
-        WHERE v.std_id IS NULL
-        UNION
-        SELECT ${tempFields}
-        FROM
-            (SELECT mt.*,
-         m.order_no
-            FROM ${tableTempName} mt
-            LEFT JOIN maintain_detail md
-                ON md.pre_merge_id = mt.id
-            LEFT JOIN maintain m
-                ON md.parent_id = m.id
-            WHERE m.order_no <= ${fromOrderNo}
-                    AND m.order_no > ${toOrderNo}
-                    AND m.table_name = '${tableName}'
-                    AND operate = 'update' ) AS a1
-            INNER JOIN
-                (SELECT std_id,
-         min(order_no) AS order_no
-                FROM
-                    (SELECT mt.id,
-         std_id,
-         m.order_no
-                    FROM ${tableTempName} mt
-                    LEFT JOIN maintain_detail md
-                        ON md.pre_merge_id = mt.id
-                    LEFT JOIN maintain m
-                        ON md.parent_id = m.id
-                    WHERE m.order_no <= ${fromOrderNo}
-                                AND m.order_no > ${toOrderNo}
-                            AND m.table_name = '${tableName}'
-                            AND operate = 'update'
-                            AND NOT EXISTS
-                        (SELECT mt1.id
-                        FROM ${tableTempName} mt1
-                        LEFT JOIN maintain_detail md
-                            ON md.pre_merge_id = mt1.id
-                        LEFT JOIN maintain m
-                            ON m.id = md.parent_id
-                        WHERE m.order_no <= ${fromOrderNo}
-                                AND m.order_no > ${toOrderNo}
-                                AND m.table_name = '${tableName}'
-                                AND operate = 'create'
-                                AND mt1.std_id = mt.std_id ) ) AS gz
-                        GROUP BY  std_id ) AS zb
-                            ON a1.std_id = zb.std_id
-                                AND a1.order_no = zb.order_no
-                        UNION
-                        SELECT DISTINCT ${tempFields}
-                        FROM ${tableTempName} a1
-                        LEFT JOIN maintain_detail md
-                            ON md.pre_merge_id = a1.id
-                        LEFT JOIN maintain m
-                            ON m.id = md.parent_id
-                        LEFT JOIN
-                            (SELECT DISTINCT mt1.std_id
-                            FROM ${tableTempName} mt1
-                            LEFT JOIN maintain_detail md
-                                ON md.pre_merge_id = mt1.id
-                            LEFT JOIN maintain m
-                                ON m.id = md.parent_id
-                            WHERE m.order_no <= ${fromOrderNo}
-                                    AND m.order_no > ${toOrderNo}
-                                    AND m.table_name = '${tableName}'
-                                    AND (operate = 'create'
-                                    OR operate = 'update') ) zb
-                                ON zb.std_id = a1.std_id
-                            WHERE zb.std_id is null
-                                    AND md.operate = 'delete'
-                                    AND m.order_no <= ${fromOrderNo}
-                                    AND m.order_no > ${toOrderNo}
-                                    AND m.table_name = '${tableName}' ) a
-                        WHERE ${where} ${limit}
-        ]]>
-    </select>
-
-    <select id="selectByPageByMaxVersion" resultType="java.util.Map" statementType="STATEMENT">
-         <![CDATA[
-
-       select  ${fields},operate, status from (
-       SELECT ${tempFields}, md.operate, f.`status` from ${tableTempName} a1
-        LEFT JOIN maintain_detail md on md.pre_merge_id = a1.id
+        select  ${fields} from (
+        SELECT
+         ${A1fields} from (
+        SELECT ${fields} from ${tableName} m
+        WHERE NOT EXISTS (
+          SELECT std_id FROM  ${tableTempName} tm
+          LEFT JOIN maintain_detail ON tm.id = maintain_detail.pre_merge_id
+		  LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+		    LEFT JOIN flows f on maintain.flow_id = f.id
+		  WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+		  and operate = 'create'
+		  AND tm.std_id = m.id
+		  AND f.status = 'open'
+		  and maintain.table_name = '${tableName}'
+		  ) ) a1
+		LEFT JOIN
+		(
+		SELECT   ${tempHFields} from ${tableTempName} h
+        LEFT JOIN maintain_detail md on md.pre_merge_id = h.id
         LEFT JOIN maintain m on m.id = md.parent_id
-        LEFT JOIN flows f on flow_id = f.id
-        WHERE order_no > ${fromOrderNo} and f.id is null
-        UNION
-        SELECT  ${tempFields}, md.operate, f.`status` from ${tableTempName} a1
-        LEFT JOIN maintain_detail md on md.pre_merge_id = a1.id
-        LEFT JOIN maintain m on m.id = md.parent_id
-        LEFT JOIN flows f on flow_id = f.id
-        WHERE order_no > ${fromOrderNo} and f.`status` = 'working'
-
-        union
-        SELECT  ${A1fields}, '', '' from ${tableName} a1
-        LEFT JOIN
-        (
-        SELECT DISTINCT std_id from ${tableTempName} mt
+        INNER JOIN (
+        SELECT MIN(m.order_no) as order_no, mt.std_id FROM ${tableTempName} mt
         LEFT JOIN maintain_detail md on md.pre_merge_id = mt.id
         LEFT JOIN maintain m on m.id = md.parent_id
-        LEFT JOIN flows f on flow_id = f.id
-        WHERE order_no > ${fromOrderNo} and f.id is null
+        LEFT JOIN flows f on m.flow_id = f.id
+        WHERE m.order_no <= ${fromOrderNo} and m.order_no > ${toOrderNo} and  m.table_name = '${tableName}'
+        and operate = 'update'
+        AND f.status = 'open'
+        GROUP BY mt.std_id
+        ) a on a.order_no = m.order_no and a.std_id = h.std_id
+		)a2 on a1.id = a2.id WHERE  a2.id is null
         UNION
-        SELECT DISTINCT std_id  from ${tableTempName} mt
+        SELECT
+         ${A2fields}
+        from (
+        SELECT ${fields} from ${tableName} m
+        WHERE NOT EXISTS (
+          SELECT std_id FROM  ${tableTempName} tm
+          LEFT JOIN maintain_detail ON tm.id = maintain_detail.pre_merge_id
+		  LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+		  LEFT JOIN flows f on maintain.flow_id = f.id
+		  WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+		  and operate = 'create'
+		  AND f.status = 'open'
+		  AND tm.std_id = m.id
+		  and maintain.table_name = '${tableName}'
+		  ) ) a1
+		LEFT JOIN
+		(
+		SELECT   ${tempHFields} from ${tableTempName} h
+        LEFT JOIN maintain_detail md on md.pre_merge_id = h.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        INNER JOIN (
+        SELECT MIN(m.order_no) as order_no, mt.std_id FROM ${tableTempName} mt
         LEFT JOIN maintain_detail md on md.pre_merge_id = mt.id
         LEFT JOIN maintain m on m.id = md.parent_id
-        LEFT JOIN flows f on flow_id = f.id
-        WHERE order_no > ${fromOrderNo} and f.`status` = 'working'
-        ) a on a.std_id  = a1.id where a.std_id is null
+        LEFT JOIN flows f on m.flow_id = f.id
+        WHERE m.order_no <= ${fromOrderNo} and m.order_no > ${toOrderNo} and m.table_name = '${tableName}'
+        and operate = 'update'
+        AND f.status = 'open'
+        GROUP BY mt.std_id
+        ) a on a.order_no = m.order_no and a.std_id = h.std_id
+		)a2 on a1.id = a2.id WHERE  a2.id is not null
+			UNION
+		SELECT ${tempFields} FROM maintain_detail md
+        LEFT JOIN maintain ON maintain.id = md.parent_id
+        LEFT JOIN flows f on maintain.flow_id = f.id
+        LEFT JOIN ${tableTempName} mt on mt.id = md.pre_merge_id
+        WHERE maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo} AND operate = 'delete'
+         AND f.status = 'open'
+         and  maintain.table_name = '${tableName}'
+        AND NOT EXISTS (
+            SELECT * FROM maintain_detail
+            LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+            LEFT JOIN ${tableTempName} mt1 on mt1.id = maintain_detail.pre_merge_id
+            LEFT JOIN flows f on maintain.flow_id = f.id
+            WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+            AND operate = 'create'
+            AND f.status = 'open'
+            AND mt.std_id = mt1.std_id
+            and  maintain.table_name = '${tableName}'
+        )
         )a where  ${where} ${limit}
-
-        ]]>
+         ]]>
     </select>
 
-    <select id="select" resultType="java.util.Map" statementType="STATEMENT">
+    <select id="selectByPageByMaxVersion" resultType="java.util.Map" statementType="STATEMENT" >
+         <![CDATA[
+        select  ${fields},operate, status from (
+        SELECT
+         ${A1fields}, '' as operate, '' as status from (
+        SELECT ${fields} from ${tableName} m
+        WHERE NOT EXISTS (
+          SELECT std_id FROM  ${tableTempName} tm
+          LEFT JOIN maintain_detail ON tm.id = maintain_detail.pre_merge_id
+		  LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+		  WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+		  AND tm.std_id = m.id
+		  and  maintain.table_name = '${tableName}'
+		  ) ) a1
+		LEFT JOIN
+		(
+		SELECT   ${tempHFields} from ${tableTempName} h
+        LEFT JOIN maintain_detail md on md.pre_merge_id = h.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        INNER JOIN (
+        SELECT max(m.order_no) as order_no, mt.std_id FROM ${tableTempName} mt
+        LEFT JOIN maintain_detail md on md.pre_merge_id = mt.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        WHERE m.order_no <= ${fromOrderNo} and m.order_no > ${toOrderNo} and  m.table_name = '${tableName}'
+        and operate = 'update'
+        GROUP BY mt.std_id
+        ) a on a.order_no = m.order_no and a.std_id = h.std_id
+		)a2 on a1.id = a2.id WHERE  a2.id is null
+        UNION
+        SELECT
+         ${A2fields}, 'update' as operate, a2.status as status
+        from (
+        SELECT ${fields} from ${tableName} m
+        ) a1
+		LEFT JOIN
+		(
+		SELECT   ${tempHFields}, f.status from ${tableTempName} h
+        LEFT JOIN maintain_detail md on md.pre_merge_id = h.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        LEFT JOIN flows f on m.flow_id = f.id
+        INNER JOIN (
+        SELECT max(m.order_no) as order_no, mt.std_id FROM ${tableTempName} mt
+        LEFT JOIN maintain_detail md on md.pre_merge_id = mt.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        WHERE m.order_no <= ${fromOrderNo} and m.order_no > ${toOrderNo} and  m.table_name = '${tableName}'
+        and operate = 'update'
+        GROUP BY mt.std_id
+        ) a on a.order_no = m.order_no and a.std_id = h.std_id
+		)a2 on a1.id = a2.id WHERE  a2.id is not null
+		UNION
+		SELECT ${tempFields}, 'create' as operate, f.status as status FROM maintain_detail md
+        LEFT JOIN maintain ON maintain.id = md.parent_id
+        LEFT JOIN flows f on maintain.flow_id = f.id
+        LEFT JOIN ${tableTempName} mt on mt.id = md.pre_merge_id
+        WHERE maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo} AND operate = 'create'
+        and  maintain.table_name = '${tableName}'
+        AND NOT EXISTS (
+            SELECT * FROM maintain_detail
+            LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+            LEFT JOIN ${tableTempName} mt1 on mt1.id = maintain_detail.pre_merge_id
+            WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+            AND operate = 'delete'
+            AND mt.std_id = mt1.std_id
+            and maintain.table_name = '${tableName}'
+        )
+        UNION
+		SELECT ${tempFields}, 'delete' as operate, f.status as status FROM maintain_detail md
+        LEFT JOIN maintain ON maintain.id = md.parent_id
+        LEFT JOIN flows f on maintain.flow_id = f.id
+        LEFT JOIN ${tableTempName} mt on mt.id = md.pre_merge_id
+        WHERE maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo} AND operate = 'delete'
+         and maintain.table_name = '${tableName}'
+        AND NOT EXISTS (
+            SELECT * FROM maintain_detail
+            LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+            LEFT JOIN ${tableTempName} mt1 on mt1.id = maintain_detail.pre_merge_id
+            WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+            AND operate = 'create'
+            AND mt.std_id = mt1.std_id
+            and  maintain.table_name = '${tableName}'
+        )
+        )a where  ${where} ${limit}
+         ]]>
+    </select>
+
+    <select id="select" resultType="java.util.Map" statementType="STATEMENT" >
         select ${fields} from ${tableName} where ${where}
     </select>
 
-    <select id="tempDeal" statementType="STATEMENT" resultType="java.lang.Integer">
-         UPDATE ${tableTempName} mt
-        INNER JOIN (
-        SELECT pre_merge_id from
-        maintain_detail
-        WHERE maintain_detail.parent_id = ${maintainId}
-        )md on mt.id = md.pre_merge_id
-        set mt.deal = 1
+    <select id="tempDeal"  statementType="STATEMENT" resultType="java.lang.Integer">
 
-
+        UPDATE ${tableTempName} t
+        SET deal = 1
+        where EXISTS (
+        SELECT pre_merge_id from maintain_detail WHERE parent_id = ${maintainId}
+        and maintain_detail.pre_merge_id = t.id
+        )
         </select>
 
-    <select id="getCount" resultType="java.lang.Long" statementType="STATEMENT">
+    <select id="getCount" resultType="java.lang.Long" statementType="STATEMENT" >
         select count(1) from ${tableName} where ${where}
     </select>
 
-    <select id="getCountByVersion" resultType="java.lang.Long" statementType="STATEMENT">
+    <select id="getCountByVersion" resultType="java.lang.Long" statementType="STATEMENT" >
         <![CDATA[
-       SELECT count(1)
-FROM
-    (SELECT ${A1fields}
-    FROM ${tableName} a1
-    LEFT JOIN
-        (SELECT DISTINCT mt1.std_id
-        FROM ${tableTempName} mt1
-        LEFT JOIN maintain_detail md
-            ON md.pre_merge_id = mt1.id
-        LEFT JOIN maintain m
-            ON m.id = md.parent_id
-        WHERE m.order_no <= ${fromOrderNo}
-                AND m.order_no > ${toOrderNo}
-                AND m.table_name = '${tableName}'
-                AND (operate = 'create'
-                OR operate = 'update') ) v
-            ON v.std_id = a1.id
-        WHERE v.std_id IS NULL
-        UNION
-        SELECT ${tempFields}
-        FROM
-            (SELECT mt.*,
-         m.order_no
-            FROM ${tableTempName} mt
-            LEFT JOIN maintain_detail md
-                ON md.pre_merge_id = mt.id
-            LEFT JOIN maintain m
-                ON md.parent_id = m.id
-            WHERE m.order_no <= ${fromOrderNo}
-                    AND m.order_no > ${toOrderNo}
-                    AND m.table_name = '${tableName}'
-                    AND operate = 'update' ) AS a1
-            INNER JOIN
-                (SELECT std_id,
-         min(order_no) AS order_no
-                FROM
-                    (SELECT mt.id,
-         std_id,
-         m.order_no
-                    FROM ${tableTempName} mt
-                    LEFT JOIN maintain_detail md
-                        ON md.pre_merge_id = mt.id
-                    LEFT JOIN maintain m
-                        ON md.parent_id = m.id
-                    WHERE m.order_no <= ${fromOrderNo}
-                                AND m.order_no > ${toOrderNo}
-                            AND m.table_name = '${tableName}'
-                            AND operate = 'update'
-                            AND NOT EXISTS
-                        (SELECT mt1.id
-                        FROM ${tableTempName} mt1
-                        LEFT JOIN maintain_detail md
-                            ON md.pre_merge_id = mt1.id
-                        LEFT JOIN maintain m
-                            ON m.id = md.parent_id
-                        WHERE m.order_no <= ${fromOrderNo}
-                                AND m.order_no > ${toOrderNo}
-                                AND m.table_name = '${tableName}'
-                                AND operate = 'create'
-                                AND mt1.std_id = mt.std_id ) ) AS gz
-                        GROUP BY  std_id ) AS zb
-                            ON a1.std_id = zb.std_id
-                                AND a1.order_no = zb.order_no
-                        UNION
-                        SELECT DISTINCT ${tempFields}
-                        FROM ${tableTempName} a1
-                        LEFT JOIN maintain_detail md
-                            ON md.pre_merge_id = a1.id
-                        LEFT JOIN maintain m
-                            ON m.id = md.parent_id
-                        LEFT JOIN
-                            (SELECT DISTINCT mt1.std_id
-                            FROM ${tableTempName} mt1
-                            LEFT JOIN maintain_detail md
-                                ON md.pre_merge_id = mt1.id
-                            LEFT JOIN maintain m
-                                ON m.id = md.parent_id
-                            WHERE m.order_no <= ${fromOrderNo}
-                                    AND m.order_no > ${toOrderNo}
-                                    AND m.table_name = '${tableName}'
-                                    AND (operate = 'create'
-                                    OR operate = 'update') ) zb
-                                ON zb.std_id = a1.std_id
-                            WHERE zb.std_id is null
-                                    AND md.operate = 'delete'
-                                    AND m.order_no <= ${fromOrderNo}
-                                    AND m.order_no > ${toOrderNo}
-                                    AND m.table_name = '${tableName}' ) a
-                        WHERE ${where}
-
-        ]]>
-    </select>
-
-    <select id="getCountByMaxVersion" resultType="java.lang.Long" statementType="STATEMENT">
-       <![CDATA[
-
-       select  count(1) from (
-       SELECT ${tempFields}, md.operate, f.`status` from ${tableTempName} a1
-        LEFT JOIN maintain_detail md on md.pre_merge_id = a1.id
+        select count(1) from (
+        SELECT
+         ${A1fields}
+        from (
+        SELECT ${fields} from ${tableName} m
+        WHERE NOT EXISTS (
+          SELECT std_id FROM  ${tableTempName} tm
+          LEFT JOIN maintain_detail ON tm.id = maintain_detail.pre_merge_id
+		  LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+		  LEFT JOIN flows f on maintain.flow_id = f.id
+		  WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+		  and  maintain.table_name = '${tableName}'
+		  AND f.status = 'open'
+		  and operate = 'create'
+		  AND tm.std_id = m.id
+		  ) ) a1
+		LEFT JOIN
+		(
+		SELECT   ${tempHFields} from ${tableTempName} h
+        LEFT JOIN maintain_detail md on md.pre_merge_id = h.id
         LEFT JOIN maintain m on m.id = md.parent_id
-        LEFT JOIN flows f on flow_id = f.id
-        WHERE order_no > ${fromOrderNo} and f.id is null
-        UNION
-        SELECT  ${tempFields}, md.operate, f.`status` from ${tableTempName} a1
-        LEFT JOIN maintain_detail md on md.pre_merge_id = a1.id
-        LEFT JOIN maintain m on m.id = md.parent_id
-        LEFT JOIN flows f on flow_id = f.id
-        WHERE order_no > ${fromOrderNo} and f.`status` = 'working'
-
-        union
-        SELECT  ${A1fields}, '', '' from ${tableName} a1
-        LEFT JOIN
-        (
-        SELECT DISTINCT std_id from ${tableTempName} mt
+        INNER JOIN (
+        SELECT MIN(m.order_no) as order_no, mt.std_id FROM ${tableTempName} mt
         LEFT JOIN maintain_detail md on md.pre_merge_id = mt.id
         LEFT JOIN maintain m on m.id = md.parent_id
-        LEFT JOIN flows f on flow_id = f.id
-        WHERE order_no > ${fromOrderNo} and f.id is null
+        LEFT JOIN flows f on m.flow_id = f.id
+        WHERE m.order_no <= ${fromOrderNo} and m.order_no > ${toOrderNo} and  m.table_name = '${tableName}'
+        and operate = 'update'
+        AND f.status = 'open'
+        GROUP BY mt.std_id
+        ) a on a.order_no = m.order_no and a.std_id = h.std_id
+		)a2 on a1.id = a2.id WHERE  a2.id is null
         UNION
-        SELECT DISTINCT std_id  from ${tableTempName} mt
+        SELECT
+         ${A2fields}
+        from (
+        SELECT ${fields} from ${tableName} m
+        WHERE NOT EXISTS (
+          SELECT std_id FROM  ${tableTempName} tm
+          LEFT JOIN maintain_detail ON tm.id = maintain_detail.pre_merge_id
+		  LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+		  LEFT JOIN flows f on maintain.flow_id = f.id
+		  WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+		   and maintain.table_name = '${tableName}'
+		   AND f.status = 'open'
+		  and operate = 'create'
+		  AND tm.std_id = m.id
+		  ) ) a1
+		LEFT JOIN
+		(
+		SELECT   ${tempHFields} from ${tableTempName} h
+        LEFT JOIN maintain_detail md on md.pre_merge_id = h.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        INNER JOIN (
+        SELECT MIN(m.order_no) as order_no, mt.std_id FROM ${tableTempName} mt
         LEFT JOIN maintain_detail md on md.pre_merge_id = mt.id
         LEFT JOIN maintain m on m.id = md.parent_id
-        LEFT JOIN flows f on flow_id = f.id
-        WHERE order_no > ${fromOrderNo} and f.`status` = 'working'
-        ) a on a.std_id  = a1.id where a.std_id is null
+        LEFT JOIN flows f on m.flow_id = f.id
+        WHERE m.order_no <= ${fromOrderNo} and m.order_no > ${toOrderNo}  and m.table_name = '${tableName}'
+        and operate = 'update'
+        AND f.status = 'open'
+        GROUP BY mt.std_id
+        ) a on a.order_no = m.order_no and a.std_id = h.std_id
+		)a2 on a1.id = a2.id WHERE  a2.id is not null
+		UNION
+		SELECT ${tempFields} FROM maintain_detail md
+        LEFT JOIN maintain ON maintain.id = md.parent_id
+        LEFT JOIN ${tableTempName} mt on mt.id = md.pre_merge_id
+        LEFT JOIN flows f on maintain.flow_id = f.id
+        WHERE maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+        and  maintain.table_name = '${tableName}'
+        AND f.status = 'open'
+        AND operate = 'delete'
+        AND NOT EXISTS (
+            SELECT * FROM maintain_detail
+            LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+            LEFT JOIN ${tableTempName} mt1 on mt1.id = maintain_detail.pre_merge_id
+            LEFT JOIN flows f on maintain.flow_id = f.id
+            WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+            AND operate = 'create'
+            AND f.status = 'open'
+            AND mt.std_id = mt1.std_id
+            and  maintain.table_name = '${tableName}'
+        )
         )a where  ${where}
-
-        ]]>
+         ]]>
     </select>
 
-    <insert id="insert" statementType="STATEMENT">
+    <select id="getCountByMaxVersion" resultType="java.lang.Long" statementType="STATEMENT" >
+       <![CDATA[
+        select count(1) from (
+        SELECT
+         ${A1fields}, '' as operate, '' as status from (
+        SELECT ${fields} from ${tableName} m
+        WHERE NOT EXISTS (
+          SELECT std_id FROM  ${tableTempName} tm
+          LEFT JOIN maintain_detail ON tm.id = maintain_detail.pre_merge_id
+		  LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+		  WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+		  and  maintain.table_name = '${tableName}'
+		  AND tm.std_id = m.id
+		  ) ) a1
+		LEFT JOIN
+		(
+		SELECT   ${tempHFields} from ${tableTempName} h
+        LEFT JOIN maintain_detail md on md.pre_merge_id = h.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        INNER JOIN (
+        SELECT max(m.order_no) as order_no, mt.std_id FROM ${tableTempName} mt
+        LEFT JOIN maintain_detail md on md.pre_merge_id = mt.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        WHERE m.order_no <= ${fromOrderNo} and m.order_no > ${toOrderNo}
+        and  m.table_name = '${tableName}'
+        and operate = 'update'
+        GROUP BY mt.std_id
+        ) a on a.order_no = m.order_no and a.std_id = h.std_id
+		)a2 on a1.id = a2.id WHERE  a2.id is null
+        UNION
+        SELECT
+         ${A2fields}, 'update' as operate, a2.status as status
+        from (
+        SELECT ${fields} from ${tableName} m
+        ) a1
+		LEFT JOIN
+		(
+		SELECT   ${tempHFields}, f.status from ${tableTempName} h
+        LEFT JOIN maintain_detail md on md.pre_merge_id = h.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        LEFT JOIN flows f on m.flow_id = f.id
+        INNER JOIN (
+        SELECT max(m.order_no) as order_no, mt.std_id FROM ${tableTempName} mt
+        LEFT JOIN maintain_detail md on md.pre_merge_id = mt.id
+        LEFT JOIN maintain m on m.id = md.parent_id
+        WHERE m.order_no <= ${fromOrderNo} and m.order_no > ${toOrderNo}
+        and  m.table_name = '${tableName}'
+        and operate = 'update'
+        GROUP BY mt.std_id
+        ) a on a.order_no = m.order_no and a.std_id = h.std_id
+		)a2 on a1.id = a2.id WHERE  a2.id is not null
+		UNION
+		SELECT ${tempFields}, 'create' as operate, f.status as status FROM maintain_detail md
+        LEFT JOIN maintain ON maintain.id = md.parent_id
+        LEFT JOIN flows f on maintain.flow_id = f.id
+        LEFT JOIN ${tableTempName} mt on mt.id = md.pre_merge_id
+        WHERE maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+        AND   maintain.table_name = '${tableName}'
+        AND operate = 'create'
+        AND NOT EXISTS (
+            SELECT * FROM maintain_detail
+            LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+            LEFT JOIN ${tableTempName} mt1 on mt1.id = maintain_detail.pre_merge_id
+            WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+            AND operate = 'delete'
+            AND mt.std_id = mt1.std_id
+            AND   maintain.table_name = '${tableName}'
+        )
+        UNION
+		SELECT ${tempFields}, 'delete' as operate, f.status as status FROM maintain_detail md
+        LEFT JOIN maintain ON maintain.id = md.parent_id
+        LEFT JOIN flows f on maintain.flow_id = f.id
+        LEFT JOIN ${tableTempName} mt on mt.id = md.pre_merge_id
+        WHERE maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+         AND   maintain.table_name = '${tableName}'
+         AND operate = 'delete'
+        AND NOT EXISTS (
+            SELECT * FROM maintain_detail
+            LEFT JOIN maintain ON maintain.id = maintain_detail.parent_id
+            LEFT JOIN ${tableTempName} mt1 on mt1.id = maintain_detail.pre_merge_id
+            WHERE  maintain.order_no <= ${fromOrderNo} and maintain.order_no > ${toOrderNo}
+            AND operate = 'create'
+            AND mt.std_id = mt1.std_id
+            and  maintain.table_name = '${tableName}'
+        )
+        )a where  ${where}
+         ]]>
+    </select>
+
+    <insert id="insert"  statementType="STATEMENT" >
        INSERT INTO ${tableName} (${fields}) VALUES ${values}
     </insert>
 
-    <insert id="insertOneSelect" statementType="STATEMENT">
+    <insert id="insertOneSelect"  statementType="STATEMENT" >
         INSERT INTO ${tableName} (${fields})
         select ${selectFields} from (${selectSql}) a
     </insert>
@@ -342,19 +427,27 @@
 
 
     <delete id="deleteTempByMaintainId">
-        DELETE tm FROM ${tableTempName} tm , maintain_detail md WHERE tm.id = md.pre_merge_id
-        and md.parent_id = ${maintainId};
+        DELETE FROM ${tableTempName}  where EXISTS (
+        SELECT pre_merge_id from maintain_detail d
+        where parent_id = ${maintainId} and d.pre_merge_id = ${tableTempName}.id
+        )
     </delete>
 
     <!-- temp 2 standrad-->
-    <insert id="tempCreate2std" statementType="STATEMENT">
+    <insert id="tempCreate2std" statementType="STATEMENT"  >
         INSERT INTO ${tableName}
         SELECT
         ${tempFields}
          from ${tableTempName} t
-         inner join maintain_detail md on t.id = md.pre_merge_id
-         where  md.parent_id = ${maintainId} and md.operate = 'create'
-
+         where
+         EXISTS
+        (
+        SELECT  std_id from ${tableTempName} tm
+        LEFT JOIN maintain_detail on tm.id = maintain_detail.pre_merge_id
+        WHERE maintain_detail.parent_id = ${maintainId}
+        and operate = 'create'
+        and tm.id = t.id
+        )
     </insert>
 
     <select id="getTempIdByStdId" statementType="STATEMENT" resultType="java.lang.String">
@@ -364,7 +457,7 @@
 
     </select>
 
-    <insert id="insertMatintainDetailFromTemp" statementType="STATEMENT">
+    <insert id="insertMatintainDetailFromTemp" statementType="STATEMENT" >
 
         INSERT INTO maintain_detail
         SELECT md5(uuid()) as id, ${maintainId} as parent_id, ${operate} as operate, id as pre_merge_id, NOW() as create_time
@@ -372,7 +465,7 @@
 
     </insert>
 
-    <insert id="insertMatintainDetailFromStandrad" statementType="STATEMENT">
+    <insert id="insertMatintainDetailFromStandrad" statementType="STATEMENT" >
 
         INSERT INTO maintain_detail
         SELECT md5(uuid()) as id, ${maintainId} as parent_id, 'delete' as operate, id as pre_merge_id, NOW() as create_time
@@ -380,14 +473,14 @@
 
     </insert>
 
-    <update id="updateStdId" statementType="STATEMENT">
+    <update id="updateStdId" statementType="STATEMENT" >
 
         update ${tableTempName}
         set std_id = md5(uuid()) WHERE deal = 0
 
     </update>
 
-    <insert id="insertRecordFromStandrad" statementType="STATEMENT">
+    <insert id="insertRecordFromStandrad" statementType="STATEMENT" >
          INSERT INTO ${recordTableName}
         SELECT ${tempFieldList}, 0 as deal
         from  ${tableName}
@@ -398,13 +491,18 @@
         SELECT
         ${fields}
         from ${tableTempName} t
-        inner join maintain_detail md on md.pre_merge_id = t.id
-        where md.parent_id = ${maintainId}
+        where
+        EXISTS
+        (
+        SELECT  pre_merge_id from maintain_detail
+        LEFT JOIN maintain on maintain.id = maintain_detail.parent_id
+        WHERE maintain.id = ${maintainId}
         and operate = ${operate}
-
+        and maintain_detail.pre_merge_id = t.id
+        )
     </select>
 
-    <update id="updateRecordByMaintainId" statementType="STATEMENT">
+    <update id="updateRecordByMaintainId" statementType="STATEMENT" >
          update ${tableTempName}
         INNER JOIN maintain_detail on ${tableTempName}.id = maintain_detail.pre_merge_id
         set ${updateSegment}
@@ -412,7 +510,7 @@
 
     </update>
 
-    <delete id="deleteRecordByMaintainId" statementType="STATEMENT">
+    <delete id="deleteRecordByMaintainId" statementType="STATEMENT" >
         DELETE  ${tableTempName} from  ${tableTempName}
         INNER JOIN maintain_detail on maintain_detail.pre_merge_id =  ${tableTempName}.id
         WHERE maintain_detail.parent_id = ${maintainId} and  ${tableTempName}.std_id = ${stdId}
@@ -428,32 +526,36 @@
         select * from ACT_ID_MEMBERSHIP where USER_ID_ = #{userId}
     </select>
 
-    <select id="getOneTempFieldDataByMaintainExtent" statementType="STATEMENT" resultType="java.util.Map">
+    <select id="getOneTempFieldDataByMaintainExtent" statementType="STATEMENT"   resultType="java.util.Map">
          <![CDATA[
-
-        SELECT DISTINCT ${field} FROM  ${tempTableName} t
-        LEFT JOIN maintain_detail md on md.pre_merge_id = t.id
-        LEFT JOIN maintain m on m.id = md.parent_id
-
-        WHERE
-         m.table_name = ${tableName}
-         AND m.order_no >= ${fromOrderNo}
-         AND m.order_no <  ${toOrderNo}
+        SELECT DISTINCT ${field} FROM  ${tempTableName} t  WHERE  EXISTS (
+          SELECT pre_merge_id  FROM ( SELECT  pre_merge_id FROM  maintain_detail  WHERE EXISTS (
+            SELECT  id  FROM  ( SELECT  id  FROM  `maintain`  WHERE
+              table_name = ${tableName}
+              AND order_no >= ${fromOrderNo}
+              AND order_no <  ${toOrderNo}
+              ) a
+            WHERE
+            a.id = maintain_detail.parent_id  )
+          ) a
+        WHERE t.id = a.pre_merge_id)
 
         ]]>
     </select>
 
-    <select id="getTempDataByMaintainExtent" statementType="STATEMENT" resultType="java.util.Map">
+    <select id="getTempDataByMaintainExtent" statementType="STATEMENT"   resultType="java.util.Map">
         <![CDATA[
-     SELECT  t.* FROM  ${tempTableName} t
-            LEFT JOIN maintain_detail md on md.pre_merge_id = t.id
-            LEFT JOIN maintain m on m.id = md.parent_id
-
+        SELECT *  FROM  ${tempTableName} t  WHERE  EXISTS (
+          SELECT pre_merge_id  FROM ( SELECT  pre_merge_id FROM  maintain_detail  WHERE EXISTS (
+            SELECT  id  FROM  ( SELECT  id  FROM  `maintain`  WHERE
+              table_name = ${tableName}
+              AND order_no >= ${fromOrderNo}
+              AND order_no <  ${toOrderNo}
+              ) a
             WHERE
-             m.table_name = ${tableName}
-             AND m.order_no >= ${fromOrderNo}
-             AND m.order_no <  ${toOrderNo}
-
+            a.id = maintain_detail.parent_id  )
+          ) a
+        WHERE t.id = a.pre_merge_id)
 
         ]]>
     </select>

--
Gitblit v1.8.0