pk_member NUMBER(20) not null, period NUMBER(6) default 0 not null, settle_month VARCHAR2(10), assess_type NUMBER(2) not null, pk_awards NUMBER(6) default 1 not null, assess_target NUMBER(17,6) default 0 not null, is_examine NUMBER(1) default 1 not null, assess_status NUMBER(2) not null, month_balance NUMBER(17,6) default 0 not null, month_add NUMBER(17,6) default 0 not null, cur_month_add NUMBER(17,6) default 0 not null, month_used NUMBER(17,6) default 0 not null, month_surplus NUMBER(17,6) default 0 not null, del_flag NUMBER(1) default 0 not null, creation_time DATE default sysdate not null, modified_time DATE, pk_country NUMBER(4) default 1 not null, pk_creator NUMBER(20) not null, pk_modified NUMBER(20), start_date DATE, end_date DATE create table ${tableName} ( ) create index ${tableName}_MEMBER on ${tableName} ( PK_MEMBER, ASSESS_TYPE ) merge into ${tableName} a using ( select pk_member, #{period} period, #{month} settle_month, 0 assess_type, pk_awards, nvl(b.purchase_check, 0) ASSESS_TARGET, 1 IS_EXAMINE, 2 assess_status, ct.pk_settle_country PK_COUNTRY, 1 pk_creator from ${sourceTableName} ct left join bd_awards b on ct.pk_awards = b.pk_id where category = 0 ) b on (a.pk_member = b.pk_member and a.period = b.period and a.assess_type = b.assess_type) WHEN MATCHED THEN update set a.SETTLE_MONTH = b.SETTLE_MONTH,a.PK_AWARDS = b.PK_AWARDS,a.ASSESS_TARGET = b.ASSESS_TARGET, a.IS_EXAMINE = b.IS_EXAMINE,a.ASSESS_STATUS = b.ASSESS_STATUS when not matched then insert (PK_MEMBER, period, SETTLE_MONTH, ASSESS_TYPE, PK_AWARDS, ASSESS_TARGET, IS_EXAMINE, ASSESS_STATUS, PK_COUNTRY, PK_CREATOR) values (b.PK_MEMBER, b.period, b.SETTLE_MONTH, b.ASSESS_TYPE, b.PK_AWARDS, b.ASSESS_TARGET, b.IS_EXAMINE, b.ASSESS_STATUS, b.PK_COUNTRY, b.PK_CREATOR) merge into ${tableName} a using ( select pk_member, #{period} period, #{month} settle_month, 0 assess_type, pk_range_awards pk_awards, nvl(b.purchase_check, 0) ASSESS_TARGET, 1 IS_EXAMINE, 2 assess_status, ct.pk_settle_country PK_COUNTRY, 1 pk_creator from ${sourceTableName} ct left join bd_range_awards b on ct.pk_range_awards = b.pk_id where category = 0 ) b on (a.pk_member = b.pk_member and a.period = b.period and a.assess_type = b.assess_type) WHEN MATCHED THEN update set a.SETTLE_MONTH = b.SETTLE_MONTH,a.PK_AWARDS = b.PK_AWARDS,a.ASSESS_TARGET = b.ASSESS_TARGET, a.IS_EXAMINE = b.IS_EXAMINE,a.ASSESS_STATUS = b.ASSESS_STATUS when not matched then insert (PK_MEMBER, period, SETTLE_MONTH, ASSESS_TYPE, PK_AWARDS, ASSESS_TARGET, IS_EXAMINE, ASSESS_STATUS, PK_COUNTRY, PK_CREATOR) values (b.PK_MEMBER, b.period, b.SETTLE_MONTH, b.ASSESS_TYPE, b.PK_AWARDS, b.ASSESS_TARGET, b.IS_EXAMINE, b.ASSESS_STATUS, b.PK_COUNTRY, b.PK_CREATOR) merge into ${tableName} a using (select pk_member, assess_type, month_surplus from ${beforeTableName} cs inner join cu_member cm on cs.pk_member = cm.pk_id and cm.del_flag = 0 where period = #{sourcePeriod} and assess_type = #{assessType} and cm.system_type = 0) b on (a.pk_member = b.pk_member and a.assess_type = b.assess_type) when matched then update set a.month_balance = b.month_surplus where a.del_flag= 0 and a.period= #{period} merge into ${tableName} a using (select pk_member,#{period} period,#{assessType} assess_type,sum(order_achieve) order_achieve from( select pk_member,(case when #{assessType} = 0 then order_achieve else order_ass_achieve end) order_achieve from sa_order where del_flag = 0 and order_status = 1 and order_type in #{item} and pay_time >= #{startDate, jdbcType=DATE} and pay_time < #{endDate, jdbcType=DATE} ) group by pk_member ) b on (a.pk_member = b.pk_member and a.period= b.period and a.assess_type= b.assess_type) when matched then update set a.MONTH_ADD=b.order_achieve update ${tableName} set month_surplus = month_balance + month_add where del_flag = 0 and period = #{period} update ${tableName} set assess_status = 0, month_used = assess_target, month_surplus = month_balance + month_add - assess_target where del_flag = 0 and assess_status = 2 and period = #{period} and assess_target <= month_balance + month_add merge into ${tableName} a using ( select distinct pk_member, #{period} period, 0 assess_type from ( select pk_id pk_member from cu_member where del_flag = 0 and category = 0 and pay_status = 1 and pay_time >= #{startDate, jdbcType=DATE} and pay_time < #{endDate, jdbcType=DATE} union select pk_member from cu_member_awards where del_flag = 0 and purchase_status = 0 and period >= #{startPeriod} and period < #{endPeriod} union select pk_member from ${settleTableName} ct inner join bd_awards ba on ct.pk_awards = ba.pk_id where ct.purchase_status = 0 and ba.purchase_check > 0) ) b on (a.pk_member = b.pk_member and a.period = b.period and a.assess_type = b.assess_type) when matched then update set a.is_examine = 0 merge into ${settleTableName} a using ( select distinct pk_id pk_member from cu_member where del_flag =0 and category =0 and pay_status = 1 and pay_time >= #{startDate, jdbcType=DATE} and pay_time < #{endDate, jdbcType=DATE} ) b on (a.pk_member = b.pk_member) when matched then update set a.purchase_status=0 delete from ${tableName} where period = #{period} and del_flag = 0 merge into ${accessTableName} cma using ( select cm.pk_id from cu_member cm where cm.del_flag = 0 and cm.pay_status = 1 and cm.pay_time >= #{monthStartDate} and #{endDate} >= cm.pay_time ) tmp on (cma.pk_member = tmp.pk_id and assess_type = 5 and cma.del_flag = 0) when not matched then insert (pk_member, assess_type, is_examine, assess_status, pk_creator, start_date, end_date) values (tmp.pk_id, 5, 0, 1, tmp.pk_id, #{startDate}, #{endDate}) merge into ${accessTableName} cma using (select tmp.pk_member, tmp.pay_time from (select so.pk_member, min(so.pay_time) pay_time from sa_order so where so.del_flag = 0 and so.order_type = 3 and so.order_status = 1 and so.order_achieve > 0 and so.pay_time >= #{startDate} and #{endDate} >= so.pay_time group by so.pk_member) tmp left join ${accessTableName} cma on cma.pk_member = tmp.pk_member and cma.assess_type = 0 and cma.del_flag = 0 where cma.start_date is null or tmp.pay_time > cma.start_date) tmp on (cma.pk_member = tmp.pk_member and assess_type = 5 and cma.del_flag = 0 and cma.is_examine = 1) when matched then update set cma.start_date = tmp.pay_time when not matched then insert (pk_member, assess_type, is_examine, assess_status, pk_creator, start_date, end_date) values (tmp.pk_member, 5, 1, 0, tmp.pk_member, trunc(tmp.pay_time), #{endDate})