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