kimi
2020-05-27 2893347bf72477c4d108e8589a0f61e3e97a990c
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,19 +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}
@@ -486,12 +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>
    <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>