From 2893347bf72477c4d108e8589a0f61e3e97a990c Mon Sep 17 00:00:00 2001
From: kimi <kimi42345@gmail.com>
Date: 星期三, 27 五月 2020 09:56:56 +0800
Subject: [PATCH] bak  更新后

---
 src/main/resources/mapping/TableInfoMapper.xml |  697 +++++++++++++++++++++++++++------------------------------
 1 files changed, 330 insertions(+), 367 deletions(-)

diff --git a/src/main/resources/mapping/TableInfoMapper.xml b/src/main/resources/mapping/TableInfoMapper.xml
index 53f12ad..8a6f8e0 100644
--- a/src/main/resources/mapping/TableInfoMapper.xml
+++ b/src/main/resources/mapping/TableInfoMapper.xml
@@ -6,390 +6,318 @@
         show TABLES like #{tableName}
     </select>
 
+    <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>
+
     <select id="getTableField" parameterType="String" resultType="com.highdatas.mdm.entity.TableSchemaResult">
-        select COLUMN_NAME as fieldName,DATA_TYPE as dbType from information_schema.COLUMNS where table_name = #{tableName} and table_schema = (select database())
+        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 COLUMN_NAME as fieldName,DATA_TYPE as dbType from information_schema.COLUMNS where table_name = #{tableName} and table_schema = #{dbName}
+    <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="selectByPageByVersion" 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">
         <![CDATA[
-        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
-        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 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
+         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
-         ${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 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 ${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" >
+    <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
+
+       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
         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 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
         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
+        LEFT JOIN flows f on flow_id = f.id
+        WHERE order_no > ${fromOrderNo} and f.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
+        SELECT DISTINCT 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}'
-        )
+        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
         )a where  ${where} ${limit}
-         ]]>
+
+        ]]>
     </select>
 
-    <select id="select" resultType="java.util.Map" statementType="STATEMENT" >
+    <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">
+    <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
 
-        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 (
-        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 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
+       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
-         ${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 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 ${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" >
+    <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
+
+       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
         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 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
         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
+        LEFT JOIN flows f on flow_id = f.id
+        WHERE order_no > ${fromOrderNo} and f.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
+        SELECT DISTINCT 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}'
-        )
+        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
         )a where  ${where}
-         ]]>
+
+        ]]>
     </select>
 
-    <insert id="insert"  statementType="STATEMENT" >
+    <insert id="insert" statementType="STATEMENT">
        INSERT INTO ${tableName} (${fields}) VALUES ${values}
+    </insert>
+
+    <insert id="insertOneSelect" statementType="STATEMENT">
+        INSERT INTO ${tableName} (${fields})
+        select ${selectFields} from (${selectSql}) a
     </insert>
 
     <update id="update">
@@ -397,32 +325,36 @@
        where ${where}
     </update>
 
+    <update id="updateJoin">
+        update  ${tableName}
+        ${joinTableSegment}
+        set ${updateSegment}
+        where ${where}
+    </update>
+
     <delete id="delete">
         DELETE FROM ${tableName} where ${where}
     </delete>
 
+    <select id="createIdx">
+       CREATE INDEX ${idxName} ON ${tableName} (${fields})
+    </select>
+
+
     <delete id="deleteTempByMaintainId">
-        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 tm FROM ${tableTempName} tm , maintain_detail md WHERE tm.id = md.pre_merge_id
+        and md.parent_id = ${maintainId};
     </delete>
 
     <!-- temp 2 standrad-->
-    <insert id="tempCreate2std" statementType="STATEMENT"  >
+    <insert id="tempCreate2std" statementType="STATEMENT">
         INSERT INTO ${tableName}
         SELECT
         ${tempFields}
          from ${tableTempName} t
-         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
-        )
+         inner join maintain_detail md on t.id = md.pre_merge_id
+         where  md.parent_id = ${maintainId} and md.operate = 'create'
+
     </insert>
 
     <select id="getTempIdByStdId" statementType="STATEMENT" resultType="java.lang.String">
@@ -432,7 +364,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
@@ -440,7 +372,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
@@ -448,14 +380,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}
@@ -466,18 +398,13 @@
         SELECT
         ${fields}
         from ${tableTempName} t
-        where
-        EXISTS
-        (
-        SELECT  pre_merge_id from maintain_detail
-        LEFT JOIN maintain on maintain.id = maintain_detail.parent_id
-        WHERE maintain.id = ${maintainId}
+        inner join maintain_detail md on md.pre_merge_id = t.id
+        where md.parent_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}
@@ -485,13 +412,49 @@
 
     </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}
     </delete>
 
     <select id="selectActMemberShip" parameterType="java.util.Map" resultType="java.util.Map">
-        select * from act_id_membership where USER_ID_ = #{userId} and GROUP_ID_ = #{roleId}
+        select * from ACT_ID_MEMBERSHIP where USER_ID_ = #{userId} and GROUP_ID_ = #{roleId}
+    </select>
+    <select id="selectActMemberShipByRole" parameterType="java.util.Map" resultType="java.util.Map">
+        select * from ACT_ID_MEMBERSHIP where GROUP_ID_ = #{roleId}
+    </select>
+    <select id="selectActMemberShipByUser" parameterType="java.util.Map" resultType="java.util.Map">
+        select * from ACT_ID_MEMBERSHIP where USER_ID_ = #{userId}
+    </select>
+
+    <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>
+
+    <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
+
+            WHERE
+             m.table_name = ${tableName}
+             AND m.order_no >= ${fromOrderNo}
+             AND m.order_no <  ${toOrderNo}
+
+
+        ]]>
     </select>
 </mapper>

--
Gitblit v1.8.0