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})
merge into ${accessTableName} cma
using (select cmrr.pk_member,
case
when cmrr.city = 0 and cmrr.county = 0 then 6
when cmrr.city != 0 and cmrr.county = 0 then 7
when cmrr.city != 0 and cmrr.county != 0 then 8
end assess_type,
case
when cmrr.city = 0 and cmrr.county = 0 then #{province.pkAwards}
when cmrr.city != 0 and cmrr.county = 0 then #{city.pkAwards}
when cmrr.city != 0 and cmrr.county != 0 then #{county.pkAwards}
end pk_awards,
case
when cmrr.city = 0 and cmrr.county = 0 then #{province.smallAssess}
when cmrr.city != 0 and cmrr.county = 0 then #{city.smallAssess}
when cmrr.city != 0 and cmrr.county != 0 then #{county.smallAssess}
end assess_target,
case
when #{assessDate} >= cmrr.creation_time then 2
else 1
end assess_status,
100000000 pk_creator,
#{currentSettleDate} end_date
from cu_member_retail_region cmrr
where cmrr.del_flag = 0
and cmrr.effective = 0) tmp
on (cma.pk_member = tmp.pk_member and cma.assess_type = tmp.assess_type and cma.del_flag = 0)
when not matched then
insert (
pk_member,
assess_type,
pk_awards,
assess_target,
assess_status,
pk_creator,
end_date)
values (
tmp.pk_member,
tmp.assess_type,
tmp.pk_awards,
tmp.assess_target,
tmp.assess_status,
tmp.pk_creator,
tmp.end_date)
merge into ${accessTableName} cma
using (select t.pk_member,
case
when t.a_sum_pv > t.b_sum_pv then
t.b_sum_pv
else
t.a_sum_pv
end small_pv
from (select a.pk_member,
nvl(a.a_sum_pv, 0) + nvl(a.rep_a_sum_pv, 0) -
nvl(b.a_sum_pv, 0) - nvl(b.rep_a_sum_pv, 0) a_sum_pv,
nvl(a.b_sum_pv, 0) + nvl(a.rep_b_sum_pv, 0) -
nvl(b.b_sum_pv, 0) - nvl(b.rep_b_sum_pv, 0) b_sum_pv
from (select cms.pk_member,
cms.a_sum_pv,
cms.b_sum_pv,
cms.rep_a_sum_pv,
cms.rep_b_sum_pv
from ${currentSettleTableName} cms
where cms.pk_member in
(select cma.pk_member
from ${accessTableName} cma
where cma.del_flag = 0
and cma.assess_type in (6, 7, 8))) a
left join (select cms.pk_member,
cms.a_sum_pv,
cms.b_sum_pv,
cms.rep_a_sum_pv,
cms.rep_b_sum_pv
from ${beforeMonthSettleTableName} cms
where cms.pk_member in
(select cma.pk_member
from ${accessTableName} cma
where cma.del_flag = 0
and cma.assess_type in (6, 7, 8))) b
on a.pk_member = b.pk_member) t) tmp
on (cma.pk_member = tmp.pk_member and cma.assess_type in (6, 7, 8) and cma.del_flag = 0)
when matched then
update set cma.month_add = tmp.small_pv,
cma.ASSESS_STATUS =
(case
when tmp.small_pv >= cma.assess_target then
1
else
2
end)
merge into cu_member_retail_region cmrr
using (select cmrr.pk_id
from ${accessTableName} cma
left join (select t.pk_id,
t.pk_member,
case
when t.city = 0 and t.county = 0 then 6
when t.city != 0 and t.county = 0 then 7
when t.city != 0 and t.county != 0 then 8
end assess_type
from CU_MEMBER_RETAIL_REGION t
where t.del_flag = 0
and t.effective = 0) cmrr
on cmrr.pk_member = cma.pk_member and cmrr.assess_type = cma.assess_type
where cma.del_flag = 0
and cma.assess_type in (6, 7, 8)
and cma.assess_status = 2
) tmp
on (cmrr.pk_id = tmp.pk_id)
when matched then
update set cmrr.effective = 1,
cmrr.effective_end_date = #{currentSettleDate}