<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.highdatas.mdm.mapper.TableInfoMapper"> <select id="selectTableByName" parameterType="java.util.Map" resultType="String"> show TABLES like #{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> <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> <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" > <![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 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> <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} 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 count(1) from ${tableName} where ${where} </select> <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 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> <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> <update id="update"> update ${tableName} set ${updateSegment} where ${where} </update> <delete id="delete"> DELETE FROM ${tableName} where ${where} </delete> <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> <!-- temp 2 standrad--> <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 ) </insert> <select id="getTempIdByStdId" statementType="STATEMENT" resultType="java.lang.String"> SELECT tm.id from ${tableTempName} tm inner JOIN maintain_detail md on md.pre_merge_id = tm.id where tm.std_id = ${stdId} and md.parent_id = ${maintainId} </select> <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 from ${tableTempName} m WHERE m.deal = 0 </insert> <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 from ${tableTempName} m WHERE m.deal = 0 </insert> <update id="updateStdId" statementType="STATEMENT" > update ${tableTempName} set std_id = md5(uuid()) WHERE deal = 0 </update> <insert id="insertRecordFromStandrad" statementType="STATEMENT" > INSERT INTO ${recordTableName} SELECT ${tempFieldList}, 0 as deal from ${tableName} </insert> <select id="tempByOperate" statementType="STATEMENT" resultType="java.util.Map"> 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} and operate = ${operate} and maintain_detail.pre_merge_id = t.id ) </select> <update id="updateRecordByMaintainId" statementType="STATEMENT" > update ${tableTempName} INNER JOIN maintain_detail on ${tableTempName}.id = maintain_detail.pre_merge_id set ${updateSegment} WHERE maintain_detail.parent_id = ${maintainId} </update> <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="getOneTempFieldDataByMaintainExtent" statementType="STATEMENT" resultType="java.util.Map"> <![CDATA[ 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"> <![CDATA[ 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 a.id = maintain_detail.parent_id ) ) a WHERE t.id = a.pre_merge_id) ]]> </select> </mapper>