java-base-app/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/detail/CuMemberAssessMapper.xml

529 lines
21 KiB
XML

<?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.hzs.bonus.detail.mapper.CuMemberAssessMapper">
<!-- 通用查询映射结果 -->
<resultMap id="CuMemberAssess" type="com.hzs.common.domain.member.ext.CuMemberAssessExt">
<result column="DEL_FLAG" property="delFlag"/>
<result column="PK_CREATOR" property="pkCreator"/>
<result column="CREATION_TIME" property="creationTime"/>
<result column="PK_MODIFIED" property="pkModified"/>
<result column="MODIFIED_TIME" property="modifiedTime"/>
<result column="PK_COUNTRY" property="pkCountry"/>
<result column="PK_MEMBER" property="pkMember"/>
<result column="PERIOD" property="period"/>
<result column="SETTLE_MONTH" property="settleMonth"/>
<result column="ASSESS_TYPE" property="assessType"/>
<result column="PK_ORIGINAL_AWARDS" property="pkOriginalAwards"/>
<result column="PK_AWARDS" property="pkAwards"/>
<result column="ASSESS_TARGET" property="assessTarget"/>
<result column="IS_EXAMINE" property="isExamine"/>
<result column="ASSESS_STATUS" property="assessStatus"/>
<result column="MONTH_BALANCE" property="monthBalance"/>
<result column="MONTH_ADD" property="monthAdd"/>
<result column="CUR_MONTH_ADD" property="curMonthAdd"/>
<result column="MONTH_USED" property="monthUsed"/>
<result column="MONTH_SURPLUS" property="monthSurplus"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="CuMemberAssessColumn">
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
</sql>
<update id="createCuMemberAssessTable">
create table ${tableName}
(
<include refid="CuMemberAssessColumn"></include>
)
</update>
<update id="createCuMemberTableUniqueIndex">
create index
${tableName}_MEMBER
on ${tableName}
(
PK_MEMBER,
ASSESS_TYPE
)
</update>
<insert id="insertRepCuMemberAssess">
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)
</insert>
<insert id="insertRepCuMemberRangeAssess">
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)
</insert>
<update id="updateAssessPeriodBeginByBeforeMonth">
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}
</update>
<update id="updateAssessPeriodAddBySaOrder">
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
<foreach collection="orderTypeList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
and pay_time >= #{startDate, jdbcType=DATE} and pay_time &lt; #{endDate, jdbcType=DATE}
<!-- <if test="assessType == 0">
union all
select pk_member,order_achieve order_achieve from sa_t_order
where del_flag = 0 and order_status = 1 and order_type =21
and pay_time >= #{startDate, jdbcType=DATE} and pay_time &lt; #{endDate, jdbcType=DATE}
</if>-->
)
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>
<update id="updateAssessPeriodExemptBalanceByUsed">
update ${tableName}
set month_surplus = month_balance + month_add
where del_flag = 0
and period = #{period}
</update>
<update id="updateAssessPeriodCheckBalanceByUsed">
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 &lt;= month_balance + month_add
</update>
<update id="updateAssessCuMemberToRepExempt">
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 &lt; #{endDate, jdbcType=DATE}
union
select pk_member
from cu_member_awards
where del_flag = 0
and purchase_status = 0
and period >= #{startPeriod}
and period &lt; #{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
</update>
<update id="updateCuMemberSettleToRepExempt">
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 &lt; #{endDate, jdbcType=DATE}
<!--union
select distinct pk_member from cu_member_awards
where del_flag=0 and purchase_status= 0 and
period >= #{startPeriod} and period &lt; #{endPeriod}-->
) b
on (a.pk_member = b.pk_member)
when matched then
update set a.purchase_status=0
</update>
<delete id="deleteCuMemberAssessByPeriod">
delete
from ${tableName}
where period = #{period}
and del_flag = 0
</delete>
<select id="queryAssessPeriodByRevokeOrder" resultMap="CuMemberAssess">
select sa.pk_id,sa.pk_member,sa.assess_type,sa.assess_target,sa.is_examine,sa.assess_status,
sa.month_balance,sa.month_add,sa.month_used,sa.month_surplus,
st.pk_awards,sa.pk_awards pk_original_awards,sa.pk_country from ${tableName} sa
inner join ${settleTableName} st
on sa.pk_member=st.pk_member
where sa.del_flag= 0 and sa.is_examine = 0 and sa.period = #{period}
and sa.pk_member in
<foreach collection="saOrderList" item="item" open="(" close=")" separator=",">
#{item.pkMember}
</foreach>
</select>
<select id="queryCuMemberAssessByMember" resultMap="CuMemberAssess">
select pk_member, assess_status from ${tableName}
where period= #{period} and assess_type = #{assessType} and assess_status in (0, 1)
and pk_member in
<foreach collection="cuMemberSettleExtList" item="item" open="(" close=")" separator=",">
#{item.pkMember}
</foreach>
</select>
<select id="queryCuMemberShareAssess" resultType="com.hzs.common.domain.member.detail.CuMemberAssess">
select pk_member, PERIOD, PK_AWARDS, assess_status, pk_country
from ${tableName}
where period = #{period}
and assess_type = 1
and assess_status in (0, 1)
and pk_country = 1
union
select ca.pk_member, ca.PERIOD, ca.PK_AWARDS, ca.assess_status, ca.pk_country
from ${tableName} ca
inner join bd_awards ba
on ca.PK_AWARDS = ba.pk_id
where period = #{period}
and assess_type = 0
and assess_status in (0, 1)
and ca.pk_country > 1
and ba.awards_value > 0
</select>
<!-- 会员-考核明细列表-->
<select id="selectAssessList"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
select * from (
SELECT
a.PK_ASSESS pkAssess,
a.PK_MEMBER pkMember,
a.TRADE_TIME tradeTime,
a.PK_ORDER pkOrder,
a.CHANGE_TYPE changeType,
a.TRADE_ACHIEVE tradeAchieve,
0 orderAssAchieve,
0 orderAchieve,
'' orderCode
FROM
CU_MEMBER_ASSESS_DETAIL a
LEFT JOIN ${tableName} b on b.PK_ID=a.PK_ASSESS
WHERE
a.DEL_FLAG = 0
<if test="pkMember != null ">
AND a.PK_MEMBER = #{pkMember}
</if>
<if test="pkCountry != null ">
AND a.PK_COUNTRY = #{pkCountry}
</if>
<if test="changeType != null ">
AND a.CHANGE_TYPE = #{changeType}
</if>
<if test="assessType != null ">
AND b.ASSESS_TYPE = #{assessType}
</if>
<if test="assessStatus != null ">
AND b.ASSESS_STATUS = #{assessStatus}
</if>
<if test="changeType ==null and assessStatus==null ">
UNION ALL
select
null pkAssess,
PK_MEMBER pkMember,
PAY_TIME tradeTime,
null pkOrder,
null changeType,
null tradeAchieve,
ORDER_ASS_ACHIEVE orderAssAchieve,
ORDER_ACHIEVE orderAchieve,
ORDER_CODE orderCode
from SA_ORDER
WHERE
DEL_FLAG = 0
<if test="pkMember != null ">
AND PK_MEMBER = #{pkMember}
</if>
<if test="orderTypeList != null ">
and ORDER_TYPE in
<foreach collection="orderTypeList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="assessType == 0 ">
AND order_achieve > 0
</if>
<if test="assessType == 1 ">
AND ORDER_ASS_ACHIEVE > 0
</if>
<if test="pkCountry != null ">
AND PK_COUNTRY = #{pkCountry}
</if>
<if test="startDate != null">
and PAY_TIME &gt;= #{startDate, jdbcType=DATE}
</if>
<if test="endDate != null">
and PAY_TIME &lt; #{endDate, jdbcType=DATE}
</if>
</if>
)
order by tradeTime desc
</select>
<!--查询会员月度考核-->
<select id="getMemberAssessMonthList"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
SELECT
a.pk_id pkId,
a.SETTLE_MONTH settleMonth,
a.ASSESS_STATUS assessStatus,
a.MONTH_SURPLUS monthSurplus,
a.CREATION_TIME creationTime
FROM
${tableName} a
WHERE
a.DEL_FLAG = 0
<if test="period != null ">
AND a.period=#{period}
</if>
<if test="pkMember != null ">
AND a.PK_MEMBER = #{pkMember}
</if>
<if test="pkCountry != null ">
AND a.PK_COUNTRY = #{pkCountry}
</if>
<if test="assessType != null ">
AND a.ASSESS_TYPE = #{assessType}
</if>
</select>
<!--根据考核类型查询会员订单信息-->
<select id="getOrderByAssessList"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
select PK_MEMBER pkMember,
PAY_TIME tradeTime,
ORDER_ASS_ACHIEVE orderAssAchieve,
ORDER_ACHIEVE orderAchieve,
ORDER_TYPE orderType,
ORDER_CODE orderCode
from SA_ORDER
WHERE
DEL_FLAG = 0
<if test="pkMember != null ">
AND PK_MEMBER = #{pkMember}
</if>
<if test="pkCountry != null ">
AND PK_COUNTRY = #{pkCountry}
</if>
<if test="orderType != null ">
AND ORDER_TYPE = #{orderType}
</if>
<if test="startDate != null">
and PAY_TIME &gt;= #{startDate, jdbcType=DATE}
</if>
<if test="endDate != null">
and PAY_TIME &lt; #{endDate, jdbcType=DATE}
</if>
order by PAY_TIME desc
</select>
<!--查询会员订单考核积分-->
<select id="getOrderAssessList" parameterType="com.hzs.bonus.detail.vo.CuMemberAssessVO"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
SELECT
sum (ORDER_ASS_ACHIEVE) orderAssAchieve,
sum (ORDER_ACHIEVE) orderAchieve
FROM
SA_ORDER a
WHERE
a.DEL_FLAG = 0
<if test="orderTypeList != null ">
AND a.order_type in
<foreach collection="orderTypeList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="pkMember != null ">
AND a.PK_MEMBER = #{pkMember}
</if>
<if test="pkCountry != null ">
AND a.PK_COUNTRY = #{pkCountry}
</if>
<if test="startDate != null">
and a.PAY_TIME &gt;= #{startDate, jdbcType=DATE}
</if>
<if test="endDate != null">
and a.PAY_TIME &lt; #{endDate, jdbcType=DATE}
</if>
</select>
<select id="queryCuMemberAssTotal" resultType="com.hzs.common.domain.member.detail.CuMemberAssess">
select cm.pk_awards pkAwards, count(cm.pk_id) assessStatus
from ${settleTable} cm
inner join bd_awards ba
on cm.pk_awards = ba.pk_id
where period = #{period}
and cm.pk_country = #{pkCountry}
and ASSESS_TYPE = 1
and ASSESS_STATUS in (0, 1)
and ba.awards_value > 0
group by cm.pk_awards
order by pk_awards
</select>
<!-- 创建免考会员数据 -->
<update id="createPassMemberAssess">
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})
</update>
<!-- 处理考试通过会员 -->
<update id="updatePassMemberAssess">
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})
</update>
</mapper>