<?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.tcm.training.admin.points.mapper.PointsLedgerMapper">
|
|
<sql id="LedgerWhere">
|
WHERE l.deleted = 0
|
<if test="userPhone != null and userPhone.trim() != ''">
|
AND l.user_phone LIKE CONCAT('%', #{userPhone}, '%')
|
</if>
|
<if test="regionCode != null and regionCode.trim() != ''">
|
AND (
|
l.province_code = #{regionCode}
|
OR l.city_code = #{regionCode}
|
OR l.district_code = #{regionCode}
|
)
|
</if>
|
<if test="clinicName != null and clinicName.trim() != ''">
|
AND l.clinic_name LIKE CONCAT('%', #{clinicName}, '%')
|
</if>
|
<if test="incomeExpenseType != null and incomeExpenseType.trim() != ''">
|
AND l.income_expense_type = #{incomeExpenseType}
|
</if>
|
<if test="businessType != null and businessType.trim() != ''">
|
AND l.business_type = #{businessType}
|
</if>
|
<if test="contentKeyword != null and contentKeyword.trim() != ''">
|
AND l.content_name LIKE CONCAT('%', #{contentKeyword}, '%')
|
</if>
|
<if test="referenceNo != null and referenceNo.trim() != ''">
|
AND l.reference_no LIKE CONCAT('%', #{referenceNo}, '%')
|
</if>
|
<if test="operatedFrom != null">
|
AND l.operated_at <![CDATA[>=]]> #{operatedFrom}
|
</if>
|
<if test="operatedTo != null">
|
AND l.operated_at <![CDATA[<=]]> #{operatedTo}
|
</if>
|
</sql>
|
|
<sql id="LedgerColumns">
|
l.id,
|
l.app_user_id AS appUserId,
|
l.user_nickname AS userNickname,
|
l.user_phone AS userPhone,
|
CASE
|
WHEN l.province_name IS NOT NULL AND l.province_name != '' THEN
|
CONCAT(
|
l.province_name,
|
IFNULL(l.city_name, ''),
|
IFNULL(l.district_name, '')
|
)
|
ELSE '-'
|
END AS clinicRegion,
|
l.clinic_name AS clinicName,
|
l.income_expense_type AS incomeExpenseType,
|
l.business_type AS businessType,
|
l.content_name AS contentName,
|
l.reference_type AS referenceType,
|
l.reference_id AS referenceId,
|
l.reference_no AS referenceNo,
|
l.points_delta AS pointsDelta,
|
l.operated_at AS operatedAt,
|
CASE
|
WHEN l.reference_type = 'LIVE_COURSE' AND l.reference_id IS NOT NULL THEN CONCAT('/live/course/broadcast/', l.reference_id)
|
WHEN l.reference_type = 'EXCHANGE_ITEM' AND l.reference_id IS NOT NULL THEN CONCAT('/trade/order/points-exchange/items/', l.reference_id)
|
ELSE NULL
|
END AS referencePath,
|
CASE
|
WHEN (l.reference_type = 'LIVE_COURSE' OR l.reference_type = 'EXCHANGE_ITEM') AND l.reference_id IS NOT NULL THEN 1
|
ELSE 0
|
END AS canJump
|
</sql>
|
|
<select id="selectLedgerPage" resultType="com.tcm.training.admin.points.row.PointsLedgerRow">
|
SELECT
|
<include refid="LedgerColumns"/>
|
FROM tcm_points_ledger l
|
<include refid="LedgerWhere"/>
|
ORDER BY l.operated_at DESC, l.id DESC
|
</select>
|
|
<select id="selectAppLedgerPage" resultType="com.tcm.training.admin.points.row.PointsLedgerRow">
|
SELECT
|
<include refid="LedgerColumns"/>
|
FROM tcm_points_ledger l
|
WHERE l.deleted = 0
|
AND l.app_user_id = #{appUserId}
|
<if test="incomeExpenseType != null and incomeExpenseType.trim() != ''">
|
AND l.income_expense_type = #{incomeExpenseType}
|
</if>
|
ORDER BY l.operated_at DESC, l.id DESC
|
</select>
|
|
<select id="selectLedgerList" resultType="com.tcm.training.admin.points.row.PointsLedgerRow">
|
SELECT
|
<include refid="LedgerColumns"/>
|
FROM tcm_points_ledger l
|
<include refid="LedgerWhere"/>
|
ORDER BY l.operated_at DESC, l.id DESC
|
</select>
|
|
<select id="selectLedgerSummary" resultType="com.tcm.training.admin.points.row.PointsLedgerSummaryRow">
|
SELECT
|
COALESCE(SUM(CASE WHEN l.points_delta > 0 THEN l.points_delta ELSE 0 END), 0) AS incomeTotal,
|
COALESCE(SUM(CASE WHEN l.points_delta <![CDATA[<]]> 0 THEN ABS(l.points_delta) ELSE 0 END), 0) AS expenseTotal,
|
COALESCE(SUM(CASE WHEN l.business_type = 'LIVE_WATCH' AND l.points_delta > 0 THEN l.points_delta ELSE 0 END), 0) AS liveWatchIncomeTotal,
|
COALESCE(SUM(CASE WHEN l.business_type = 'POINTS_EXCHANGE' AND l.points_delta <![CDATA[<]]> 0 THEN ABS(l.points_delta) ELSE 0 END), 0) AS exchangeExpenseTotal
|
FROM tcm_points_ledger l
|
<include refid="LedgerWhere"/>
|
</select>
|
|
<select id="selectRegionOptions" resultType="com.tcm.training.admin.points.row.PointsRegionOptionRow">
|
SELECT DISTINCT
|
c.district_code AS regionCode,
|
CONCAT(c.province_name, c.city_name, c.district_name) AS regionName
|
FROM tcm_clinic c
|
WHERE c.deleted = 0
|
AND c.district_code IS NOT NULL
|
AND c.district_code != ''
|
ORDER BY regionName ASC
|
</select>
|
|
<select id="selectMissingQuizLedgerRows" resultType="com.tcm.training.admin.points.row.PointsLedgerSyncQuizRow">
|
SELECT
|
q.id AS sourceId,
|
q.app_user_id AS appUserId,
|
u.nickname AS userNickname,
|
u.phone AS userPhone,
|
u.clinic_id AS clinicId,
|
c.name AS clinicName,
|
c.province_code AS provinceCode,
|
c.province_name AS provinceName,
|
c.city_code AS cityCode,
|
c.city_name AS cityName,
|
c.district_code AS districtCode,
|
c.district_name AS districtName,
|
lc.title AS contentName,
|
lc.id AS referenceId,
|
CAST(lc.id AS CHAR) AS referenceNo,
|
q.points_earned AS pointsDelta,
|
q.answered_at AS operatedAt
|
FROM tcm_live_session_quiz_record q
|
INNER JOIN tcm_app_user u ON u.id = q.app_user_id AND u.deleted = 0
|
LEFT JOIN tcm_clinic c ON c.id = u.clinic_id AND c.deleted = 0
|
LEFT JOIN tcm_live_session s ON s.id = q.session_id AND s.deleted = 0
|
LEFT JOIN tcm_live_course lc ON lc.id = s.live_course_id AND lc.deleted = 0
|
LEFT JOIN tcm_points_ledger l ON l.source_type = 'LIVE_QUIZ' AND l.source_id = q.id AND l.deleted = 0
|
WHERE q.points_earned > 0
|
AND l.id IS NULL
|
ORDER BY q.id ASC
|
</select>
|
|
<select id="selectMissingExchangeLedgerRows" resultType="com.tcm.training.admin.points.row.PointsLedgerSyncExchangeRow">
|
SELECT
|
i.id AS sourceId,
|
i.app_user_id AS appUserId,
|
i.user_nickname AS userNickname,
|
i.user_phone AS userPhone,
|
i.clinic_id AS clinicId,
|
i.clinic_name AS clinicName,
|
COALESCE(i.province_code, c.province_code) AS provinceCode,
|
COALESCE(i.province_name, c.province_name) AS provinceName,
|
COALESCE(i.city_code, c.city_code) AS cityCode,
|
COALESCE(i.city_name, c.city_name) AS cityName,
|
COALESCE(i.district_code, c.district_code) AS districtCode,
|
COALESCE(i.district_name, c.district_name) AS districtName,
|
o.gift_name AS contentName,
|
i.id AS referenceId,
|
i.order_no AS referenceNo,
|
i.settled_points AS pointsDelta,
|
i.created_at AS operatedAt
|
FROM tcm_points_exchange_order_item i
|
LEFT JOIN tcm_points_exchange_order o ON o.id = i.order_id AND o.deleted = 0
|
LEFT JOIN tcm_clinic c ON c.id = i.clinic_id AND c.deleted = 0
|
LEFT JOIN tcm_points_ledger l ON l.source_type = 'EXCHANGE_ITEM' AND l.source_id = i.id AND l.deleted = 0
|
WHERE i.deleted = 0
|
AND l.id IS NULL
|
ORDER BY i.id ASC
|
</select>
|
|
</mapper>
|