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})