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

413 lines
17 KiB
XML
Raw Normal View History

2025-04-24 19:02:08 +08:00
<?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">
<id column="PK_ID" property="pkId" />
<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_id NUMBER(20) primary key,
pk_member NUMBER(20) not null,
period NUMBER(6) not null,
settle_month VARCHAR2(12) not null,
assess_type NUMBER(2) not null,
pk_awards NUMBER(6) 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,
pk_country NUMBER(4) not null,
pk_creator NUMBER(20) not null,
creation_time DATE default sysdate not null,
modified_time DATE,
pk_modified NUMBER(20)
</sql>
<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="createCuMemberAssessTable">
create table ${tableName}
(
<include refid="CuMemberAssessColumn"></include>
)
</update>
<update id="createCuMemberTableUniqueIndex">
create unique index ${tableName}_PK_M on ${tableName}(PK_MEMBER,period, assess_type)
</update>
<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>
</mapper>